☰
【八个月网安课程】第十周·周二:Burp 宏与 Session 处理——维持登录状态爆破含 Token 表单
2026/10/12 5:10:38 网站建设 项目流程

昨天用 Intruder 爆破时,可能发现请求发着发着就失效了——因为 Cookie 过期,或者每次登录都需要新的 CSRF Token。今天你将学会 BurpSuite 的高级会话管理能力:通过宏(Macros)自动完成登录流程,再配合会话处理规则(Session Handling Rules)自动为每个请求注入有效凭证,实现全程免维护的自动化攻击。


第十周·周二:Burp 宏与 Session 处理——维持登录状态爆破含 Token 表单

🎯 今日学习目标(达成效果)

  • 能解释为什么爆破含 CSRF Token 或动态会话的登录表单时,常规 Intruder 无法工作——每个请求都需要最新的 Token 和有效 Cookie;
  • 能独立创建一个 Burp 宏(Macro),自动完成“获取登录页面 → 提取 Token → 发送登录请求”的完整流程;
  • 能配置会话处理规则,让 Intruder 或 Repeater 在每次请求前自动调用宏,获取全新的 Cookie 和 CSRF Token;
  • 能对 DVWA High 安全级别的登录表单(包含user_token)使用 Cluster bomb 成功完成用户名+密码的爆破;
  • 能诊断宏执行失败的原因(Token 提取路径错误、正则表达式不匹配、Cookie 作用域配置不当),并进行修正;
  • 能从安全视角理解 CSRF Token 虽然防御了 CSRF,但在无频率限制时仍可被暴力破解,进而意识到“验证码”和“账户锁定”的重要性。

📘 一、为什么需要宏与 Session 处理?

DVWA High 级别的登录表单中,除了用户名和密码,还包含一个每次刷新都会变化的user_token(即 CSRF Token)。后端会校验该 Token 是否与用户会话绑定且有效。如果你直接用昨天的方法爆破:

  • 第一次请求:从页面拿到 Token A,带着它提交,成功。
  • 第二次请求:Token A 已失效,后端拒绝,爆破终止。

此外,长时间运行的爆破任务中,PHPSESSID 也可能过期。宏(Macro)就是用来解决这个问题的:它可以在每次攻击请求前,自动执行一段预定义的流程(如访问登录页、提取最新 Token、甚至重新登录),然后将获取的最新凭证注入到攻击请求中,让整个爆破过程“永不断电”。


📘 二、核心组件:Macro 与 Session Handling Rules

1. 宏(Macro)

宏是一组预先录制或手动定义的 HTTP 请求序列。例如:

  • 请求 1:GET 登录页面 → 从响应中提取user_token和PHPSESSID
  • 请求 2:POST 登录请求 → 使用提取的 Token 和账号密码完成登录 → 获取登录后的 Cookie

宏可以提取响应中的动态值(Token、Cookie、隐藏字段等),并将它们暂存为参数,供后续请求使用。

2. 会话处理规则(Session Handling Rules)

规则定义了在什么范围内(如 Intruder 攻击、Repeater 请求)触发宏,以及如何使用宏获取的最新数据来更新当前请求。

典型的规则配置:

  • Scope:适用于 Intruder 的所有请求,或指定 URL 范围。
  • Actions:调用指定宏,将宏提取的 Cookie 和 Token 自动更新到当前请求中。

这样,每次 Intruder 发出一个请求前,Burp 会先悄悄执行宏,获取最新的 Token 和会话,替换进请求,然后再发送。对服务器而言,每个请求都像是从全新页面发起的合法操作。


📘 三、配置流程详解(以 DVWA High 登录爆破为例)

步骤 1:分析登录流程

在 DVWA High 安全级别下,打开登录页面,用 Burp 代理浏览:

  1. 首次访问http://靶机/DVWA/login.php,响应中包含一个隐藏的<input name="user_token" value="...">,同时Set-Cookie: PHPSESSID=xxx。
  2. 输入错误凭证提交,观察 POST 请求:username=admin&password=test&Login=Login&user_token=从页面取到的值。如果 Token 错误,返回“CSRF token is incorrect”。

