低版本下的unlink漏洞攻击

重新做了一下低版本的unlink漏洞攻击,有了新的感悟,发现其实以前根本没搞明白

#define unlink(AV, P, BK, FD) {                                            
    FD = P->fd;                               
    BK = P->bk;
	//检查p和其前后的chunk是否构成双向链表
    if (__builtin_expect (FD->bk != P || BK->fd != P, 0))           
      malloc_printerr (check_action, "corrupted double-linked list", P, AV);  
    else 
    {                            
        FD->bk = BK;                           
        BK->fd = FD;

这是unlink前两个相邻堆块合并前的unlink的操作
在此操作之前,会检查释放的堆块的pre_size和前一个chunk的size是否匹配得上,然后再去看自己得size位得in_use位是否是置为零的。

还是以bamboobox的题目为例,真的重做一遍发现,又理解了许多。
这里我先写下我做题(低版本)这种unlink漏洞利用的理解:
首先unlink操作是发生在unsortedbin里的,也就是说我们构造的堆块必须要大小要是大于等于0x80(包括chunk头的话实际上是0x90,这是最起码的),然后就是构造假的chunk,注意注意,unlink的漏洞利用的条件是,首先最最最起码要有一个off by one的漏洞,接着就是构造一个假的chunk,最重要的是构造它的fd,bk指针,还要去修改下一个chunk的presize位和假chunk的size对得上,注意注意,假chunk的size位的in_use位要为1。

(4条消息) 【PWN-HEAP】Unlink学习笔记_pwn heap unlink_Tr@cer的博客-CSDN博客

另外贴上这位大佬的博客,里面的调试信息非常得清楚。

然后谈谈我的理解,这个假chunk的fd bk指针的构造需要特定的地址才能绕过unlink的检测的
先下个结论:首先要找到合适的地址,按照ctfwiki上面的说法是,选取的地址必须是指向一个chunk。可以去试试,不满足这个条件就会报错,耐心调试就行

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值