pwnable spirited_away

这题以前做完了,没拿到pwnable的flag,又重新做了下,

一个是信息泄露,拿libc基地址和栈地址,可以通过reason栈上残留数据获取

在read获取reason下个断点,查看下buf此时里面的数据

可以看到0xfff54f58 处有个libc的地址。通过read把前面的数据填满,这个地址就会打印出来了

这个buf偏移0x38处可以泄露栈地址,这个地址和reason地址的offset是固定的

现在有了libc基地址,和栈上reason地址,

接下来就是sprintf函数的漏洞,安全函数 调用snprintf

v1明显可以被溢出,看下栈情况

v1被溢出,修改了nbytes的值,看下图的read函数,溢出可以控制name堆地址

也就是说,我们可以将栈上地址当作堆地址,而且还可以控制这个地址里面的数据。

在溢出前,需要将栈地址里面构造一个chunk 结构,不然free 堆报错。先将栈reason地址写入一个chunk结构,然后在上图的read函数处,溢出s buf,将栈reason+8的地址覆盖堆地址reason+8,因为chunk头有8个字节

等下一次读取reason的时候,就能直接控制覆盖掉ret地址为system.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值