因此,我们需要每个爆破请求都携带最新的 PHPSESSID 和对应的 user_token。

步骤 2:创建宏

  1. 在 Burp 中,进入Project options→Sessions→Macros区域,点击Add。
  2. 宏记录器会列出 Proxy History 中的所有请求。我们需要选择能够完成获取新 Token的请求序列。
    • 首先,找到一个GET /DVWA/login.php的请求(状态 200),点击Add。这个请求会返回包含新 Token 的 HTML。
    • 可以只选这一个请求,因为登录页面本身就会返回一个新的 Session 和 Token。无需真正提交登录(如果只是为了获取有效 Token 和 Cookie,但未认证状态下的 Token 就足够通过校验,因为 Token 是与 session 绑定的,而非与登录状态绑定)。
  3. 宏创建后,点击Configure item,我们需要告诉 Burp 从该 GET 请求的响应中提取user_token:
    • 在宏编辑器中,选中 GET 请求,点击Add→Extract parameter。
    • 响应内容中选择“user_token”所在的 input 标签。可以使用正则表达式或者“Custom parameter”定位。简单方式:点击“Extract from regex match”,使用正则name="user_token" value="([^"]+)",或者使用 Burp 的“Extract from CSS selector”等(根据实际响应代码)。通常用正则提取更方便。
  4. 测试提取:点击Test macro,查看是否能成功提取到 Token 值。

步骤 3:配置 Session Handling Rule

  1. 在 Sessions 标签中,找到Session Handling Rules,点击Add。
  2. Rule Actions:点击Add→Run a macro,选择刚才创建的宏。
  3. 保持默认选项“Update current request with the following parameters from the macro”勾选。Burp 会自动将宏中提取的 Cookie 和参数(user_token)更新到当前请求。确保参数名与请求中被标记的爆破位置不冲突(即 user_token 应该由宏自动填入,而非被 Intruder 当作爆破目标)。
  4. Scope标签:在Tools Scope中勾选Intruder,或者指定仅对login.php的请求生效。如果希望全局使用,可勾选所有工具。
  5. 保存规则。

步骤 4:配置 Intruder

  1. 获取一个原始的 POST 登录请求(携带任意但有效的 Token 和 Session),发送到 Intruder。
  2. Positions:仅标记username和password的值为爆破位置。不要标记user_token,因为它的值将由宏自动更新。
  3. 攻击类型选择Cluster bomb(如果同时爆破用户和密码)或Sniper。
  4. 在Payloads中配置用户名词典和密码字典。
  5. 关键:进入Resource Pool或Options,设置Request Engine的线程数为1(单线程),因为需要每次请求前执行宏,且并发宏执行可能导致 Token 交叉错乱。同时,适当的延迟(throttle)也有助于避免触发防御机制。

步骤 5:开始攻击

启动 Intruder,观察结果。你会看到每个请求都返回不同的响应,其中成功的请求往往响应长度不同,或包含“Welcome to the password protected area”等文字(通过 Grep-Match 标记)。攻击完成后,你可以在宏的“Test macro”中观察 Session 日志,确认每次请求前都成功获取了新 Token。


✍️ 四、动手实践:对 DVWA High 登录实现全自动爆破

实践环境

  • DVWA 安全等级设为 High
  • Burp Suite 已配置代理
  • 准备好用户名和密码字典(小型,例如 5 个用户名,5 个密码)

