house of force

如果一个堆(heap based)漏洞想要通过house of force方法利用
需要以下条件:

  1. 能够以溢出等方式控制到top chunk的size域
  2. 能够自由地控制堆分配尺寸的大小

这种利用手法来源于glibc对top chunk的处理:
进行堆分配时,如果所有空闲的块都无法满足需求,那么就会从top chunk中分割出相应的大小作为堆块的空间


ctfshow143

no pie
在这个题目中,

edit居然可以直接溢出,输入的size由用户决定,直接堆溢出


REQUEST_OUT_OF_RANGE

1
2
#define REQUEST_OUT_OF_RANGE(req) \
((unsigned long)(req) >= (unsigned long)(INTERNAL_SIZE_T)(-2 * MINSIZE))

MINSIZE:堆分配器中允许分配的最小内存块大小

检查请求的内存req是否大于等于一个非常大的数值(由-2*MINSIZE转化而来)
-2*MINSIZE -> (INTERNAL_SIZE_T)型 -> (unsigned long)型 一个非常大的正数

如果req超过了这个数值,那么认为请求的内存大小超出了合理的范围


MINSIZE
在glibc的malloc实现中,MINSIZE的值通常是2*SIZE_S,其中SIZE_SEsizeof(size_t)

  • 32位系统:SIZE_SZ = 4,因此MINSIZE = 8
  • 64位系统:SIZE_SZ = 8,因此MINSIZE = 16

为什么是2 * SIZE_SZ

  • 内存对齐:分配器通常要求分配的内存块大小是2 * SIZE_SZ的倍数,以满足内存对齐要求

house of force
http://example.com/2025/03/28/house of force/
作者
yvyvSunlight
发布于
2025年3月28日
许可协议