house of force攻击手段是通过操作top chunk来进行利用的
top chunk是作为备用的堆空间,当需要申请chunk时,所有bins中的chunk都满足不了所需的size时,就会从top chunk中切割一块chunk出来返回给用户。
贴上源码
1 | victim = av->top; |
👴看不懂,也懒得看,直接解释
首先会检查申请的size,top chunk够不够给,如果够,就会把原先top chunk的head,变成新申请的chunk的head,并且以新申请的size为offset,把top chunk推到新的位置
house of force就是通过把top chunk推到任意位置,来控制目标内存
而且通过malloc不同的size,我们既可以把top chunk推到更高的地址,也可以把它送到更低的地址
我们的利用思路可以简单概括为,将top chunk的size改为-1,然后-1就会被解释为一个大数,然后可以使得所有64位值都能通过验证
gyctf_2020_force
这题就是通过house of force来做
首先分析下函数
只有add一个功能,puts是空壳函数
程序在申请chunk后,会打印出chunk的地址,那么我们申请一个大块的空间,系统就会用mmap分配,mmap分配的这块区域在libc下方,偏移是固定的,我们就可以算出libc_base
然后不管申请多大的chunk,都能读入0x50,那这里就存在溢出,我们通过这个溢出,把top chunk的size改为0xffffffffffffffff,那我们就可以申请很大的size了,我们申请一个size为malloc_hook何top chunk之间的偏移的chunk,那么就能将top chunk推到malloc_hook附近
1 | #!/usr/bin/env python |
参考链接:
https://bbs.pediy.com/thread-222924.htm
https://www.anquanke.com/post/id/175630