扫一扫关注公众号,长期致力于安全研究
前言:本文通过静态分析技术,进一步探究MS06-040漏洞
上文通过动态调试,成功复现,但是对其代码功能还没有具体分析,本文通过静态分析,进一步分析
在上文中,漏洞触发点在NetpwPathCanonicalize函数内部中,找到NetpwPathCanonicalize函数内部触发溢出的函数分析之。
首先进入到该函数,进行判断arg_0参数
之后求出arg_0的长度并进行判断,这里注意一点,当传入字符串的时候,使用的ASSIC字符,而wcslen这个函数进行的Unicode样式的求长度,假设你字符串长度为80,那wcslen求出来的长度就是40了,继续往下跟
将arg_0拷贝给DeviceName,arg_0因为校验之后的长度最大是宽字节411,所以可用拷贝411*2
看似存在溢出,但是程序前使用了NetpwPathType函数进行校验,只能拷贝206个字节,这里利用点就无了
之后进行了arg_0参数与字符串 \进行拼接,这里没啥好看的,继续往下
终于到了漏洞点了,这里对arg_4这个参数首先进行了判断是否有或者/这两个字符。如果没有的话就自增2。
重点来了:首先求arg_4的Unicode长度,这里就是关键点,既然最大可以传411,但这里求的是Unicode长度,所以可利用大小为411*2
开头部分 mov ebx, 411h
之后进行长度判断,ebx为411最大长度,最后push arg_4进栈,并进行了字符串拼接操作,从而造成了栈溢出漏洞
实战中多动手,少扯理论。
下方扫一下扫,即可关注
本文始发于微信公众号(安全族):漏洞分析之MS06-040(完结)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论