堆利用:图解unlink攻击原理

unsorted bin

关于堆分配时的行为,有以下几点需要注意:

  1. 往 free chunk 链表添加新 chunk 时的顺序:

    • glibc 的内存管理策略是,当 free 一个 chunk 时,会将其添加到对应 bin 的左侧(头部)。
    • 也就是说,新 free 的 chunk 会被插入到链表的左边/头部。
  2. 从 free chunk 链表分配 chunk 时的顺序:

    • 当 malloc 需要从 free chunk 链表中分配内存时,会优先选择链表右侧(尾部)的 chunk。
    • 也就是说,malloc 会优先选择链表中较旧的 chunk 进行分配。

当unsorted bin只有一个被释放的堆时候

1

当有三个时候

1

如果我们伪造了如下堆内存

0xcbf000:	0x0000000000000000	0x00000000000000a1
0xcbf010:	0x0000000000000000	0x0000000000000091
0xcbf020:	0x00000000006020c8	0x00000000006020d0
0xcbf030:	0x4d4d4d4d4d4d4d4d	0x4d4d4d4d4d4d4d4d
0xcbf040:	0x4d4d4d4d4d4d4d4d	0x4d4d4d4d4d4d4d4d
0xcbf050:	0x4d4d4d4d4d4d4d4d	0x4d4d4d4d4d4d4d4d
0xcbf060:	0x4d4d4d4d4d4d4d4d	0x4d4d4d4d4d4d4d4d
0xcbf070:	0x4d4d4d4d4d4d4d4d	0x4d4d4d4d4d4d4d4d
0xcbf080:	0x4d4d4d4d4d4d4d4d	0x4d4d4d4d4d4d4d4d
0xcbf090:	0x4d4d4d4d4d4d4d4d	0x4d4d4d4d4d4d4d4d
0xcbf0a0:	0x0000000000000090	0x00000000000000a0
0xcbf0b0:	0x0000000a4d4d4d4d	0x0000000000000000
0xcbf0c0:	0x0000000000000000	0x0000000000000000
0xcbf0d0:	0x0000000000000000	0x0000000000000000
0xcbf0e0:	0x0000000000000000	0x0000000000000000
0xcbf0f0:	0x0000000000000000	0x0000000000000000

再次释放的时候,就会删除这个本来不存在的堆与底下的堆合并

3
4

如果这个地方是堆的指针列表,这个指针现在指向了其自身位置 - 0x18 当我们再次修改这个指针时就能覆盖其自身

总结

此漏洞可以使得任意地址指向其自身 -0x18 的位置

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值