漏洞分析之MS06-040(完结)

admin 2021年9月8日10:30:02评论284 views字数 767阅读2分33秒阅读模式

漏洞分析之MS06-040(完结)

扫一扫关注公众号,长期致力于安全研究

前言:本文通过静态分析技术,进一步探究MS06-040漏洞



0x01 静态分析

上文通过动态调试,成功复现,但是对其代码功能还没有具体分析,本文通过静态分析,进一步分析

漏洞分析之MS06-040

在上文中,漏洞触发点在NetpwPathCanonicalize函数内部中,找到NetpwPathCanonicalize函数内部触发溢出的函数分析之。


0x02 过程分析

首先进入到该函数,进行判断arg_0参数

漏洞分析之MS06-040(完结)


    之后求出arg_0的长度并进行判断,这里注意一点,当传入字符串的时候,使用的ASSIC字符,而wcslen这个函数进行的Unicode样式的求长度,假设你字符串长度为80,那wcslen求出来的长度就是40了,继续往下跟

漏洞分析之MS06-040(完结)


    将arg_0拷贝给DeviceName,arg_0因为校验之后的长度最大是宽字节411,所以可用拷贝411*2

    看似存在溢出,但是程序前使用了NetpwPathType函数进行校验,只能拷贝206个字节,这里利用点就无了

漏洞分析之MS06-040(完结)


之后进行了arg_0参数与字符串 \进行拼接,这里没啥好看的,继续往下

漏洞分析之MS06-040(完结)


终于到了漏洞点了,这里对arg_4这个参数首先进行了判断是否有或者/这两个字符。如果没有的话就自增2。

重点来了:首先求arg_4的Unicode长度,这里就是关键点,既然最大可以传411,但这里求的是Unicode长度,所以可利用大小为411*2

开头部分  mov  ebx, 411h

之后进行长度判断,ebx为411最大长度,最后push arg_4进栈,并进行了字符串拼接操作,从而造成了栈溢出漏洞

漏洞分析之MS06-040(完结)


0x03 结尾

实战中多动手,少扯理论。



11111
微信搜索关注 "安全族" 长期致力于安全研究


下方扫一下扫,即可关注

漏洞分析之MS06-040(完结)




本文始发于微信公众号(安全族):漏洞分析之MS06-040(完结)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年9月8日10:30:02
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   漏洞分析之MS06-040(完结)https://cn-sec.com/archives/436705.html

发表评论

匿名网友 填写信息