如何绕过csrf保护,并在burp suite中使用intruder? - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

如何绕过csrf保护,并在burp suite中使用intruder?

xnianq 逆向破解 2018-01-31 11:24:54
221579
收藏

导语:我使用burp suite已经很多年了,但是我使用intruder模块时几乎不会使用宏设置。直到几个星期前,我在爆破一个表单时,使用了这一功能。

我使用burp suite已经很多年了,但是我使用intruder模块时几乎不会使用宏设置。直到几个星期前,我在爆破某表单时,使用了这一功能。需要爆破的页面中使用了JavaScript生成CSRF token并写入表单中,那么我就需要从JavaScript代码中取出token的值,然后每次发出请求时,带上这一变量。我查阅了相关文档,找到了解决方法。在真实环境测试之前,我搭建了一个模拟真实环境的页面,在这个页面进行测试。以下就是我的测试步骤。

配置环境

以下代码就是我们用于测试的代码,你可以在本地搭建起来或者使用我搭建好的环境:https://vuln-demo.com/burp_macro/macro.php

<?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;
?>
<!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:

1_tabs.png

点击之后会弹出”Macro Editor”(宏编辑)对话框,在对话框中点击”Macro Recorder”(宏录制)模块:

2_macro_recorder.png

上图中你可以看到,我发出了三个POST请求和一个GET请求。选择其中一个POST请求点击ok,返回宏编辑对话框中。

3_macro_editor.png

为宏命名之后,点击”Configure Item”(配置项目)。

4_configure_macro_item.png

上图中,burp大概完成了我们需要完成的工作,但是这里发生了一些错误,因为当前显示的token内容是从已经使用的POST请求中取出来的值,因此是不正确的token值。我们要做的是从javascript代码中取出不断变化的token,然后提交。那么我们现在点击ADD按钮,然后会弹出一个名为”自定义参数”新的对话框。

在这个对话框中要求我们提供变量名字,在实例中我们将这一变量命名为token。然后在请求包中,标记出来token的值,这就告诉burp我们需要提取的变量值在哪个位置。

1517117468758496.png

至此,你已经创建出来符合条件的宏,它会在每个请求中将token填充到合适的位置。接下来点击确定,然后关闭所有的对话框,回到burp的主窗口。

在”Marco Editor”对话框中有一个”Test macro”(测试宏)的按钮,用来测试捕获得到的token是否符合我们的预期,在这里没有发生什么特殊情况,完全正确。

在”Session Handling Rules”(会话处理规则)选项栏中,点击ADD按钮,会弹出”Session handling rule editor”(会话处理规则编辑器)对话框。这里填写名称,然后点击ADD添加规则动作。这里会给出一个下拉菜单,显示可以执行的不同类型的规则:

7_session_handling_rule_editor.png

下方图片是”Session Handling Action Editor”(会话处理规则编辑器)界面,在这里你可以选择你要运行的宏,然后指定哪些参数和哪些cookies会被更新。我们选择了之前创建的”Macro Demo”宏,并且将其他参数作为默认值。

8_session_handling_action_editor.png

点击ok会返回”会话规则处理编辑器”页面进行最后一步设置,切换到Scope栏框:

9_select_custom_scope.png

在这里我对宏的适用范围进行了自定义设置,将我测试的url填写到里面。

现在所有的设置已经完成,为了测试设置是否正确,我们重新发送了之前的POST请求,如果设置是正确的,那么就会返回success信息。并且你会发现token这一变量每次发送请求都会自己变化:

10_repeater_success.png

这就是我测试的全部步骤,Repeater以及intruder都可以无视csrf的保护进行使用。

  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2022 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务