house of force
如果一个堆(heap based)漏洞想要通过house of force方法利用
需要以下条件:
- 能够以溢出等方式控制到top chunk的size域
- 能够自由地控制堆分配尺寸的大小
这种利用手法来源于glibc对top chunk的处理:
进行堆分配时,如果所有空闲的块都无法满足需求,那么就会从top chunk中分割出相应的大小作为堆块的空间
ctfshow143
no pie
在这个题目中,
edit居然可以直接溢出,输入的size由用户决定,直接堆溢出
REQUEST_OUT_OF_RANGE
宏
1 |
|
MINSIZE
:堆分配器中允许分配的最小内存块大小
检查请求的内存req
是否大于等于一个非常大的数值(由-2*MINSIZE
转化而来)-2*MINSIZE
-> (INTERNAL_SIZE_T)型 -> (unsigned long)型 一个非常大的正数
如果req
超过了这个数值,那么认为请求的内存大小超出了合理的范围
MINSIZE
在glibc的malloc
实现中,MINSIZE
的值通常是2*SIZE_S
,其中SIZE_SE
是sizeof(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/