-
-
[原创]CVE-2008-4250 netapi32.dll组件函数NetpwPathCanonicalize()溢出问题
-
-
[原创]CVE-2008-4250 netapi32.dll组件函数NetpwPathCanonicalize()溢出问题
netapi32.dll是Windows网络应用程序接口,用于支持访问微软网络。
Windows XP SP3
VC 6.0++
OD
我们首先使用如下代码做一个简单的测试
接下来,我们通过OD去打开编译好的程序,将程序执行到"LoadLibraryA"以后,用来加载动态链接库NETAPI32.DLL。
我们在"静态分析"的IDA分析中知道,出现问题的是wcscpy函数,且地址为"5FDDA2F3"那么我们直接跳过来。既然我们需要溢出,那么需要注意返回地址的位置。
下面我们着重关注一下,我们知道,在wcscpy函数之前的push 指令,真是传参。且"eax"为源地址,"edi"为目的地址。
我们来在内存中查看一下,并且确认一下边界值。
下面,我们执行完成wcscpy,这个时候我们发现已经被"简化"完成了。
我们继续单步执行,直到出现如下图位置,该位置是执行edi减2操作,因为是宽字节,所以减2向前推进。
在执行完"edi-0x2"并且将值存储到eax当中,紧接着在判断是否越界的时候,使用了cmp指令。这就意味着你的EAX值只有在等于边界值的情况才会判断不会继续向前检索且停住简化。关键是,执行完成之后eax=12f6c2< 边界值。这样的情况,是不会停止“简化”操作的。
我们继续执行代码,如下位置,代码再次发现了"\",与是停下来,准备"简化"操作。
我们定位到内存,了解到如下区域将会被覆盖
成功定位到覆盖区域之后,我们最终需要控制的是wcscpy这个位置的返回地址,在如下图位置找到。地址为"0X12f688"
接下来我们是需要在"简化"的过程中控制地址“12F688”的内容即可。首先我们知道缓存区的起始位置为“0X12F5A6”,详细覆盖方案如下:
效果如下:
了解汇编语言,使用IDA。
通过IDA打开netapi32.dll,并且定位到NetpwPathCanonicalize函数当中。且该函数当中存在一个子函数sub_5FDDA180。它的作用是规范化路径字符串。溢出函数即存在当中。
点击进入当中,我们来分析一下这个函数:
1.1;首先我们先是进行基本的内容查看。详细如下图:
1.2;基本的环境初始化结束之后,首先是进行判断是否为"\"。下面的图片当中,展现了定位"\"。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2021-3-8 09:05
被天象独行编辑
,原因: