例题
- 西湖论剑 - storm note
- (学习资料参考链接)[https://ch4r1l3.github.io/2018/08/15/large-bin-attack-%E5%AD%A6%E4%B9%A0%E8%AE%B0%E5%BD%95/#more
]
利用思路:,,
- 主要利用过程在 malloc 分配 反向遍历解除 unsorted bin list 的大循环中
-
利用条件: (提到的 fakechunk 相关值可以调整 , 此处仅为成功样例)
- 可控内容 large bin chunk 1 个 | bk = fake_chunk - 0x10 + 3 , bk_nextsize = fake_chunk - 0x8
- 可控内容 unsorted bin chunk 1 个 | bk = fake_chunk
- chunksize(large_bin) < chunksize(unsorted_bin)
- 分配一个 最终size 为 0x50 的 chunk (触发利用)
- pie开启(此条件非必须,但是极大提高利用的稳定性)
-
利用的漏洞点
- unsorted bin attack
- image.png
- fake_chunk -> fd = libc_addr (xxxxx 根据libc版本和程序位数有所不同)
- 将fake_chunk 置为最后一个 unsorted_bin_list , 下一个进行解链
- 两个任意地址写堆地址
-
- image.png
- 重点语句为 victim->bk_nextsize->fd_nextsize = victim
- 作用
- (fake_chunk-0x8)->fd_nextsize = victim
-
- image.png
- 作用:
- (fake_chunk - 0x10 + 3)->fd = victim | 此处 + 3 是为了偏移从而设置 fake_chunk 的 size
- 至此构造成功了一个 size 为 0x56 , fd = libc_addr , bk = heap_addr 的chunk
-
- unsorted bin attack
-
- 最终利用达成点:
- image.png
- 此处是为了在 构造的指定地址的fake chunk 初次取出时 因为 size 与 所需大小正好相等而被直接取出
- 如果分配与构造大小不同的值则会因为下面按照算法匹配合适大小的chunk时无法通过size检查而报错
网友评论