當前位置:
首頁 > 新聞 > 如何繞過csrf保護,並在burp suite中使用intruder?

如何繞過csrf保護,並在burp suite中使用intruder?

我使用burp suite已經很多年了,但是我使用intruder模塊時幾乎不會使用宏設置。直到幾個星期前,我在爆破某表單時,使用了這一功能。需要爆破的頁面中使用了JavaScript生成CSRF token並寫入表單中,那麼我就需要從JavaScript代碼中取出token的值,然後每次發出請求時,帶上這一變數。我查閱了相關文檔,找到了解決方法。在真實環境測試之前,我搭建了一個模擬真實環境的頁面,在這個頁面進行測試。以下就是我的測試步驟。

配置環境

以下代碼就是我們用於測試的代碼,你可以在本地搭建起來或者使用我搭建好的環境:https://vuln-demo.com/burp_macro/macro.php

session_start();

$message = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {

if (array_key_exists ("token", $_POST) && array_key_exists ("token", $_SESSION)) {

if (array_key_exists ("token", $_SESSION)) {

if ($_POST["token"] == $_SESSION["token"]) {

$message = "Success";

} else {

$message = "Tokens don"t match";

}

} else {

$message = "Token not in session";

}

} else {

$message = "Token not sent in POST";

}

}

$token = md5(mt_rand());

$_SESSION["token"] = $token;

?>

Burp Suite Macro Demo Test Page


Burp Suite Macro Test Form

This form is designed to be used alongside the Burp Macros and Session Handling blog post by Robin Wood.

">

從代碼中可以看到:

GET請求情況下,一旦訪問頁面,會話就會開始,並且token就會生成存儲到session中。token的生成過程是這樣的,首先在輸入框中生成一個空的token,然後利用JavaScript將生成的token寫入到輸入框當中,並提交。如果javascript不運行,那麼token的值就是空。

POST請求下,提交的token值會和session中存儲的值進行比較,如果它們能夠匹配,那麼就會得到成功的信息。要不就會提示出錯,然後生成一個新的token值存儲到session當中去。

因為Burpsuite不會運行JavaScript,所以Repeater和Intruder模塊運行過程中都會提交空的或者之前的token值,然後得到token不匹配的錯誤。需要解決這一問題,我在這裡用到了幾乎沒有用過的宏模塊。

攻擊過程

首先,打開burp並且在瀏覽器中設置代理,確保所有的請求都會經過burp。我假設你已經完成了這一步驟。如果你沒有使用過burp,我建議你去了解一些關於burp的基礎知識。完成此操作後,瀏覽測試頁面,並且提交幾次表單,然後在代理記錄中找到這些記錄。

我們已經完成了基本設置,現在我們要做的是生成一個宏。打開」Project Options」選項欄,然後切換到Sessions選項中,在Macros模塊中點擊Add:

點擊之後會彈出」Macro Editor」(宏編輯)對話框,在對話框中點擊」Macro Recorder」(宏錄製)模塊:

上圖中你可以看到,我發出了三個POST請求和一個GET請求。選擇其中一個POST請求點擊ok,返回宏編輯對話框中。

為宏命名之後,點擊」Configure Item」(配置項目)。

上圖中,burp大概完成了我們需要完成的工作,但是這裡發生了一些錯誤,因為當前顯示的token內容是從已經使用的POST請求中取出來的值,因此是不正確的token值。我們要做的是從javascript代碼中取出不斷變化的token,然後提交。那麼我們現在點擊ADD按鈕,然後會彈出一個名為」自定義參數」新的對話框。

在這個對話框中要求我們提供變數名字,在實例中我們將這一變數命名為token。然後在請求包中,標記出來token的值,這就告訴burp我們需要提取的變數值在哪個位置。

至此,你已經創建出來符合條件的宏,它會在每個請求中將token填充到合適的位置。接下來點擊確定,然後關閉所有的對話框,回到burp的主窗口。

在」Marco Editor」對話框中有一個」Test macro」(測試宏)的按鈕,用來測試捕獲得到的token是否符合我們的預期,在這裡沒有發生什麼特殊情況,完全正確。

在」Session Handling Rules」(會話處理規則)選項欄中,點擊ADD按鈕,會彈出」Session handling rule editor」(會話處理規則編輯器)對話框。這裡填寫名稱,然後點擊ADD添加規則動作。這裡會給出一個下拉菜單,顯示可以執行的不同類型的規則:

下方圖片是」Session Handling Action Editor」(會話處理規則編輯器)界面,在這裡你可以選擇你要運行的宏,然後指定哪些參數和哪些cookies會被更新。我們選擇了之前創建的」Macro Demo」宏,並且將其他參數作為默認值。

點擊ok會返回」會話規則處理編輯器」頁面進行最後一步設置,切換到Scope欄框:

在這裡我對宏的適用範圍進行了自定義設置,將我測試的url填寫到裡面。

現在所有的設置已經完成,為了測試設置是否正確,我們重新發送了之前的POST請求,如果設置是正確的,那麼就會返回success信息。並且你會發現token這一變數每次發送請求都會自己變化:

這就是我測試的全部步驟,Repeater以及intruder都可以無視csrf的保護進行使用。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

甲骨文WebLogic伺服器被植入後門,僅用於挖礦?
因配置錯誤,25000個Jenkins伺服器泄漏了大量敏感數據

TAG:嘶吼RoarTalk |