1. 보호기법 확인
$ checksec shella-easy
2. IDA – pseudo code 확인
v5은 0xCAFEBABE 값을 가지고 있는데, 이 값을 0xDEADBEEF로 바꿔야 한다.
또한 gets 함수로 입력받아 overflow 취약점이 있으므로 return address를 덮어 변조할 수 있다.
printf 함수로 s 변수의 주소를 출력해주므로 return address에 &s를 넣어서
리턴 시 s 시작주소로 이동할 수 있도록 한다.
s 에는 shellcode를 넣는다.
=> return to shellcode
3. payload
변수 s의 시작주소에서부터 변수 v5 까지의 거리는
s가 [ebp-48h]에 위치하고, v5가 [ebp-8h]에 위치하므로 0x48 - 0x8로 구할 수 있다.
v5에는 0xDEADBEEF를 넣어주면 된다.
v5가 [ebp-8h]에 위치하므로 SFP-8byte에 위치한다.
v5의 크기는 8 바이트인데 넣는 값은 4 바이트이므로 SFP 전 v5에 4 바이트의 dummy를 추가로 넣고
SFP + RET을 전달한다.
s(72) + SFP(4) + RET(4)
s[ shellcode(44) + A(20) + v5[ 0xDEADBEEF(4) + B(4) ] ] + SFP(4) + RET(4)
크게 보면 이런 구조를 갖는다.
4. exploit code + exploit
simple_heap (0) | 2019.12.21 |
---|---|
[TAMU 2019] pwn3 (0) | 2019.08.23 |
[HITCON-Training] lab4 : ret2lib (0) | 2019.08.18 |
r0pbaby 풀고 정리 (0) | 2019.08.16 |
[Defcon 2015] r0pbaby (0) | 2019.08.16 |