第三章 爬蟲和蜘蛛
作者:Gilberto Najera-Gutierrez
譯者:飛龍
簡介
滲透測試可以通過多種途徑完成,例如黑盒、灰盒和白盒。黑盒測試在測試者沒有任何應用的前置信息條件下執行,除了服務器的 URL。白盒測試在測試者擁有目標的全部信息的條件下執行,例如它的構造、軟件版本、測試用戶、開發信息,以及其它。灰盒測試是黑盒和白盒的混合。
對于黑盒和灰盒測試,偵查階段對測試者非常必然,以便發現白盒測試中通常由應用所有者提供的信息。
我們打算采取黑盒測試方式,因為它涉及到外部攻擊者用于獲取足夠信息的所有步驟,以便入侵應用或服務器的特定功能。
作為每個 Web 滲透測試中偵查階段的一部分,我們需要瀏覽器每個包含在網頁中的鏈接,并跟蹤它展示的每個文件。有一些工具能夠幫助我們自動和以及加速完成這個任務,它們叫做 Web 爬蟲或蜘蛛。這些工具通過跟隨所有到外部文件的鏈接和引用,有的時候會填充表單并將它們發送到服務器,保存所有請求和響應來瀏覽網頁,從而提供給我們離線分析它們的機會。
這一章中,我們會涉及到一些包含在 Kali 中的爬蟲的使用,也會查看我們感興趣的文件和目錄,來尋找常見的網頁。
3.1 使用 Wget 為離線分析下載網頁
Wget 是 GNU 項目的一部分,也包含在主流 linux 發行版中,包括 Kali。它能夠遞歸為離線瀏覽下載網頁,包括鏈接轉換和下載非 HTML 文件。
這個秘籍中,我們會使用 Wget 來下載和 vulnerable_vm 中的應用相關的頁面。
準備
這一章的所有秘籍都需要運行 vulnerable_vm。在這本書的特定場景中,它的 IP 地址為 192.168.56.102。
操作步驟
-
讓我們做第一次嘗試,通過僅僅以一個參數調用 Wget 來下載頁面。
wget http://192.168.56.102/bodgeit/
我們可以看到,它僅僅下載了
index.html
文件到當前目錄,這是應用的首頁。 -
我們需要使用一些選項,告訴 Wget 將所有下載的文件保存到特定目錄中,并且復制我們設為參數的 URL 中包含的所有文件。讓我們首先創建目錄來保存這些文件:
mkdir bodgeit_offline
-
現在,我們會遞歸下載應用中所有文件并保存到相應目錄中。
wget -r -P bodgeit_offline/ http://192.168.56.102/bodgeit/
工作原理
像之前提到的那樣,Wget 是個為下載 HTTP 內容創建的工具。通過-r
參數,我們可以使其遞歸下載,這會按照它所下載的每個頁面的所有連接,并同樣下載它們。-P
選項允許我們設置目錄前綴,這是 Wget 會開始保存下載內容的目錄。默認它設為當前目錄。
更多
在我們使用 Wget 時,可以考慮一些其它的實用選項:
-l
:在遞歸下載的時候,規定 Wget 的遍歷深度可能很有必要。這個選項后面帶有我們想要遍歷的層級深度的數值,讓我們規定這樣的界限。-k
:在文件下載之后,Wget 修改所有鏈接,使其指向相應的本地文件,這會使站點能夠在本地瀏覽。-p
:這個選項讓 Wget 下載頁面所需的所有圖像,即使它們位于其它站點。-w
:這個選項讓 Wget 在兩次下載之間等待指定的描述。當服務器中存在防止自動瀏覽的機制時,這會非常有用。
3.2 使用 HTTrack 為離線分析下載頁面
就像 HTTrack 的官網所說(http://www.httrack.com
):
它允許你從互聯網下載 WWW 站點到本地目錄中,遞歸構建所有目錄、從服務器獲得 HTML、圖像,和其它文件到你的計算機中。
我們在這個秘籍中會使用 HTTrack 來下載應用站點的所有內容。
準備
HTTrack 沒有默認在 Kali 中安裝。所以我們需要安裝它。
apt-get update
apt-get install httrack
操作步驟
-
我們的第一步是創建目錄來儲存下載的站點,輸入:
mkdir bodgeit_httrack cd bodgeit_httrack
-
使用 HTTrack 的最簡單方式就是向命令中添加我們打算下載的 URL。
httrack http://192.168.56.102/bodgeit/
設置最后的
/
非常重要,如果遺漏了的話,HTTrack 會返回 404 錯誤,因為服務器根目錄沒有bodgeit
文件。 -
現在,如果我們訪問文件
file:///root/MyCookbook/test/bodgeit_httrack/index. html
(或者你在你的測試環境中選擇的目錄),我們會看到,我們可以離線瀏覽整個站點:
工作原理
HTTrack 創建站點的完整靜態副本,這意味著所有動態內容,例如用戶輸入的響應,都不會有效。在我們下載站點的文件夾中,我們可以看到下列文件和目錄:
以服務器名稱或地址命名的目錄,包含所有下載的文件。
cookies.txt
文件,包含用于下載站點的 cookie 信息。hts-cache
目錄包含由爬蟲檢測到的文件列表,這是 httrack 所處理的文件列表。hts-log.txt
文件包含錯誤、警告和其它在爬取或下載站點期間的信息index.html
文件重定向到副本的原始主頁,它位于名稱為服務器的目錄中。
更多
HTTrack 也擁有一些擴展選項,允許我們自定義它的行為來更好符合我們的需求。下面是一些值得考慮的實用修改器:
-
-rN
:將爬取的鏈接深度設置為 N。 -
-%eN
:設置外部鏈接的深度界限。 -
+[pattern]
:告訴 HTTrack 將匹配[pattern]
的 URL 加入白名單,例如+*google.com/*
。 -
-[pattern]
:告訴 HTTrack 將匹配[pattern]
的 URL 加入黑名單。 -
-F [user-agent]
:允許我們定義用于下載站點的 UA(瀏覽器標識符)。
3.3 使用 ZAP 蜘蛛
在我們的計算機中將完整的站點下載到目錄給予我們信息的靜態副本,這意味著我們擁有了不同請求產生的輸出,但是我們沒有服務器的請求或響應狀態。為了擁有這種信息的記錄,我們需要使用蜘蛛,就像 OWASP ZAP 中集成的這個。
這個秘籍中,我們會使用 ZAP 的蜘蛛來爬取 vulnerable_vm 中的目錄,并檢查捕獲的信息。
準備
對于這個秘籍,我們需要啟動 vulnerable_vm 和 OWASP ZAP,瀏覽器需要配置來將 ZAP 用做代理。這可以通過遵循上一章中“使用 ZAP 發現文件和文件夾”中的指南來完成。
操作步驟
為了讓 ZAP 啟動并使瀏覽器將其用作代理,瀏覽
http://192.168.56.102/bodgeit/
。在
Sites
標簽頁中,打開對應測試站點的文件夾(本書中是http://192.168.56.102
)。右擊
GET:bodgeit
。-
從下拉菜單中選擇
Attack | Spider…
。 在對話框中,保留所有選項為默認并點擊
Start Scan
。-
結果會出現在
Spider
標簽頁的底部面板中。 -
如果我們打算分析獨立文件的請求和響應,我們訪問
Sites
標簽并打開其中的site
文件夾和bodget
文件夾。讓我們看一看POST:contact.jsp(anticsrf,comments,null)
。在右邊,我們可以看到完整的請求,包含所使用的參數(下半邊)。
-
現在,選擇右側部分的
Reponse
標簽頁。在上半邊中,我們可以看到響應頭,包括服務器標識和會話 Cookie,在下版本我們擁有完整的 HTML 響應。在之后的章節中,我們會了解從已授權的用戶獲取這種 cookie,如何用于劫持用戶會話以及執行冒充它們的操作。
工作原理
就像任何其它爬蟲那樣,ZAP 的蜘蛛跟隨它找到的每個鏈接,位于每個包含請求范圍以及其中的鏈接中的頁面上。此外,蜘蛛會跟隨表單響應、重定向和包含在robots.txt
和sitemap.xml
文件中的 URL。之后它會為之后分析和使用儲存所有請求和響應、
更多
在爬取站點或目錄之后,我們可能打算使用儲存的請求來執行一些測試。使用 ZAP 的功能,我們能夠執行下列事情:
- 在修改一些數據之后重放請求
- 執行主動和被動漏洞掃描
- 模糊測試輸入參數來尋找可能的攻擊向量
- 在瀏覽器中重放特定請求
3.4 使用 Burp Suite 爬取站點
Burp 幾乎是最廣泛用于應用滲透測試的工具,因為它擁有類似 ZAP 的功能,并含有一些獨特的特性和易用的界面。Burp 不僅僅能夠用于爬取站點,但是現在,作為偵查階段的一部分,我們先涉及這個特性。
準備
通過訪問 Kali 的Applications
菜單,之后訪問03 Web Application Analysis | Web Application Proxies | burpsuite
來啟動 Burp Suite,就像下面這樣:

之后配置瀏覽器將其用做代理,通過 8080 端口,就像我們之前使用 ZAP 的那樣。
操作步驟
-
Burp 的代理默認配置為攔截所有請求,我們需要禁用它來不帶攔截瀏覽。訪問
Proxy
標簽頁并點擊Intercept is on
按鈕,它就會變為Intercept is off
,像這樣: 現在,在瀏覽器中,訪問
http://192.168.56.102/bodgeit/
。-
在 Burp 的窗口中,當我們訪問
Target
的時候,我們會看到其中含有我們正在瀏覽器的站點信息,以及瀏覽器產生的請求。 -
現在,為了激活蜘蛛,我們右擊
bodgeit
文件夾,并從菜單中選擇Spider this branch
。 Burp 會詢問我們是否添加項目到這里,我們點擊
Yes
。通常,Burp 的蜘蛛只爬取匹配定義在Target
標簽頁中的Scope
標簽頁中的模式的項目。-
之后,蜘蛛會開始運行。當它檢測到登錄表單之后,它會向我們詢問登錄憑據。我們可以忽略它,蜘蛛會繼續,或者我們可以提交一些測試值,蜘蛛會填充這些值到表單中。讓我們將兩個字段,用戶名和密碼都填充為單詞
test
,并點擊Submit form
: 下面,我們會要求在注冊頁中填充用戶名和密碼。我們通過點擊
Ignore form
來忽略它。-
我們可以在
Spider
標簽頁中檢查蜘蛛的狀態。我們也可以通過點擊Spider is running
按鈕來停止它。讓我們現在停止它,像這樣: -
我們可以在
Site map
標簽頁中檢查蜘蛛生成的結果,它在Target
中。讓我們查看我們之前填充的登錄請求:
工作原理
Burp 的蜘蛛遵循和其它蜘蛛相同的方式,但是它的行為有一些不同,我們可以讓它在我們瀏覽站點的時候運行,它會添加我們跟隨(匹配范圍定義)的鏈接到爬取隊列中。
就像 ZAP 那樣,我們可以使用 Burp 的爬取結果來執行任何操作。我們可以執行任何請求,例如掃描(如果我們擁有付費版)、重放、比較、模糊測試、在瀏覽器中查看,以及其它。
3.5 使用 Burp 重放器重放請求
在分析蜘蛛的結果以及測試可能的表單輸入時,發送相同請求的修改特定值的不同版本可能很實用。
這個秘籍中,我們會學到如何使用 Burp 的重放器來多次發送帶有不同值的請求。
準備
我們從前一個秘籍的地方開始這個秘籍。啟動 vulnerable_vm 虛擬機和 Burp 以及將瀏覽器合理配置來將 Burp 用做代理非常必要。
操作步驟
我們的第一步是訪問
Target
標簽,之后訪問蜘蛛所生成的登錄頁面請求(http://192.168.56.102/bodgeit/login.jsp
),帶有username=test&password=test
的那個。-
右擊請求并從菜單中選擇
Send to Repeater
,像這樣: 現在我們切換到
Repeater
標簽頁。-
讓我們點擊
Go
來在右側查看服務器的響應。在
Request
部分(圖像左側)中,我們可以看到發給服務器的原始請求。第一行展示了所使用的方法:POST,被請求的 URL 和協議:HTTP 1.1。下面一行,一直到 Cookie,都是協議頭參數,在它們后面我們看到一個換行,之后是我們在表單輸入的 POST 參數和值。 -
在響應部分我們看到了一些標簽頁:
Raw
、Headers
、Hex
、HTML
和Render
。這些以不同形式展示相同的響應信息。讓我們點擊Render
來查看頁面,就像在瀏覽器中那樣: -
我們可以在請求端修改任何信息。再次點擊
OK
并檢查新的響應。對于測試目的,讓我們將密碼值替換為一個單引號,并發送請求。我們可以看到,我們通過修改輸入變量的值觸發了系統錯誤。這可能表明應用中存在漏洞。在后面的章節中,我們會涉及到漏洞的測試和識別,并深入探索它。
工作原理
Burp 的重放器允許我們手動為相同的 HTTP 請求測試不同的輸入和場景,并且分析服務器提供的響應。這在測試漏洞的時候非常實用,因為測試者可以了解應用如何對多種所提供的輸入反應,以及從而識別或利用設計、編程或配置中的可能缺陷。
3.6 使用 WebScarab
WebScarab 是另一個 Web 代理,擁有讓滲透測試者感興趣的特性。這個秘籍中,我們會使用它來爬取網站。
準備
作為默認配置,WebScarab 實用 8008 端口來捕獲 HTTP 請求。所以我們需要配置我們的瀏覽器來在 localhost 中使用這個端口作為代理。你需要遵循與在瀏覽器中配置 OWASP ZAP、Burp Suite 的相似步驟。這里,端口必須是 8008。
操作步驟
在 Kali 的
Applications
菜單中,訪問03 Web Application Analysis | webscarab
來打開WebScarab。瀏覽vulnerable_vm 的 Bodgeit 應用(
http://192.168.56.102/ bodgeit/
)。我們會看到它出現在 WebScarab 的Summary
標簽頁中。-
現在,右擊 bodgeit 文件夾并從菜單選擇
Spider tree
,像這樣: -
在蜘蛛發現新文件過程中,所有請求會出現在概覽的下半部分,樹也會被填滿。
這個概覽也展示了一些關于每個特定文件的相關信息。例如,是否存在注入或者可能為注入的漏洞,是否設置了 cookie,包含表單,或者是否表單含有隱藏字段。它也表明了代碼或文件上傳中存在注釋。
-
如果我們右擊任何下半部分的請求,我們會看到可以對它們執行的操作。我們分析請求,找到路徑
/bodgeit/search.jsp
,右擊它,并選擇Show conversation`。新的窗口會彈出,并以多種格式展示響應和請求,就像下面這樣: -
現在點擊
Spider
標簽頁。這個標簽頁中,我們可以在
Allowed Domains
和Forbidden Domains
中,使用正則表達式來調整蜘蛛抓取的內容。我們也可以使用Fetch Tree
來刷新結果。我們也可以通過點擊Stop
按鈕來停止蜘蛛。
工作原理
WebScarab 的蜘蛛類似于 ZAP 或者 Burp Suite,對發現網站中所有被引用文件或目錄,而無需手動瀏覽器所有可能的鏈接,以及深度分析發給服務器的請求,并使用它們執行更多復雜的測試非常實用。
3.7 從爬取結果中識別相關文件和目錄
我們已經爬取了應用的完整目錄,并且擁有了被引用文件和目錄的完整列表。下一步地然是識別這些文件哪個包含相關信息,或者是更可能發現漏洞的機會。
這篇不僅僅是個秘籍,更是用于文件和目錄的常見名稱、前后綴的總結,它們通常給滲透測試者提供有價值的信息,或者是可能導致整個系統淪陷的漏洞利用。
操作步驟
-
首先,我們打算尋找登錄和注冊頁面,它們可以給我們機會來成為應用的正常用戶,或者通過猜測用戶名和密碼來冒充它們。一些名稱和部分名稱的例子是:
- Account
- Auth
- Login
- Logon
- Registration
- Register
- Signup
- Signin
-
另一個常見的用戶名、密碼來源和與之相關的漏洞是密碼恢復頁面:
- Change
- Forgot
- lost-password
- Password
- Recover
- Reset
-
下面,我們需要識別是否存在應用的管理員部分,這里有一組功能可能允許我們執行高權限的操作,例如:
- Admin
- Config
- Manager
- Root
-
其它有趣的目錄是內容管理系統(CMS)的管理員、數據庫或應用服務器之一,例如:
- Admin-console
- Adminer
- Administrator
- Couch
- Manager
- Mylittleadmin
- PhpMyAdmin
- SqlWebAdmin
- Wp-admin
-
應用的測試和開發版通常沒有保護,并且比最終發行版更容易存在漏洞,所以它們在我們搜索缺陷的時候是個很好的目標。這些目錄的名稱包含:
- Alpha
- Beta
- Dev
- Development
- QA
- Test
-
Web 服務器的信息和配置文件如下:
- config.xml
- info
- phpinfo
- server-status
- web.config
此外,所有在
robots.txt
中標記為Disallow
的目錄和文件可能非常實用。
工作原理
一些前面列出的名稱和它們的語言變體允許我們訪問站點的首先部分,這是滲透測試中非常重要的步驟。它們中的一些能夠提供給我們服務器,它的配置以及所使用的開發框架信息。其它的,例如 Tomcat 管理器和 JBoss 的登錄頁面,如果配置不當的話,會讓我們(或惡意攻擊者)獲得服務器的控制。