BurpSuite CSRF Token Tracker 实战指南:从原理到自动化测试

1次阅读
没有评论

共计 1271 个字符,预计需要花费 4 分钟才能阅读完成。

image.webp

CSRF 防护机制与测试挑战

CSRF(跨站请求伪造)防护的核心机制之一是使用动态 Token。服务器在生成表单时会嵌入一个随机 Token,提交请求时验证该 Token 的有效性。这种机制虽然提升了安全性,却给自动化测试带来两个主要问题:

BurpSuite CSRF Token Tracker 实战指南:从原理到自动化测试

  1. Token 动态性:每次页面加载 Token 都会变化,传统爬虫无法维持会话状态
  2. 请求关联性:后续请求往往需要携带前序请求生成的 Token,形成依赖链

手动处理 vs 自动化工具对比

  • 手动处理 Token
  • 优点:可应对任意复杂 Token 逻辑
  • 缺点:效率低下(每个请求需人工介入)、难以处理多步骤流程

  • CSRF Token Tracker

  • 优点:自动捕获 / 更新 / 注入 Token、支持多请求关联
  • 缺点:需要初始配置、对非标准 Token 处理有限

配置实战详解

1. 识别页面 Token

打开 BurpSuite 的 Target 标签,观察典型请求:

POST /transfer HTTP/1.1
...
csrf_token=5a3d8f7b2e1c

同时检查 HTML 表单:

<input type="hidden" name="csrf_token" value="5a3d8f7b2e1c">

2. 配置提取规则

在 Project options → Session → Session Handling Rules 中添加规则:

  1. 点击 Add 新建规则
  2. 在 Rule Actions 选择Run macro
  3. 配置 Token 提取正则(示例):
    name="csrf_token" value="([a-f0-9]{12})"

3. 更新策略设置

  • 更新触发条件 :当检测到302 重定向 或Set-Cookie时
  • 作用范围 :限定在/api/* 路径下
  • 异常处理:设置 3 次重试机制

完整配置示例

# Burp 宏定义示例(Python 语法)def macro(request, response):
    # 从响应中提取 Token
    token = re.search(r'csrf_token=([^&"\']+)', response).group(1)

    # 修改后续请求
    request.setParameter('csrf_token', token)
    return request

性能与安全考量

  1. 性能影响
  2. 增加约 5 -10% 的请求处理时间
  3. 建议:对静态资源路径添加排除规则

  4. 安全风险

  5. 避免在生产环境启用(可能修改合法请求)
  6. 临时 Token 应设置较短有效期

避坑指南

  • 问题 1 :Token 未正确注入
  • 检查正则是否匹配 DOM 实际结构
  • 使用 Logger++ 插件验证捕获结果

  • 问题 2 :循环重定向

  • 确认 Token 更新未破坏会话状态
  • 在 Scope 中排除登录 / 注销路径

  • 问题 3 :多步骤流程失效

  • 为每个关键节点创建独立 macro
  • 使用Session.tokensAPI 跨请求传递

进阶思考

当遇到以下复杂场景时,可考虑:

  1. JWT Token:结合 Authorization 头处理
  2. 加密 Token:编写自定义解密 processor
  3. 双 Token 验证:配置多重匹配规则

建议从简单的登录表单开始实践,逐步扩展到购物车、支付等多步骤流程测试。记录不同框架(如 Spring Security、Django CSRF)的 Token 生成规律,建立自己的规则库。

正文完
 0
评论(没有评论)