house of force

house of force
前提:能通过溢出等方式能控制top_chunk的size域,可以自由控制堆分配尺寸的大小
公式为:malloc(size)中的size=new_top_chunk_addr-old_top_chunk_addr-0x1O
·new_top_chunk_addr为要转移top_chunk的目标地址。
·old_top_chunk_addr为已经被篡改的top_chunk.地址。
可以向前控制也可以向后控制
原理:在2.23和2.27的libc版本中,由于没有对top chunk的size合法性进行检查,因此如果我们能够控制top chunk的size位以及malloc在申请堆块时的大小不受限制
malloc中源码
1 | victim = av->top;//获取当前top chunk的地址 |
漏洞的利用在这一行代码remainder = chunk_at_offset (victim, nb)
如果我们可以控制nb的值,其实就可以控制remainder的值了(remainder就是切割后的top chunk的地址),这个手法最终的效果就是精准控制切割后top chunk的地址。
bamboobox
创建两个堆块看一下堆结构
x/16gx 0x1d09f000
这两个地方填的是
在程序刚开始的时候调用hello_message,在程序结束时调用goodbye_message
如果我们利用house of force 来控制topchunk ,往前控制内存,导致新分配的chunk 落在目标地址-0x10的位置,在里面写后门函数
计算目标地址与当前top_chunk的偏移
执行payload=p64(0)*5+p64(0xffffffffffffffff)之后
原本的topchunk变为了
执行add(offect,p64(magic_addr))
add(0x10,p64(magic_addr)*2)之后,变成
在退出程序的时候就会调用后门getshell
exp
1 |
|
- Title: house of force
- Author: luyanpei
- Created at : 2025-05-25 00:07:05
- Updated at : 2025-05-25 23:07:40
- Link: https://redefine.ohevan.com/2025/05/25/house of force未完成/
- License: All Rights Reserved © luyanpei