-
-
[讨论]关于整型bug与堆溢出
-
发表于:
2013-7-12 10:00
3043
-
关于整型bug与堆溢出
整型bug比较栈溢出难发现,最近看到一个整型bug引起的堆溢出,遇到了一些常见问题,借机会和大家讨论:)
整型溢出是指由整型bug引起的溢出,通常以栈或堆溢出告终。整型溢出由长度比较引起。
堆溢出是指在可写内存区域(不在栈上)发生的溢出,通常认为是malloc()分配堆空间发生的溢出。
而溢出是指缓冲区复制数据过程中,覆盖了相邻缓冲区的数据,引起了内存问题。
上面的理解为个人归纳,许多书并没有直接给概念,欢迎大牛拍砖指正。
在论坛里看到的一篇关于CVE-2012-0177分析,是一个整型bug引起的堆溢出漏洞,原文地址:
http://bbs.pediy.com/showthread.php?t=150206整型bug发生在检查HeaderIndexEntry.Cch的大小,
由于没有检查下一个结构HeaderIndexEntry.Cch的大小,引起堆溢出。
原文截图:
图I 整型bug引起的堆溢出
帖子里给了漏洞溢出的效果,下面截了一张图。因为崩溃是由memcpy访问越界造成的,而不是因为覆盖了相邻数据块的数据。这里不是堆溢出发生的位置。
图II memcpy访问越界
堆溢出应该是发生在call sub_6091103B(图I中),复制下一个HeaderIndexEntry头数据的时候,覆盖了再下一个的HeaderIndexEntry头,补上一个截图:
图III 堆溢出示意图
1.如果堆溢出确实是覆盖下一个HeaderIndexEntry头数据造成(call sub_6091103B),崩溃为什么发生在memcpy呢?会不会sub_6091103B拷贝的时候,调用memcpy这个函数访问越界。
2.解析文件格式时是一个遍历的过程,常常遇到在调试过程中,调试器没有给出要解析数据的符号。怎么对照文件格式参考文档,查看当前正在解析的是什么结构呢?
手里没有poc,这个漏洞没法分析下去了,但常见问题出来了,估计许多人遇到过,希望经验牛前来拍砖!
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!