Burp宏与会话处理
我使用Burp Suite多年,但直到几周前才首次接触宏功能。当时遇到一个需要利用Intruder进行暴力破解的表单,该页面通过JavaScript函数在每个请求中嵌入CSRF令牌。为了实现暴力破解,我必须从JavaScript提取令牌并确保每个请求都携带该令牌。在查阅文档后,我创建测试应用验证配置流程,现将完整操作过程记录如下。
测试环境搭建
目标应用代码如下(可从GitHub Gist获取或使用在线版本):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
<?php
session_start();
$message = "";
if ($_SERVER['REQUEST_METHOD'] == "POST") {
if (array_key_exists("token", $_POST) && array_key_exists("token", $_SESSION)) {
if ($_POST['token'] == $_SESSION['token']) {
$message = "Success";
} else {
$message = "Tokens don't match";
}
} else {
$message = "Token not sent in POST";
}
}
$token = md5(mt_rand());
$_SESSION['token'] = $token;
?>
<!DOCTYPE html>
<html>
<head>
<title>Burp Suite Macro Demo Test Page</title>
</head>
<body>
<h1>Burp Suite Macro Test Form</h1>
<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请求:生成令牌存储于会话,JavaScript将令牌注入表单隐藏域
- POST请求:比对提交令牌与会话令牌,返回验证结果
- 关键限制:Burp默认不执行JavaScript,直接使用Repeater/Intruder会导致令牌不匹配
攻击配置流程
1. 基础代理设置
配置Burp代理捕获浏览流量,访问测试页面并多次提交表单填充代理历史记录。
2. 创建宏
- 进入
Project options → Sessions → 点击Macros区域的Add
- 在宏录制对话框中选择一个POST请求
- 命名宏(如"Macro Demo")后点击
Configure Item
3. 参数配置关键步骤
- 在参数配置界面点击
Add添加自定义参数位置
- 命名参数为"token",在响应中高亮令牌值所在位置
- 此举指示Burp从JavaScript动态提取令牌值
4. 会话规则绑定
- 在
Session Handling Rules点击Add创建新规则
- 添加规则动作选择
Run a macro
- 选择已创建的宏,保持默认参数更新设置
- 在
Scope标签页设置目标URL范围
5. 效果验证
将历史POST请求发送至Repeater测试:
- 成功时响应显示"Success"
- 每次请求令牌参数自动更新
- Intruder爆破可无缝处理动态令牌
技术要点总结
通过宏配置实现会话令牌的自动化管理,有效绕过CSRF防护机制。此方法适用于需要处理动态参数的渗透测试场景,显著提升自动化测试效率。
参考资源