UAF 实例-RHme3 CTF 的一道题

题目来源:

https://github.com/xerof4ks/heapwn/tree/master/rhme3

初步了解

堆的题目基本都是选择菜单,这里可以添加,删除,选择,编辑,展示球员,还可以显示队伍,功能看着很多啊

首先玩玩一下这个游戏,便于后期逆向一些数据结构

上面就是球员这个结构有什么信息,第一个 free slot 就相当于球员的 id,这个不用我们输入

remove 就删除咯

select 会输出球员的信息

edit 当前的 palyer,基于上面的 select

show palyer,这个显示的是 select 的 player

show team 会将所有球员信息打印出来

经过对 add_player 的逆向,可以推出 palyer 的结构

编写 add_palyer 查看内存结构

查看内存如下,大小为 0x20,

添加两个球员

了解得差不多了,开始吧

查找漏洞

看下 delete,判断 index 不能大于 10,且全局 players 数组不为 0,而且 delete 后将相应的 players 索引置 0,所以不存在 double free,free 的时候首先将 name 释放,再释放整个 palyer

那看看释放后能否重用,看看 show palyer,因为 delete 没将 selected 置 0,导致可以重用,这可以导致信息泄露

再有 edit 可以导致任意地址写漏洞

那怎么占位呢(下面图说的 0x17 不一定,我们 0x16,0x15 等也能占位,差不多大小就行)

就是创建两个 palyer,都 free 掉,再创建一个 palyer 即可占位,用 name 占第二个 palyer 的结构

还有我们下面写 got 的话有两个目标,一个 atoi,一个 strlen,不过 atoi 的话传入的参数只有四字节,只能传个 sh 过去了,strlen 也是可以的,留给大家尝试,就不贴出来了

exp

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值