MS08_067漏洞學習研究


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM