BUUCTF hitcontraining_uaf

这篇博客详细介绍了如何利用BUUCTF中的hitcontraining_uaf漏洞进行堆溢出攻击。博主首先解析了程序的堆块管理系统,特别是add函数的工作原理,接着讨论了delete操作导致的Use-After-Free(UAF)问题。尽管存在UAF,但由于没有可写的堆块,直接利用变得困难。通过double free技巧,博主发现可以创建一个循环链,并成功修改指针堆块,将print_note_content函数替换为system,最终在print操作时触发getshell,实现了漏洞利用。

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

这是我第一次自己做出来的堆题,,🐔动

在这里插入图片描述
没什么特别,,看一看代码

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

还是一个堆块管理系统,不过这次他管理的时候有些不一样
在这里插入图片描述
1.add
不一样就在这里,,如果要创建一个用户数据,,先malloc一个八字节的指针堆块(我这么叫。。里面放着指针),,这八字节,前四个字节是一个pirnt_note_content函数,,这个函数的作用是以他后面相邻四个字节的数据为指针,打印这个指针里面的内容;;;申请到的8字节后四个字节才是我们申请到的数据块的指针,这个堆块大小由我们的输入而定。
还有,这个程序同样维护着一个堆块指针表,,这个堆块指针表里面存的是指针堆块的指针。。(~rap)
最后只允许申请5次,有计数。。
在这里插入图片描述
刚申请了一个用户数据,堆块指针表是这样的,,一个指针4字节
在这里插入图片描述
申请一个数据要用两个堆块
在这里插入图片描述
第一行是第一个堆块,就是我说的指针堆块,,可以看到后八字节里面,,前4是0x80485fb
在这里插入图片描述 是这个函数的地址
后四字节是个指针,指向下一个堆块的用户数据。。

在这里插入图片描述
2.delete
可以看到有UAF漏洞,但是却不好利用
释放的时候先释放了用户可写的那块堆块,,然后释放了指针堆块,,所以一次delete释放了两个堆块
在这里插入图片描述
如果申请了20大小,delete之后就是这样

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值