又是适逢其时的春困。日复滋长的赖床时间和廉价咖啡因并未能击退积怨已久的黑眼圈,也只能寄希望于冷水澡和堆砌文字的无用功了。
上周读到一篇非常优秀的论文:Automatic Techniques to Systematically Discover New Heap Exploitation Primitives, 主要介绍了作者如何在各种堆管理器中自动化寻找攻击利用技巧的工作。虽然对于具体实现部分还没有完全理解透彻,但文中对于利用技巧的表述令人眼前一亮。由于本菜鸟对glibc堆的漏洞利用长期停留在上来就fastbin attack的水平,每次遇到此类题目都会花大量时间来做英文阅读理解(主要是how2heap),即使一眼看出漏洞也要半天才能确认攻击方向动手写exp。
对于这种非智力差异导致的战术性缺口,除了多做总结整理也没别的方法了。于是花了几天时间,选取how2heap上面常见的攻击方式按照论文提供的格式重新整理出The Glibc Heap Playbook预览版。
注意:以下所有代码的主要目的是描述漏洞的利用方法,并不能进行编译测试。
首先来观摩一下上面介绍的论文当中关于Unlink攻击方法的表示:
Unlink
1 | // [PRE-CONDITION] |
比起how2heap上面的PoC清楚太多了。
OK, 以下进入本人不负责任编写部分。
Fastbin Attack
1 | // [PRE-CONDITION] |
House of Spirit
1 | // [PRE-CONDITION] |
House of Lore
1 | // [PRE-CONDITION] |
House of Force
1 | // [PRE-CONDITION] |
House of Einherjar
1 | // [PRE-CONDITION] |
House of Orange (Phase 1)
There are two phase in House of Orange
, phase 1 is about creating an unsorted bin chunk without using free
, phase two is about using unsortedbin attack to hijack control flow.
1 | // [PRE-CONDITION] |
House of Orange (Phase 2)
The tactic can be used to bypass vtable check added in 2.24.
1 | // [PRE-CONDITION] |
Appendix: How to Find _IO_str_jumps
1 | pwndbg> p _IO_str_underflow |
_IO_str_jumps
< _IO_file_jumps
, so last entry of the search is what we want._IO_str_jumps
= 0x7f4d4d2245e0 - 0x20 = 0x7f4d4d2245c0
Unsortedbin Into Stack
1 | // [PRE-CONDITION] |
Unsoredbin Attack
1 | // [PRE-CONDITION] |
Largebin Attack
1 | // [PRE-CONDITION] |