CVE-2010-3333调试,复现

  • 在漏洞战争这本书上看到这个洞,发现难度不大,于是决定来调试一番

首先是寻找漏洞存在的原因

经过资料知道漏洞点在 30ed442c这个位置,由于在解析pFragments属性值时候没有计算内存空间大小,存在栈溢出。

现在需要更多的细节,固打开WinDgb 进行调试。

Alt text

此处可以看到以下几个值 eax的值来自于POC的样本数据

Alt text
接着ecx取出eax的值并且执行右移两位的操作

于是理论上这个空间的大小是ffff进行右移4位,也就是3FFF,实际上用不了这么大。

内存的起始读入在edi 也就是00123dc0.

我们可以轻松的定位到ebp下方的返回地址

Alt text

然而这里并不是这个会崩溃的函数的返回地址。事实上这个函数的返回地址再上面 即00123da0

所以并不能够覆盖到这个地址。


但是控制EIP就必须要控制跳转。于是进入下面的函数进行分析、

首先来到30F0B5FB这个地址,发现下面有一个call 地址在30f0b611,这个我们姑且叫做检验函数。

进入这个函数,分析发现地址位于30f0b7c6的函数进入程序会报错,必须不让它跳过。

来到下面地址为30D0B7C6 分析发现这个跳转发生后有一个可以跳转到任意位置的CALL 地址为30F0B7E5

于是我们只需要构造适当的exp就可以达到控制EIP的目的。
Alt text

文章目录