0%

针对topchunk的攻击

House_of_orange

攻击条件

能够修改到top_chunk的size值

可以得到一个unsortedbin

glibc ≤ 2.23

攻击原理

当malloc的值≥0x20000的时候会调用mmap来分配,而低于则会切割top_chunk来分配

当top_chunk不够分配的时候,会把当前top_chunk释放,然后再重新申请一个大的top_chunk

攻击方式

看top_chunk的size值,比如0x20791这样子

改为0x791,再申请一个大的即可无中生有一个unsorted bin出来

随后如果能够修改到unsortedbin的bk位,即可实现unsorted bin attack

一般后续攻击是挟持IO_list_all指针

unsorted bin attack实现的是将main_arena+0x88写到IO_list_all处

Untitled

此时要控制好main_arena+0x88处的IO_FILE的_chain即可(

这种攻击是通过abort流攻击的(因为unsorted bin结构被破坏

当再次申请内存的时候

调用流为malloc→malloc→printerr→__libc_message→abort()→_IO_flush_all_lockp()→_IO_overflow

但是2.27以及以后的版本取消了abort刷新流的操作,这个攻击方式就失效了(

不过释放到unsorted bin这一步之前还是可以的

House of force

攻击条件

能够修改到topchunk的size值

glibc ≤ 2.29

攻击原理

修改top_chunk的size为-1,能过过掉校验

然后可以通过申请内存,将top_chunk推至指定内存空间,然后malloc即可申请到那部分内存

由于2.29及其以前使用,常用在2.27+的时候,可以小范围将top_chunk推至tcache struct结构体里,修改entry_point实现tcache posioning attack

因为是相对位移,所以不需要leak出堆地址。

攻击方法

比如当前top_chunk_addr = 0x501000

malloc(-0x1000)即可将top_chunk_addr推至0x500000附近