前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >UAF 实例-RHme3 CTF 的一道题

UAF 实例-RHme3 CTF 的一道题

作者头像
信安之路
发布2018-08-08 14:48:11
1K0
发布2018-08-08 14:48:11
举报
文章被收录于专栏:信安之路

题目来源:

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-12-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 信安之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 初步了解
  • 查找漏洞
  • exp
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档