关于MS08-067的一点细节
2008-10-27 13:30:33 来源:WEB开发网这个漏洞就不介绍了,已经沸沸扬扬了。
首先milw0rm上那个exp的编译问题,作者在里面放的些小trick很容易fix,主要麻烦的是midl编译idl文件后,在VC6环境下编译可能出现rcpt库的错误。可能是SDK的版本导致的,云舒用最新的SDK(好像是2008?)编译成功了。
其次是触发问题,什么权限都不需要,空连接后就能触发。
ncacn_np:192.168.152.101[pipesrvsvc] 直接请求就可以了。
问题还是出在 NetpwPathCanonicalize() 的第二个参数,这个漏洞非常奇特。
首先这个参数的长度不能超过 0x207(unicode)
71BB58F6 81FF 07020000 CMP EDI,207
71BB58FC ^ 0F87 F447FFFF JA NETAPI32.71BAA0F6 // 如果大于了就直接函数返回了
71BB5902 ^ E9 1247FFFF JMP NETAPI32.71BAA019
然后会走到一个wcscat的地方,这里没有问题,因为空间是足够的
71BAA019 8D85 E8FBFFFF LEA EAX,DWORD PTR SS:[EBP-418]
71BAA01F 53 PUSH EBX
71BAA020 50 PUSH EAX
71BAA021 FF15 9810BA71 CALL DWORD PTR DS:[<&msvcrt.wcscat>] ; msvcrt.wcscat
继续往下会把所有的 "/" 替换为 "" 这里也无关紧要
然后就走到出问题的函数
71BAA05A 8D85 E8FBFFFF LEA EAX,DWORD PTR SS:[EBP-418]
71BAA060 50 PUSH EAX
71BAA061 E8 AB020000 CALL NETAPI32.71BAA311
跟进去后很复杂,可以参考下这里的伪代码
http://www.phreedom.org/blog/2008/decompiling-ms08-067/
估计很多人在这里绕晕了,我跟了一晚上,总算搞明白了一点。