记某次bp插件+flask自动替换绕过防重放的漏洞挖掘
字数 1792 2025-08-23 18:31:18

Burp插件+Flask自动替换绕过防重放机制漏洞挖掘技术文档

1. 前言

本文档详细记录了一种利用Burp插件结合Flask服务自动替换请求头签名参数,从而绕过前端防重放机制的漏洞挖掘方法。该方法适用于前端采用时间戳、随机字符串和签名校验的防重放机制场景。

2. 技术背景

2.1 防重放机制分析

目标系统采用的防重放机制包含三个关键参数:

  • Timestamp:时间戳
  • Noncestr:随机字符串(UUID v4)
  • Signature:基于请求参数、时间戳、随机字符串和密钥生成的MD5签名

2.2 防重放机制工作原理

  1. 每次请求必须携带新的验证参数
  2. 服务端校验签名有效性
  3. 签名包含时间戳,可防止重放攻击
  4. 签名包含随机字符串,确保每次请求唯一

3. 签名生成机制分析

3.1 参数定位方法

  1. 使用Burp Suite抓取正常请求
  2. 观察请求头中疑似防重放的参数
  3. 通过浏览器开发者工具全局搜索关键字(Ctrl+Shift+F12)
  4. 在JavaScript代码中设置断点调试

3.2 签名生成逻辑

3.2.1 Noncestr生成

// 生成UUID v4随机字符串
n._create4 = function() {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
        var r = Math.random() * 16 | 0,
            v = c == 'x' ? r : (r & 0x3 | 0x8);
        return v.toString(16);
    });
}

3.2.2 Signature生成

  1. 根据请求方法处理参数:
    • GET请求:对参数进行排序后拼接
    • POST请求:直接拼接JSON数据
  2. 拼接格式:param + "&" + 时间戳 + "&" + nonceStr + "&" + key
  3. 对拼接后的字符串进行MD5哈希

3.2.3 签名验证流程

  1. 服务端接收请求
  2. 使用相同算法生成签名
  3. 比较客户端签名与服务端签名
  4. 验证时间戳有效性(防重放窗口)

4. 自动化绕过方案

4.1 技术架构

使用以下组件实现自动化绕过:

  1. Burp Suite:作为主要的HTTP代理和测试工具
  2. autoDecoder插件:实现请求/响应的自动处理
  3. Flask服务:提供签名生成和请求头替换功能

4.2 工具准备

  1. 安装autoDecoder插件:

    • GitHub地址:https://github.com/f0ng/autoDecoder
    • 支持Burp Suite的请求/响应自动加解密
  2. Flask服务框架:

    • 轻量级Python Web框架
    • 提供签名生成API接口

4.3 Flask服务实现

4.3.1 服务端代码

from flask import Flask, request
import hashlib
import uuid
import time

app = Flask(__name__)

# 替换为实际的密钥
SECRET_KEY = "your_secret_key_here"

def generate_signature(params, timestamp, nonce_str):
    """
    生成签名
    :param params: 请求参数字符串
    :param timestamp: 时间戳
    :param nonce_str: 随机字符串
    :return: MD5签名
    """
    sign_str = f"{params}&{timestamp}&{nonce_str}&{SECRET_KEY}"
    return hashlib.md5(sign_str.encode('utf-8')).hexdigest()

@app.route('/encode', methods=["POST"])
def encrypt():
    """
    处理Burp Suite发送的加密请求
    """
    # 获取请求参数
    body = request.form.get('dataBody')  # 请求体
    headers = request.form.get('dataHeaders')  # 请求头
    
    # 生成新的签名参数
    timestamp = str(int(time.time()))
    nonce_str = str(uuid.uuid4())
    
    # 处理GET/POST参数
    if request.method == "GET":
        # 对GET参数排序处理
        params = "&".join(sorted(body.split("&"))) if body else ""
    else:
        # POST请求直接使用JSON体
        params = body if body else ""
    
    signature = generate_signature(params, timestamp, nonce_str)
    
    # 构造新的请求头
    new_headers = []
    if headers:
        for line in headers.split("\r\n"):
            if not any(line.startswith(h) for h in ["Timestamp:", "Noncestr:", "Signature:"]):
                new_headers.append(line)
    
    new_headers.append(f"Timestamp: {timestamp}")
    new_headers.append(f"Noncestr: {nonce_str}")
    new_headers.append(f"Signature: {signature}")
    
    # 返回处理后的请求
    return "\r\n".join(new_headers) + "\r\n\r\n" + (body if body else "")

@app.route('/decode', methods=["POST"])
def decrypt():
    """
    处理Burp Suite发送的解密请求(本例中不需要)
    """
    return request.form.get('dataBody', '')

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=8888, debug=True)

4.3.2 服务部署

  1. 安装依赖:

    pip install flask
    
  2. 启动服务:

    python app.py
    

4.4 Burp Suite配置

  1. 安装autoDecoder插件:

    • 通过Burp Suite的Extender选项卡添加插件
  2. 配置插件:

    • 加密接口http://localhost:8888/encode
    • 解密接口http://localhost:8888/decode
    • 勾选"Intruder payload processing"选项
  3. 解决中文乱码问题:

    • 检查Python文件编码(UTF-8)
    • 确保Flask响应头包含Content-Type: text/html; charset=utf-8

5. 漏洞挖掘流程

5.1 测试环境发现

  1. 在测试过程中注意观察:

    • 域名跳转情况
    • 接口文档泄露
    • 测试环境标识
  2. 发现测试环境后:

    • 立即收集接口文档
    • 备份所有可用接口
    • 对比测试环境与生产环境差异

