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的跳板,這里先跳過了。有空補充。。