2014年5月4日 星期日

實例說明:利用Burp Suite進行暴力破解

個人平常喜好使用hydra進行暴力破解(實例說明:利用 Hydra 暴力破解網站登入密碼),可是最近一個滲透測試的案子,輸入頁面都加上圖形驗證碼,讓暴力破解無用武之地,好不容易找到一個沒用圖形驗證的網頁,原本想讓hydra發揮一下,不料這個網頁依然叫hydra踢到了鐵板。
 圖一:輸入欄位加上圖形驗證碼,暴力破解工具就無能為力!

 圖二:就只有這個查詢頁面沒使用圖形驗證碼機制,只好找它下手!
一般的想法是發送 Request 後,伺服器會回應成功失敗,可是這個網站卻是採用二回合的方式來回應結果:將 Request 的資料加密然後 Response 回來(無法判斷成功或失敗),緊接著再利用Response回來的加密碼資料進行 Get Request,然後才是真正的查詢結果。所以不管暴力注入的資料為何,hydra 總是收到相似的結果,故無從判斷破解是否成功。
 圖三:一般的查詢方式

 圖四:這個網頁的查詢機制多一道!
還好網頁自己發出的 Get Request 並沒有做進一步驗證,因此,只要找出回送的URL,就可以進行暴力破解,我想到的方法是先對(1)查詢頁面發送欲查詢的資料,再逐一收集(2)回送的 URL,接著再利用收集到的 URL (3)轉送查詢
 Burp Suit 剛好可以做這件事,雖然我的方法不算「全自動化」,不過總比手動逐一輸入查詢資料快多了! (基於保密協定,部分資料將予遮掩)

這次的任務是利用身分證統一編號進行暴力查詢,用以判定該身分證統一編號是否為已註冊的使用者帳號。
首先設定 Burp Suite 的 Proxy 及 IE的 Proxy伺服器設定,將兩者對應設定 127.0.0.1:8008 (請依個人習慣設定),以便 Burp Suite可以攔截 Request/Response 的資料,接著對要進行暴力破解的網頁進行手動操作,攔截基本Request/Response資料,再提供後續 instruder 運用。
 圖五:設定 Burp Suite 成 Proxy,以便攔截瀏覽的往來資料
 圖六:Burp Suite攔截到的Request,之後要送到 intruder處理

第一步:對查詢頁進行大量查詢,以便收集回送的加密 URL,由於Response回來的資料包含Header 及 Body資料,必須另外想辦法過濾,所以將收集到的資料存成文字檔(hack.txt)。
(一)將圖六所示的第58號 Request 「Send to indruder」
(二)切換到 intruder 頁籤,在 position 子頁籤中指定要進行替換的欄位,本例是對「ctl00%24ContentPlaceHolder1%24txtIDN」這個欄位的進行替換。(要替換的欄位值會用 §...§ 括起來)
通常一開始 Burp Suite 會預先將所有欄位指定為可替換,請先利用右方的 clear§ 取消掉所有預設的欄位,然後用滑鼠 mark 要替換的值(本例為 A123456789 )再換「add§」,即可指定您想要的欄位了!
圖七:設定要暴力查詢的欄位

(三)在 payloads 子頁籤指定用來暴力查詢的資料清單,因為清單來源是文字檔(一行一個值),所以選「runtime file」並指定檔案路徑/名稱(本例為 D:\Temp\TEST_ID.txt)
圖八:設定暴力注入的資料清單來源

(四)最後就執行 intruder 功能表下的 start attack
圖九:啟動暴力查詢

(五)接著就開啟另一個視窗,顯示暴力執行中的結果,每一行就是一次暴力查詢的結果,由於我使用的 Burp Suite 是免費版本,所以 intruder 的 save 功能被禁用了!
圖十:暴力查詢中~~

(六)將第一回的暴力查詢結果存成文字檔。請全選上圖 result 頁籤內的所有 Request(點選任一筆,然後按 Ctrl+A),接著按滑鼠右鍵開啟PopMenu,從選單中選擇最下面一項「save selected items」,將查詢結果存成 hack.txt。
圖十一:第一回合的結果文字檔(部分內容)


第二步:利用 find 指令萃取有效的 URL 字串,並將這些 URL 字串另外儲成清單(hack-filter.txt)
find "Location: /U100" d:\temp\hack.txt > D:\temp\hack-filter.txt

圖十二:要用在第二回合的資料只有上圖紅框部分的資料(第54字元起的32個字元)


第三步:利用 hack-filter.txt 的內容進行第二回合暴力破解,比較 Response 的長度即可得知哪一組 ID 是有用的帳號。
(一)利用圖六攔載的結果,將第59號 Request 「send to intruder」
(二)照例設定 positions 與 payloads (如下圖)
 圖十三:設定第二回合要暴力破解的欄位

圖十四:設定payloads,因注入資料只是字串中的部分,所以要設為 substring

(三)設定完成後,就可以按下 intruder 功能表的 start attack 進行第二回合攻擊
圖十五:第二回合的暴力破解結果

最後結果:
從圖十五中可看出大部分的回傳長度是 10109,但其中第10號 request 結果的長度是 12052,表示第10號是可用的身分證統一編號,但因第二回注入的資料是加密的結果,無法直接使用,必須轉換,只要對照圖十的身分證統編即可找出!  (抱歉! 基於保密協定,不能直接將身分證號列出)

測試 1130 筆,共找出 54 筆可用的身分證統編!

沒有留言:

張貼留言