ciscn2021初赛pwn部分wp

ciscn2021初赛感谢wepn的队友Column: May 17, 2021pwny:首先ida看一眼发现read文件描述符全是3, 好像是读个随机数, 然后我们在3的地址上连着用Write读两次就可以把他变成0, 就可以写入内存了, 后面就是数组越界写, 负数可以往前面读读出libc偏移和pie偏移, 在得到libc之后可以获得环境变量environ的地址, 之后通过(libc_base+libc.sym[‘environ’]-pie_base-0x202060)/8, 就可以得到其位置是数组
摘要由CSDN通过智能技术生成

ciscn2021初赛

感谢wepn的队友
Column: May 17, 2021

pwny:

首先ida看一眼发现read文件描述符全是3, 好像是读个随机数, 然后我们在3的地址上连着用Write读两次就可以把他变成0, 就可以写入内存了, 后面就是数组越界写, 负数可以往前面读读出libc偏移和pie偏移, 在得到libc之后可以获得环境变量environ的地址, 之后通过(libc_base+libc.sym[‘environ’]-pie_base-0x202060)/8, 就可以得到其位置是数组的第几号元素, 然后调用Read()读取栈地址, 之后由于main函数不存在返回函数, 我们需要使用其它函数这里我用的Read(),

这俩一减, 然后再和上面类似就可以算出Read()的ret在数组上为第几号元素, 这样在下次的Write()中可以直接写入ret的地址了(ps. 这里的偏移也要动态调试, 反正到最后也是固定的), 之后在ret上嗯写onegadget就行了

exp:
在这里插入图片描述在这里插入图片描述

lonelywolf:

和下面的silverwolf差不多吧, 能做出下面的肯定能做出上面的, 这题我用的方法是通过scanf将fastbin写入unsortedbin中然后泄露libc, 之后改改tc结构和chunk的tc就结束了,简单题嘞~

exp:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值