5.2 接口Fuzz测试

  1. 使用配置好的Burp Suite进行测试:

    • 利用Intruder模块批量测试接口
    • 自动处理签名参数,无需手动干预
  2. 重点关注:

    • 未授权访问接口
    • 参数注入点
    • 业务逻辑漏洞

6. 防御建议

6.1 加强防重放机制

  1. 增加签名算法复杂度:

    • 使用HMAC-SHA256替代MD5
    • 加入客户端指纹信息
  2. 缩短时间戳有效窗口:

    • 从分钟级缩短到秒级
    • 服务端严格校验时间戳

6.2 其他安全措施

  1. 接口文档管理:

    • 测试环境与生产环境隔离
    • 接口文档访问控制
  2. 代码混淆:

    • 对前端加密代码进行混淆
    • 防止签名算法被轻易分析
  3. 多因素校验:

    • 结合IP限制
    • 加入二次验证机制

7. 总结

本文介绍了一种完整的绕过前端防重放机制的方法,通过分析签名生成逻辑,结合Burp插件和Flask服务实现自动化请求处理,有效提高了在防重放机制下的漏洞挖掘效率。该方法的核心在于:

  1. 准确分析前端签名生成逻辑
  2. 设计自动化签名生成服务
  3. 利用Burp插件实现无缝集成
  4. 针对测试环境进行重点测试

此技术方案不仅适用于本文描述的特定场景,经过适当修改后也可应用于其他类似的防重放机制绕过场景。

Burp插件+Flask自动替换绕过防重放机制漏洞挖掘技术文档 1. 前言 本文档详细记录了一种利用Burp插件结合Flask服务自动替换请求头签名参数,从而绕过前端防重放机制的漏洞挖掘方法。该方法适用于前端采用时间戳、随机字符串和签名校验的防重放机制场景。 2. 技术背景 2.1 防重放机制分析 目标系统采用的防重放机制包含三个关键参数: Timestamp :时间戳 Noncestr :随机字符串(UUID v4) Signature :基于请求参数、时间戳、随机字符串和密钥生成的MD5签名 2.2 防重放机制工作原理 每次请求必须携带新的验证参数 服务端校验签名有效性 签名包含时间戳,可防止重放攻击 签名包含随机字符串,确保每次请求唯一 3. 签名生成机制分析 3.1 参数定位方法 使用Burp Suite抓取正常请求 观察请求头中疑似防重放的参数 通过浏览器开发者工具全局搜索关键字(Ctrl+Shift+F12) 在JavaScript代码中设置断点调试 3.2 签名生成逻辑 3.2.1 Noncestr生成 3.2.2 Signature生成 根据请求方法处理参数: GET请求:对参数进行排序后拼接 POST请求:直接拼接JSON数据 拼接格式: param + "&" + 时间戳 + "&" + nonceStr + "&" + key 对拼接后的字符串进行MD5哈希 3.2.3 签名验证流程 服务端接收请求 使用相同算法生成签名 比较客户端签名与服务端签名 验证时间戳有效性(防重放窗口) 4. 自动化绕过方案 4.1 技术架构 使用以下组件实现自动化绕过: Burp Suite :作为主要的HTTP代理和测试工具 autoDecoder插件 :实现请求/响应的自动处理 Flask服务 :提供签名生成和请求头替换功能 4.2 工具准备 安装autoDecoder插件: GitHub地址:https://github.com/f0ng/autoDecoder 支持Burp Suite的请求/响应自动加解密 Flask服务框架: 轻量级Python Web框架 提供签名生成API接口 4.3 Flask服务实现 4.3.1 服务端代码 4.3.2 服务部署 安装依赖: 启动服务: 4.4 Burp Suite配置 安装autoDecoder插件: 通过Burp Suite的Extender选项卡添加插件 配置插件: 加密接口 : http://localhost:8888/encode 解密接口 : http://localhost:8888/decode 勾选"Intruder payload processing"选项 解决中文乱码问题: 检查Python文件编码(UTF-8) 确保Flask响应头包含 Content-Type: text/html; charset=utf-8 5. 漏洞挖掘流程 5.1 测试环境发现 在测试过程中注意观察: 域名跳转情况 接口文档泄露 测试环境标识 发现测试环境后: 立即收集接口文档 备份所有可用接口 对比测试环境与生产环境差异 5.2 接口Fuzz测试 使用配置好的Burp Suite进行测试: 利用Intruder模块批量测试接口 自动处理签名参数,无需手动干预 重点关注: 未授权访问接口 参数注入点 业务逻辑漏洞 6. 防御建议 6.1 加强防重放机制 增加签名算法复杂度: 使用HMAC-SHA256替代MD5 加入客户端指纹信息 缩短时间戳有效窗口: 从分钟级缩短到秒级 服务端严格校验时间戳 6.2 其他安全措施 接口文档管理: 测试环境与生产环境隔离 接口文档访问控制 代码混淆: 对前端加密代码进行混淆 防止签名算法被轻易分析 多因素校验: 结合IP限制 加入二次验证机制 7. 总结 本文介绍了一种完整的绕过前端防重放机制的方法,通过分析签名生成逻辑,结合Burp插件和Flask服务实现自动化请求处理,有效提高了在防重放机制下的漏洞挖掘效率。该方法的核心在于: 准确分析前端签名生成逻辑 设计自动化签名生成服务 利用Burp插件实现无缝集成 针对测试环境进行重点测试 此技术方案不仅适用于本文描述的特定场景,经过适当修改后也可应用于其他类似的防重放机制绕过场景。