__free_hook 劫持原理
前言
本文学习自 Ex 师傅的__free_hook 劫持原理 , 根据学习情况略有补充和修改
例子
先从一个简单的例子来讲,下面代码直接队全局变量__free_hook
进行修改
c
|
编译运行:
bash
➜ work gcc __free_hook.c -o __free_hook |
源码分析
- 源码来自 glibc 2.23, 后面是行号
glibc-2.23/malloc/malloc.c: 1851
c
void weak_variable (*__free_hook) (void *__ptr, |
这里定义为的__free_hook
定义为全局变量,所以可以直接被修改。再来看看__free_hook
的引用:
c
void |
上面的代码是 free()
函数的一部分,可以看出程序先把全局变量__free_hook
赋给了局部变量 hook
,然后对 hook
是否为 NULL
进行判断,如果不为空,则执行 hook
,第一个参数就是 chunk
的内容部分。
一般情况下__free_hook
是为 NULL
, 因此上述代码是不会执行的,但是如果恶意修改__free_hook
, 就会造成__free_hook
劫持,如例子所示
参考
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lantern's 小站!
评论
Be the first person to leave a comment!