任务列表

  1. 录制宏:

    • 清除 Proxy History,用浏览器访问 DVWA 登录页(不要登录,只获取页面)。
    • 在 History 中找到GET /DVWA/login.php,发送到 Macros。
    • 配置提取user_token(正则:user_token" value="([^"]+)")。
    • 测试宏,确保提取成功。
  2. 配置 Session 规则:

    • 新增规则,Action 为 Run Macro,选择上述宏。
    • 将规则 Scope 限制为 Intruder(或更细化到 login.php)。
    • 确保“Update current request”被勾选,且参数user_token和 Cookie 会被自动替换。
  3. Intruder 爆破:

    • 重新在浏览器中随意提交一次登录(用任意 Token),抓取 POST 请求,Send to Intruder。
    • Positions 仅保留username和password为载荷位置。user_token和PHPSESSID保持不变(宏会替换)。
    • 选择 Cluster bomb,Payload Sets 加载用户名词典和密码字典。
    • 线程数设为 1,延迟 100ms。
    • 添加 Grep-Match 字符串:“Welcome” 或 “logout” (登陆成功才会出现)。
    • Start attack。
  4. 验证:

    • 查看攻击结果,找到匹配的请求,提取出正确的凭证。
    • 使用该凭证手动登录确认。

📝 五、课后测试题与解析

测试题:如何在 Burp Suite 中配置宏,以爆破带有 CSRF Token 的登录表单?请描述关键步骤:宏的录制、Token 提取、会话规则设置、Intruder 注意事项。

参考答案:
关键步骤:

  1. 录制宏:在 Proxy History 中找到访问登录页面的 GET 请求,添加到宏中。
  2. 提取 Token:使用宏的“Extract parameter”功能,通过正则表达式(如user_token" value="([^"]+)")从响应中提取 CSRF Token 的值,并命名为自定义参数。
  3. 设置会话规则:在 Session Handling Rules 中新建规则,Action 选择 Run Macro,绑定刚创建的宏。规则范围(Scope)勾选 Intruder,确保“Update current request”选项开启,以使宏提取的 Cookie 和 Token 自动替换 Intruder 请求中的相应字段。
  4. 配置 Intruder:将登录 POST 请求发送到 Intruder,只将用户名和密码标记为 payload 位置,切勿标记 Token。使用单线程并适当延迟,防止并发导致 Token 混乱。
  5. 开始攻击:Intruder 每次请求前会自动触发宏获取新 Token,从而绕过 CSRF 防御实现暴力破解。

✅ 今日学习效果自检清单

  • 我理解为什么需要宏来处理动态 Token 和会话过期
  • 我成功配置了一个宏,自动从登录页面提取 user_token
  • 我创建了 Session Handling Rule,并将其与宏关联
  • 我使用 Intruder 对 DVWA High 登录页完成了全自动爆破,并获得了有效凭证
  • 我知道为什么宏爆破时必须使用单线程,以及如何设置延迟
  • 我意识到 CSRF Token 虽能防 CSRF,但不能防暴力破解,必须结合验证码与账户锁定

⚠️ 阶段避坑重点

  • Token 提取正则要精确:如果正则有误,宏提取失败,Intruder 将发送空 Token 或过期 Token,所有请求都会被拒。务必先 Test macro 确认能提取到值。
  • 不要标记 user_token 为爆破位置:如果你在 Positions 中把 Token 也标记了,Burp 会试图用字典值覆盖它,导致宏自动填充失效。
  • 线程数一定要为 1:并发执行宏会导致多个请求共用一个 Token,或者 Token 更新不同步,造成大量失败。单线程 + 适当延迟是稳妥做法。
  • 注意 Cookie 作用域:宏提取的 Cookie 应能覆盖请求的域和路径,否则可能未被正确发送。
  • 宏触发的时机:默认 Session Handling Rule 会在请求发送前运行宏,确保每次都是最新凭证。不要配置为仅使用一次,否则后续请求仍会过期。

今天你攻克了自动化爆破中最难啃的骨头——动态令牌维持。明天我们将在此基础上学习验证码绕过基础(本地靶场),以及如何利用 Burp 宏处理更复杂的多步登录流程。你的 Burp 内功正在从“使用工具”向“控制工具”蜕变。请保留今天的宏配置,明天可复用。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询