反CSRF爆破的三种姿势
字数 1644 2025-08-27 12:33:37

反CSRF爆破的三种技术姿势详解

1. CSRF Token Tracker插件法

适用场景

  • 适用于CSRF token作为请求参数的情况
  • 不适用于token在请求头或需要复杂交互的场景

使用方法

  1. 安装插件:在Burp Suite的BApp Store中搜索并安装"CSRF Token Tracker"
  2. 配置插件:
    • 添加需要跟踪的token参数名(如user_token
    • 确保插件处于激活状态

关键注意事项

  • 首次请求必须使用有效token:第一次重放请求时必须使用一个有效的、未使用过的token
    • 如果首次使用无效token,后续所有请求都会失败
    • 如果首次使用有效token,后续请求会自动更新token
  • 在Repeater模块测试时,确保插件已正确识别和更新token

局限性

  • 无法处理token在请求头中的情况
  • 不适用于需要先执行前置请求获取token的场景

2. 宏定义方法

适用场景

  • 当CSRF Token Tracker无法使用时
  • 需要先执行前置请求获取token的情况

配置步骤

  1. 进入Burp → Project options → Sessions
  2. 添加新的Session Handling Rule
  3. 在Rule Actions中添加"Run a macro"
  4. 创建新宏:
    • 选择获取token的前置请求
    • 选择使用token的主请求
  5. 配置宏参数:
    • 选择"1"(在所有请求前运行宏)
    • 配置token提取和替换规则

工作原理

  • 每次发送主请求前,宏会自动执行前置请求获取新token
  • 获取的token会自动替换到主请求中

示例流程

  1. 用户通过Repeater发送登录请求(请求71)
  2. 宏自动执行前置token请求(请求70)
  3. 使用新获取的token发送登录请求

局限性

  • 无法直接处理token在请求头中的情况
  • 配置相对复杂,需要理解请求流程

3. 宏+Extractor组合方法

适用场景

  • 当前两种方法都无效时
  • 特别是当token出现在请求头中时

前置准备

  1. 安装"Extractor"插件(通过BApp Store)
  2. 分析请求流程:
    • 请求1:获取token的请求
    • 请求2:使用token的主请求

配置步骤

宏配置

  1. 定义获取token的宏(仅包含请求1)
  2. 确保该宏在主请求前执行

Extractor配置

  1. 将两个请求包都发送到Extractor
  2. 配置Extractor:
    • 从请求1的响应中提取token
    • 将提取的token替换到请求2的请求头中

工作原理

  1. 宏负责在主请求前执行获取token的请求
  2. Extractor插件负责:
    • 从响应中匹配token
    • 自动替换后续请求中的token值

示例流程

  1. 请求87:获取token(值为407667d008b147199d174681a655aea0)
  2. 请求88:使用相同token值的主请求

优势

  • 可以处理请求头中的token
  • 自动化程度高,减少手动操作

综合对比

方法 适用场景 配置复杂度 处理请求头能力 自动化程度
CSRF Token Tracker 简单参数token
宏定义 需要前置请求 有限
宏+Extractor 复杂场景/请求头 最高

最佳实践建议

  1. 优先尝试CSRF Token Tracker,配置简单
  2. 当方法1无效时,分析token获取流程:
    • 如果需要前置请求 → 使用方法2(宏定义)
    • 如果token在请求头 → 使用方法3(宏+Extractor)
  3. 测试时务必检查Burp的Logger++,确认token是否正确获取和替换
  4. 首次请求必须使用有效token,否则后续自动化会失败

通过这三种方法,可以覆盖绝大多数反CSRF爆破的场景,有效提高渗透测试效率。

反CSRF爆破的三种技术姿势详解 1. CSRF Token Tracker插件法 适用场景 适用于CSRF token作为请求参数的情况 不适用于token在请求头或需要复杂交互的场景 使用方法 安装插件:在Burp Suite的BApp Store中搜索并安装"CSRF Token Tracker" 配置插件: 添加需要跟踪的token参数名(如 user_token ) 确保插件处于激活状态 关键注意事项 首次请求必须使用有效token :第一次重放请求时必须使用一个有效的、未使用过的token 如果首次使用无效token,后续所有请求都会失败 如果首次使用有效token,后续请求会自动更新token 在Repeater模块测试时,确保插件已正确识别和更新token 局限性 无法处理token在请求头中的情况 不适用于需要先执行前置请求获取token的场景 2. 宏定义方法 适用场景 当CSRF Token Tracker无法使用时 需要先执行前置请求获取token的情况 配置步骤 进入Burp → Project options → Sessions 添加新的Session Handling Rule 在Rule Actions中添加"Run a macro" 创建新宏: 选择获取token的前置请求 选择使用token的主请求 配置宏参数: 选择"1"(在所有请求前运行宏) 配置token提取和替换规则 工作原理 每次发送主请求前,宏会自动执行前置请求获取新token 获取的token会自动替换到主请求中 示例流程 用户通过Repeater发送登录请求(请求71) 宏自动执行前置token请求(请求70) 使用新获取的token发送登录请求 局限性 无法直接处理token在请求头中的情况 配置相对复杂,需要理解请求流程 3. 宏+Extractor组合方法 适用场景 当前两种方法都无效时 特别是当token出现在请求头中时 前置准备 安装"Extractor"插件(通过BApp Store) 分析请求流程: 请求1:获取token的请求 请求2:使用token的主请求 配置步骤 宏配置 定义获取token的宏(仅包含请求1) 确保该宏在主请求前执行 Extractor配置 将两个请求包都发送到Extractor 配置Extractor: 从请求1的响应中提取token 将提取的token替换到请求2的请求头中 工作原理 宏负责在主请求前执行获取token的请求 Extractor插件负责: 从响应中匹配token 自动替换后续请求中的token值 示例流程 请求87:获取token(值为407667d008b147199d174681a655aea0) 请求88:使用相同token值的主请求 优势 可以处理请求头中的token 自动化程度高,减少手动操作 综合对比 | 方法 | 适用场景 | 配置复杂度 | 处理请求头能力 | 自动化程度 | |------|----------|------------|----------------|------------| | CSRF Token Tracker | 简单参数token | 低 | 否 | 中 | | 宏定义 | 需要前置请求 | 中 | 有限 | 高 | | 宏+Extractor | 复杂场景/请求头 | 高 | 是 | 最高 | 最佳实践建议 优先尝试CSRF Token Tracker,配置简单 当方法1无效时,分析token获取流程: 如果需要前置请求 → 使用方法2(宏定义) 如果token在请求头 → 使用方法3(宏+Extractor) 测试时务必检查Burp的Logger++,确认token是否正确获取和替换 首次请求必须使用有效token,否则后续自动化会失败 通过这三种方法,可以覆盖绝大多数反CSRF爆破的场景,有效提高渗透测试效率。