
got表可以覆写
pie也没开
三个功能
1
申请空间 读入内容 释放空间
2

给释放任意一次堆的机会

往bss上的target写东西,写上去就成。
我们观察到
free的时候那个chunk的偏移可以输入负值
所以我们直接输入-0x290就可以free掉tcache struct
我们刚开始的想法是直接在struct中填上target处的地址,然后malloc回来改了就行
但是后来发现,因为程序中malloc之后写入内容之后会强制free,这会导致我们malloc的chunk在free的时候报错
尝试在got表中去寻找合适的malloc的位置但是也都失败了
最后决定我们可以直接劫持掉free的got表,直接劫持成puts的plt,让其free的时候仅仅是puts一下。
此时我们可以直接再次覆盖下去,但是要吧里面其他函数的got表都填好
当然我们也可以再次攻击tcache struct,这次就可以直接攻击target,改了就好。
exp
from pwn import*
from ctypes import*
lib = cdll.LoadLibrary('libc.so.6')
context.log_level='debug'
context.arch='amd64'
context.os = "linux"
sa = lambda s,n : r.sendafter(s,n)
sla = lambda s,n : r.sendlineafter(

本文探讨了一种高级内存操纵手法,通过劫持free函数,实现了对程序内存的间接控制。作者介绍了如何利用free的got表实现puts劫持,从而绕过malloc后的强制free,最终成功攻击目标变量。涉及的技术包括gdb调试、ELF文件操作和动态链接库的函数重定向。
最低0.47元/天 解锁文章
1004





