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处
此时要控制好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附近