原题:rctf_2019_babyheap
复现:赵师傅https://buuoj.cn/challenges#rctf_2019_babyheap
保护:
全开没有,没给写got表
禁掉了execve
,这个就很难受了。写hook
到system
或者是one_gadget
就行不通了。
而且这个程序__free_hook
的附近找不到合适的chunk。
设置了global_max_fast = 0x16
(mallopt(1,0)
)
程序逻辑:标准的菜单题,add,delete,edit,show都有实现。
漏洞:漏洞倒是很明显,edit处在一处off-by-null。
这里用了Ex师傅的方案。Ex师傅tql
leak
off-by-null + unlink构造overlap
控制__free_hook
house of storm
写__free_hook 到setcontext
,控制寄存器,执行mprotect
shellcode注入getshell
膜一下Ex大佬----------------------
作用:
任意位置分配chunk
house of storm 利用条件:
可以控制unsorted bin
和large bin
任意地址chunk的size的低四位要为0
(其中第二点我不知道有什么含义,期望理解了的师傅教教我)
理解:
从我今天一下午的浅薄认知来讲,house of storm 更像是 unsorted bin 利用加上 large bin 利用。
其中,unsorted bin 利用负责把 fake_chunk链人unsorted bin 链表中,从而让我们有机会malloc
出来
而 large bin 利用主要是负责绕过从unsorted bin malloc
出来chunk的size check。
关与house of storm的利用原理,在这个文章里有提到https://xz.aliyun.com/t/5265。
我觉得这个漏洞还是分开看比较好理解,第一部分是unsorted bin 的部分
源码:
代码来自glibc2.23/malloc/malloc.c#__int_malloc
新的版本这个地方已经不太一样了,添加了对当前取出的chunk的检测,类似与check(bck->fd = victim)
的操作,但是在2.23中还没有。
通过代码我们可以发现,在解链的时候,unsorted bin
中的第一个chunk的fd
实际上是没有用到的,
通过控制bk
我们就可以把一个fake_chunk链入,尽管这种情况下,unsorted bin的双向链表被破坏。但是对于这个利用,没有什么关系。另外,当我们申请的size大小,也就是nb
,等于当前chunk的size的时候,就会把这个chunk返回给我们。
我们可以通过这样的利用将fake_chunk上链
第二部分是largebin atk
的部分
源码:
如果unsorted bin 中的chunk不符合size的要求,放入对应的bin中,在本次利用中,这个chunk是largebin
大小的,代码将执行以下分支,将其链入。
之其中有问题的代码就是这一句·
如果我们可以控制bk_next_size
,那么我们就有了一次任意写,写入chunk的地址
需要注意的是在之后
这个地方还有一次写入,需要保证,bk
指向的区域可写。
弄懂了这些,这个攻击就变得好理解一点了
poc
:
需要注意的是,开pie和不开略有区别,但是总体区别不大,开pie的成功率大约1/3
当我们malloc(0x48)
的时候,发生了这么几件事:
遍历unsorted bin ,取出第一个chunk,比较大小,不合适。
试图将这个chunk插入largebin
,由该chunk比largebin
中的chunk略大,这些关键的代码被执行
其中fwd即为我们poc
中的large_bin
。被我们设置为(size_t)fake_chunk - 0x18 - 5
,这样我们victim的高位,将被写入fake_chunk的size域,这个地方和我们找__malloc_hook
附近的chunk一样利用了偏移的技巧。至此,unsorted bin中被链入的fake_chunk已经有了size,一般来讲,这个size大约是0x5x
,这样我们malloc(0x48)
,这个chunk就是符合标准的
取出fake_chunk,合适,返回给我们,至此,house of storm达成。
虽然我们控制了__free_hook
,但是没有execve
用,控制程序执行流还是一个问题。这里用了一个setcontext
函数。
函数原型:
ucontext_t
这个结构,在srop
中也用到过,srop
模块已经被集成入pwntools
了,可以很方便的利用
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2020-2-13 11:24
被wx_yz编辑
,原因: