堆溢出问题
来源:互联网 发布:大数据技术论文 编辑:程序博客网 时间:2024/05/21 10:32
以前没怎么弄过堆溢出问题,直到最近看见Google研究团队发布了关于dnsmasq的一系列问题 (需要翻墙)
其中有两个CVE涉及到了Heap Overflow。
其中的基础知识不再赘述,可以直接参考以下链接学习
1.Linux堆内存管理深入分析(上)
2.Linux堆内存管理深入分析(下)
3.Linux堆溢出漏洞利用之unlink
至此,基本的堆溢出原理就已经很明白了。
但是在最新的glibc中unlink的宏已经被修改,如下所示
#define unlink(AV, P, BK, FD){ if (__builtin_expect (chunksize(P) != prev_size (next_chunk(P)), 0)) malloc_printerr ("corrupted size vs. prev_size"); FD = P->fd; BK = P->bk; if (__builtin_expect (FD->bk != P || BK->fd != P, 0)) malloc_printerr ("corrupted double-linked list"); else { FD->bk = BK; BK->fd = FD; if (!in_smallbin_range (chunksize_nomask (P)) && __builtin_expect (P->fd_nextsize != NULL, 0)) { if (__builtin_expect (P->fd_nextsize->bk_nextsize != P, 0) || __builtin_expect (P->bk_nextsize->fd_nextsize != P, 0)) malloc_printerr ("corrupted double-linked list (not small)"); if (FD->fd_nextsize == NULL) { if (P->fd_nextsize == P) FD->fd_nextsize = FD->bk_nextsize = FD; else { FD->fd_nextsize = P->fd_nextsize; FD->bk_nextsize = P->bk_nextsize; P->fd_nextsize->bk_nextsize = FD; P->bk_nextsize->fd_nextsize = FD; } } else { P->fd_nextsize->bk_nextsize = P->bk_nextsize; P->bk_nextsize->fd_nextsize = P->fd_nextsize; } } }}
其中关键的部分为
if (__builtin_expect (FD->bk != P || BK->fd != P, 0))
这里就要求我们能找到一个ptr指向一个P,而P为堆上的分配的空间。
如何绕过此处,请参考如下链接
4.unlink绕过
阅读全文
0 0
- 堆溢出问题(-)
- 堆溢出问题
- java 非堆内存溢出问题
- Dalvik虚拟机的堆内存溢出问题
- 堆溢出
- 堆溢出,栈溢出
- 堆溢出、栈溢出
- 关于堆溢出(Stack overflow)问题的解决
- yahoo!messenger 的一个远程堆溢出问题
- 内存泄露,缓冲区溢出,堆破坏 的问题
- 堆溢出和栈溢出
- 关于myeclipse报堆内存溢出和永久内存溢出的问题
- 堆溢出的研究
- 【例子】堆缓冲区溢出
- windows下堆溢出
- 堆式缓冲区溢出
- Eclipse堆内存溢出
- 堆空间溢出
- 结合FME利用倾斜三维模型数据成果生成DSM等数据产品
- centos postgresql
- Python 文件和目录管理(os)
- linux线程和进程
- Stream创建斐波那契数列
- 堆溢出问题
- js图片上传
- Tensorflow实例:(卷积神经网络)LeNet-5模型
- java常用数据类型
- 银联支付的几种模式
- 10月10日初次接TP触框架之后有感,以及第一天对于框架这个词的认识。
- Android Base64上传图片到 SpringMVC服务器
- ViewPager删除当前页面
- Intellij IDEA struts2 json [指定类成员] [xml、注解]