用Burpsuite 來處理csrf token

wyzsk發表於2020-08-19
作者: c4bbage · 2014/06/28 12:15

from: http://labs.asteriskinfosec.com.au/fuzzing-and-sqlmap-inside-csrf-protected-locations-part-1/

http://labs.asteriskinfosec.com.au/fuzzing-and-sqlmap-inside-csrf-protected-locations-part-2/


問題:/tips/?id=2444

附加其他案例(--eval): https://gist.github.com/McSimp/2602fd7ee7203e34268b

當在測試某些網站注入時我們會遇到token,只能手工或者寫工具之後進行自動化處理,就sqlmap和burpsuite而言各有各的方法。

Sqlmap如下:

[email protected] /pentest/databases/sqlmap
$ python sqlmap.py -u "http://192.168.83.117/2.php" --data="token=123&id=root" --eval="import urllib2;import re;a=urllib2.build_opener();a.addheaders.append(('Cookie', 'PHPSESSID=72u0q0sem6tbnrqq4bmqs4an05'));token=re.search(r'\w{32}',a.open('http://192.168.83.117/2.php').read()).group(0);print token;" -p id --dbs --cookie="PHPSESSID=72u0q0sem6tbnrqq4bmqs4an05" --current-user

Burpsuite如下:

在burpsuite 裡提供了一個session handler 機制,可以讓我們更好的去自動化處理這些。 事例程式碼如下:

#!php
<?php
/*
* PHP簡單利用token防止表單重複提交
* 此處理方法純粹是為了給初學者參考
*/
session_start();
var_dump($_REQUEST);
function set_token() {
    $_SESSION['token'] = md5(microtime(true));
}

function valid_token() {
    $return = $_REQUEST['token'] === $_SESSION['token'] ? true : false;
    set_token();
    return $return;
}

//如果token為空則生成一個token
if(!isset($_SESSION['token']) || $_SESSION['token']=='') {
    set_token();
}

error_reporting(E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE);
@mysql_connect("127.0.0.1".':'."3306",root,'123')
or die("資料庫伺服器連線失敗");   
@mysql_select_db('mysql')
or die("資料庫不存在或不可用");

if(isset($_POST['id'])){
    if(!valid_token()){
        echo "token error";
    }else{
        //echo '成功提交,Value:'.$_POST['test'];
        $id=$_REQUEST[id];
        $sql='select user,password,host from mysql.user where user='."'".$id."'".' limit 0,1;';
        echo $sql;
        mysql_query('$sql');
        $set_result = mysql_query($sql); 
        while($row =mysql_fetch_array($set_result)){
            $result[]=$row;
        }
        var_dump($result);
    }
}
//echo "SESSION ".$_SESSION['token'];
?>
<form method="post" action="">
    <input type="hidden" name="token" value="<?php echo $_SESSION['token']?>">
    <input type="text" name="id" value="root">
    <input type="submit" value="提交" />
</form>

在options 欄目的sessions標籤裡 新增 session handling rules,調出 session handling rule editor:rule description 規則的描述;rule actions 規則的主體部分。 在rule actions 新增 run a macro 型別的呼叫,調出 session handling action editor ,選擇 select macro 下的add ,用於新增macro ,出現兩個對話方塊: macro editor和macro recorder ,前者是用於macro 的分析和設定,後者對於請求的一個錄製。 在macro recoder 裡 設定intercept is off (右上角位置),切換到瀏覽器 先請求一次 127.0.0.1/2.php 之後對於表單內容進行提交。切到macro recorder 裡,用ctrl選中這兩次請求,點選 OK 。就此回到了macro editor 視窗,點選test macro 觀看請求和響應資料包中的token 是否正確。 enter image description here

如果不正確,單擊分析re-analyze macro或者選擇configure item 進行修正,如下圖。 enter image description here

Macro Editor 配置完之後,視窗回到了 session handling action editor。 在sqlmap->burpproxy 測試時, marco 會把我的id引數只指定為root1(marco錄製時id指定的是root1,至於這樣的原因有待測試),不會傳送我的payload,而在intruder 則不出現此問題 。設定只替換token引數即可,設定如下圖:

enter image description here

在select macro 裡選定剛才錄製的 macro,確定。回到session hand rule editor ,在其子標籤scope裡,:設定作用域(根據自己的實際情況再定):

enter image description here

執行結果如下:

enter image description here

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章