House of husk学习
Time: 2020-12-13 Tags: binaryLink: House of husk学习
开箱即用
Husk’s method
条件:有 printf
系函数,并有格式化符。有可以制造 UAF 的条件。malloc 分配的大小没限制或几乎没限制。没开沙箱 或者开了NX
使用:
- leak libc
- unsorted bin attack overwrite
global_max_fast
- overwrite
__printf_arginfo_table
and__printf_arginfo_table
, writeone_gadget
into__printf_arginfo_table[?]
。 - call
printf
Loona’s method
条件:可以在栈上伪造 size 。有可以制造 UAF 的条件。malloc 分配的大小没限制或几乎没限制。
使用:
- leak libc
- unsorted bin attack overwrite
global_max_fast
free
overwriteenviron
,showfd
。- correct
fd
tofake_size
- double malloc, rop
=======================分割线=======================
Husk’s method
知识列表
- leak libc
- unsorted bin attack
- overwrite
global_max_fast
- the call chain of
printf
- overwrite
__printf_arginfo_table
and__printf_arginfo_table
原理
3.
global_max_fast
的默认值是 0x80,fastbin
中的 chunk
会被写入到 main_arena
的某个位置。但是如果 global_max_fast
很大,那么我们就可以通过 free 一个大 size 的 chunk
, 这样就可以对一个 main_arena
的高地址写入一个堆地址。
具体计算如下:
写成函数:
4.
上面是 __register_printf_specifier 函数的部分代码,当 register_printf_specifier
函数第一次调用时,会给 __printf_arginfo_table
注册格式化输出函数,或者说赋初值。这个函数最终会在 __parse_one_specmb
中被调用。
同理, __printf_function_table
函数如果被注册,也会最终在 printf_positional
被调用。
5.
如果一个 printf
函数是这么输出的:
那么我们需要在伪造的堆块上这么构造:
chunk + ('X' - 2) * 8 = exploit_function
只要这个 printf
被调用,就会触发 exploit_function
。
POC
根据POC来分析一下 house_of_husk
的利用过程。
第一部分是 unsorted bin attack
打到global_max_fast
,单独截出来 没什么好说的。
下面这部分是改掉global_max_fast
之后用于覆盖__printf_arginfo_table
和__printf_function_table
的。
然后将伪造的堆块”X”位置改为对应的 exploit 即可。
效果:
问题
1.开了沙箱之后明显不知道如何控制程序流进行 orw。
这个可能可以通过 pcop 技术进行解决,但是还是没有找到能够控制参数的 gadget。也可以通过下一种方法解决。
2.需要 UAF 的堆块,而一般的题目不会给出直接的 UAF。
针对 off-by-null 等能够造成堆块重叠的漏洞可以使用 house of husk。
3.size 没算准。
建议枪毙。
Loona’s method
这种方法能够在没有 printf
和开了沙箱的情况下进行 ROP 攻击。代价是要能在栈上伪造size。
POC
和 Husk’s method 差不多,先对 global_max_fast
攻击。然后覆盖到 environ
。
之后覆盖这个堆块的 fd 为 fake_size - 8
,这样进行两次 malloc 之后,我们便将堆块分配到了栈上,拿到了一个栈上的堆块。
问题
所有 POC 均在 libc2.27 的环境下进行,所以 unsorted bin attack 还好使。
如果进入 libc2.31 环境中,本方法还需要优化。
参考链接
House of Husk https://ptr-yudai.hatenablog.com/entry/2020/04/02/111507
house-of-husk学习笔记 https://www.anquanke.com/post/id/202387