p197 MS08-067漏洞渗透攻击
按照书上的设置做,exploit得到错误信息:
Exploit failed [unreachable]: Rex::ConnectionRefused The connection was refused by the remote host (10.10.10.130:445).
在2k3下输入netstat -an看到445端口是开着的,而且也没有设置防火墙。
可是在kali 上用nmap 也扫不到445这个端口,奇怪!
(补充:后来就成功了,我也没弄过什么啊。。有点莫名其妙)
p205 MS08-067漏洞机理分析:(每次运行堆栈中的地址会不同,但各函数的地址一样)
首先通过IDA Pro打开c:\windows\system32\netapi32.dll,找到漏洞所在的NetpwPathCanonicalize函数并双击。
书上说通过观察其流程图CFG可知,此函数并没有直接进行输入路径和规范化,而是调用了下级函数CanonicalizePathName。(我并不太会看)
打开OllyDbg,点击file->attach,附着到svchost.exe进程上(通过wmic查看命令行参数为svchost.exe -k netsvcs的进程pid)
view->executable modules双击netapi32,在cpu指令窗口右键选Search for,找到函数NetpwPathCanonicalize,地址为71C44A3E
按照书上说的在此处下了断点,然后点F9运行,从攻击机那里通过metasploit进行exploit。
回到OllyDbg中程序运行到断点,即NetpwPathCanonicalize函数入口处。
查看栈中的参数,结合网上查阅的NetpwPathCanonicalize函数信息可知每个参数的意义。
结合IDA Pro分析可知,NetpwPathCanonicalize函数将在地址0x71C44A9E处调用下级函数CanonicalizePathName。在此处下断点。
按F9继续运行至此断点,然后按F7跟踪函数。查看当前esp内的参数:
esp [esp]
其意义依次为:
指向prefix,值为\x5c\x00,即unicode '\'
指向待整理路径
指向输出路径的buffer
输出buffer的长度
WORD Flag保留字,值为0
从这些参数的意义可以大概知道,CanonicalizePathName函数就是将路径整理后,输出到预先分配的buffer上 。
于是我们研究它对路径做了哪些处理。
在待整理路径000C0F50处下断点。(待整理路径的形如:"\**********\..\..\***")
按F9运行,会中断3次,第三次是在调用msvcrt.dll模块中的wcscat函数。
分析栈中两个参数
第一个是目的地址,指向一段以\x5c\x00开头的内存空间;第二个是源地址,指向上述待整理路径前两字节\x5c\x00后的内容。
因此,程序把待整理路径全部复制到strDestination即0x001572F6处。在此4字节设断点,类型选择"Hardware, on access"Word。
按F9运行,中断多次后停在内存0x77bd4d36处,通过栈可知此处属于wcscpy函数。此处调用该函数进行第一次路径规范化。
这是wcscpy函数的代码:
分析代码可知,此时wcscpy源地址在edx寄存器中:
指向"\..\***"
目的地址在ecx寄存器中:
指向待整理路径第一个字符"\"
可知此次规范化即把待整理路径中第一个字符"\"和第一个"\..\"相对路径之间的内容抛弃。
第一次规范化后,待整理路径形如:"\..\***"
由于还有"\..\",还需进行一次规范化。这第二次规范化才是玄机所在。
接下来移除0x00F0F4DC处4字节的硬件断点,直接在wcscpy入口地址处下断点。
Oh, no!运行中一直没有停在这里。学这个漏洞断断续续用了快一星期,当做学习OllyDbg的跳板,这里先跳过了。有空补充。。