如何繞過csrf保護,並在burp suite中使用intruder?
我使用burp suite已經很多年了,但是我使用intruder模塊時幾乎不會使用宏設置。直到幾個星期前,我在爆破某表單時,使用了這一功能。需要爆破的頁面中使用了JavaScript生成CSRF token並寫入表單中,那麼我就需要從JavaScript代碼中取出token的值,然後每次發出請求時,帶上這一變數。我查閱了相關文檔,找到了解決方法。在真實環境測試之前,我搭建了一個模擬真實環境的頁面,在這個頁面進行測試。以下就是我的測試步驟。
配置環境
以下代碼就是我們用於測試的代碼,你可以在本地搭建起來或者使用我搭建好的環境:https://vuln-demo.com/burp_macro/macro.php
<?phpsession_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 dont match"; } } else { $message = "Token not in session"; } } else { $message = "Token not sent in POST"; }}$token = md5(mt_rand());$_SESSION[token] = $token;?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head> <title>Burp Suite Macro Demo Test Page</title> <meta name="Description" content="A page to use to practice with Burp Suite macros and session handling" /></head><body><h1>Burp Suite Macro Test Form</h1><p>This form is designed to be used alongside the <a href="https://digi.ninja/blog/burp_macros.php">Burp Macros and Session Handling</a> blog post by <a href="https://digi.ninja/">Robin Wood</a>.</p><p><?=$message?></p><form method="post" action="<?=htmlentities ($_SERVER[PHP_SELF])?>"> <input type="submit" value="Submit" name="submit" /> <input type="hidden" value="" name="token" id="token" /></form><script> document.getElementById("token").value = "<?=htmlentities ($token)?>";</script></body></html>
從代碼中可以看到:
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的保護進行使用。
本文翻譯自:https://digi.ninja/blog/burp_macros.php,如若轉載,請註明原文地址: http://www.4hou.com/technology/10134.html 更多內容請關注「嘶吼專業版」——Pro4hou
推薦閱讀:
※專治複製粘貼癌症患者的Pastejacking
※網頁遊戲都有哪些安全問題?如何做得更安全?
※熊貓燒香技術含量高嗎?高在哪裡?
※一個Tor瀏覽器0day漏洞價值100萬美元,其中的隱情是……
※如何利用Web漏洞竊取NTLM哈希
TAG:信息安全 |