hackme.inndy.tw raas 经验总结

本文详细解析了UAF(Use After Free)漏洞的原理及其在Glibc内存管理中的应用。通过具体步骤展示了如何利用UAF漏洞实现堆块重用,最终达到getshell的目的。涉及创建和删除记录、文本大小设置、堆块分配与重用、函数指针布局等关键环节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相关资料:
Glibc内存管理

如果有人看我的总结的话直接看资料就行了,堆之类的我也刚接触,不怎么熟悉

UAF漏洞原理是 在释放较小的堆块的时候不会立马把这个堆块放到small bins
当中,而会把这个堆块放到fast bins当中, 当需要再次分配堆块的时候会优先再 fast bins寻找合适的堆块,找到了则返回,如果没找到才会去small bins中寻找空闲的堆块。利用这个特性可以造成堆块重用,然后进行漏洞利用

分析程序逻辑:

程序一开始有三个操作:
1.创建记录
2.删除记录
3.显示记录

记录中的数据有两种:
1.整数
2.文本

创建整数的记录时只会分配一个数据区大小为12字节的堆块
创建文本的记录时会分配两个堆块,第一个堆块数据区大小为12字节,第二个堆块的数据区大小由我们指定

数据区大小为12字节的堆块前八个字节分别存放显示记录的函数和删除记录的函数的指针,最后四个字节要么存放整数,要么存放指向文本数据区的堆块指针

漏洞利用思路:
利用UAF漏洞的大小重用

1. 我们可以先创建两个新的记录,存放文本, 文本的大小不要设置为12 字节,不然后面重用的时候可能会失败

2. 假设前面创建的两个记录按照先后顺序编号为0, 1, 接着按0, 1 顺序删除这两个记录,

3. 再创建一个记录,存放文本,文本大小设置为12字节
这个记录所分配的第一个堆块数据区为12字节,跟前面释放的两个堆块大小相等,会造成重用,而堆块在释放时会根据越后释放的堆块会先被分配,所以编号为1 的堆块被重用
之后由于设置了文本的大小为12字节,所以编号为0 的堆块也会被重用

4. 观察删除记录的过程
在这里插入图片描述
删除记录是调用 删除记录的函数指针,以开头的四个字节作为参数

5. 布置getshell 的数据
往编号为0的堆块中输入数据,由于这是32位的程序,开头只有4个字节容不下"/bin/sh"字符串,只能发送"sh",接下来4个字节布置为system函数 的plt表地址

6. getshell
再释放一次编号为0 的堆块就能成功getshell

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值