实战演示 BurpSuite 插件 SignMe 安装和使用,有签名的接口也可以爆破了
字数 1527 2025-08-22 12:23:24

BurpSuite插件SignMe安装与使用教程:签名接口爆破实战指南

一、签名认证基础

1. 签名认证原理

签名认证是一种安全机制,用于验证数据来源和完整性,通常包含以下步骤:

  1. 消息摘要:使用Hash算法(如SHA-256、MD5等)生成消息唯一标识
  2. 私钥签名:发送方使用私钥对Hash值加密生成数字签名
  3. 发送消息:将原始消息和签名一起发送
  4. 验证签名:接收方使用公钥解密签名并与计算Hash值比对

2. 签名特点

  • 身份认证:只有拥有私钥的人才能生成有效签名
  • 消息完整性:任何数据变动都会导致Hash值变化
  • 不可否认性:发送方无法否认已签名的消息

二、真实案例中的签名破解分析

1. 案例背景

  • 支付接口请求包含orderAmountSignature字段
  • 修改orderAmount后返回"签名错误"
  • 通过分析前端JS代码发现签名算法

2. 签名算法分析

签名生成流程:

  1. 获取Token
  2. 对请求参数按key排序并去除括号引号
  3. 拼接以下元素:
    • 时间戳的Base64编码(截取前10位)
    • Token
    • 盐值(Salt)
    • 处理后的请求参数
  4. 对拼接结果进行MD5哈希运算

3. 签名破解方法

  1. 提取JS中的签名算法代码
  2. 在本地环境中运行算法生成有效签名
  3. 同时需要更新请求中的时间戳

三、SignMe插件介绍

1. 插件功能

  • 自动为BurpSuite中的请求生成有效签名
  • 支持Proxy、Repeater和Intruder模块
  • 可自定义签名规则和算法

2. 插件安装

  1. 下载插件JAR包:GitHub地址
  2. 在BurpSuite中导入插件:
    • 打开Burp → Extender → Add → 选择下载的JAR文件

四、SignMe插件配置与使用

1. 访问管理界面

  • 浏览器访问:http://localhost:3336/rule-manager

2. 创建新规则

  1. 点击"新建规则"
  2. 填写规则名称
  3. 设置URL白名单(需要应用签名的接口URL)
  4. 选择生效范围(Proxy/Repeater/Intruder)

3. 编写签名算法JS代码

关键代码结构

let salt = 'xxx'; // 替换为实际盐值

function main() {
    const method = request['HTTPMethod'];
    if (method == 'GET') return [];
    
    if (method == 'POST') {
        // 获取必要参数
        let token = request.headers['Token'];
        let ts = utils.getTimestamp(); // 获取当前时间戳
        
        // 处理请求参数
        let params = utils.getParametersByType(ParameterType.PARAM_JSON);
        let e = {};
        utils.sortParameters(params, SortType.ASC).forEach(it => {
            e[it.name] = it.value;
        });
        
        // 构建签名字符串
        let a = "";
        Object.keys(e).sort().forEach(function(t) {
            "undefined" != e[t] && (a += t + e[t]);
        });
        
        // 拼接最终字符串
        let s = utils.base64encode(String(ts).slice(0, 10)) + token + salt + a;
        
        // 生成MD5签名
        let signature = utils.md5(s);
        
        // 返回需要修改的字段
        return [
            {
                name: "Signature",
                value: signature,
                location: ParameterType.HEADER,
                action: EditAction.OVERRIDE
            },
            {
                name: "Timestamp",
                value: ts,
                location: ParameterType.HEADER,
                action: EditAction.OVERRIDE
            }
        ];
    }
}

注意事项

  1. GraalVM不支持RegExp正则表达式,需用replace方法替代
  2. utils.getTimestamp()返回13位时间戳,需手动截取前10位
  3. utils.getParametersByType()获取的参数格式需要额外处理

五、实战测试

1. Repeater模块测试

  1. 修改请求参数(如orderAmount
  2. 保持SignatureTimestamp字段不变
  3. 发送请求,插件会自动更新签名和时间戳
  4. 在Extensions模块查看SignMe日志验证处理结果

2. Intruder模块爆破

  1. 在规则中勾选Intruder模块
  2. 设置攻击参数和payload
  3. 插件会自动为每个请求生成有效签名

六、常见问题解决

  1. 签名仍然无效

    • 检查盐值是否正确
    • 验证参数处理顺序是否与原始算法一致
    • 确认时间戳格式是否正确
  2. 插件不生效

    • 检查URL白名单是否包含目标URL
    • 确认规则已启用
    • 查看BurpSuite Extender中的插件状态
  3. JS代码错误

    • 使用log()函数输出调试信息
    • 检查GraalVM不支持的语法特性

七、安全建议

  1. 开发者角度

    • 避免使用简单Hash作为签名
    • 引入动态变化的元素(如一次性随机数)
    • 关键接口使用真正的非对称加密签名
  2. 测试者角度

    • 仅用于授权测试
    • 避免影响生产环境
    • 测试完成后禁用插件规则

通过本教程,您应该能够掌握使用SignMe插件自动化处理签名接口的方法,显著提高安全测试效率,特别是在需要爆破签名保护的接口时。

BurpSuite插件SignMe安装与使用教程:签名接口爆破实战指南 一、签名认证基础 1. 签名认证原理 签名认证是一种安全机制,用于验证数据来源和完整性,通常包含以下步骤: 消息摘要 :使用Hash算法(如SHA-256、MD5等)生成消息唯一标识 私钥签名 :发送方使用私钥对Hash值加密生成数字签名 发送消息 :将原始消息和签名一起发送 验证签名 :接收方使用公钥解密签名并与计算Hash值比对 2. 签名特点 身份认证 :只有拥有私钥的人才能生成有效签名 消息完整性 :任何数据变动都会导致Hash值变化 不可否认性 :发送方无法否认已签名的消息 二、真实案例中的签名破解分析 1. 案例背景 支付接口请求包含 orderAmount 和 Signature 字段 修改 orderAmount 后返回"签名错误" 通过分析前端JS代码发现签名算法 2. 签名算法分析 签名生成流程: 获取Token 对请求参数按key排序并去除括号引号 拼接以下元素: 时间戳的Base64编码(截取前10位) Token 盐值(Salt) 处理后的请求参数 对拼接结果进行MD5哈希运算 3. 签名破解方法 提取JS中的签名算法代码 在本地环境中运行算法生成有效签名 同时需要更新请求中的时间戳 三、SignMe插件介绍 1. 插件功能 自动为BurpSuite中的请求生成有效签名 支持Proxy、Repeater和Intruder模块 可自定义签名规则和算法 2. 插件安装 下载插件JAR包: GitHub地址 在BurpSuite中导入插件: 打开Burp → Extender → Add → 选择下载的JAR文件 四、SignMe插件配置与使用 1. 访问管理界面 浏览器访问: http://localhost:3336/rule-manager 2. 创建新规则 点击"新建规则" 填写规则名称 设置URL白名单(需要应用签名的接口URL) 选择生效范围(Proxy/Repeater/Intruder) 3. 编写签名算法JS代码 关键代码结构 注意事项 GraalVM不支持RegExp正则表达式,需用replace方法替代 utils.getTimestamp() 返回13位时间戳,需手动截取前10位 utils.getParametersByType() 获取的参数格式需要额外处理 五、实战测试 1. Repeater模块测试 修改请求参数(如 orderAmount ) 保持 Signature 和 Timestamp 字段不变 发送请求,插件会自动更新签名和时间戳 在Extensions模块查看SignMe日志验证处理结果 2. Intruder模块爆破 在规则中勾选Intruder模块 设置攻击参数和payload 插件会自动为每个请求生成有效签名 六、常见问题解决 签名仍然无效 : 检查盐值是否正确 验证参数处理顺序是否与原始算法一致 确认时间戳格式是否正确 插件不生效 : 检查URL白名单是否包含目标URL 确认规则已启用 查看BurpSuite Extender中的插件状态 JS代码错误 : 使用 log() 函数输出调试信息 检查GraalVM不支持的语法特性 七、安全建议 开发者角度 : 避免使用简单Hash作为签名 引入动态变化的元素(如一次性随机数) 关键接口使用真正的非对称加密签名 测试者角度 : 仅用于授权测试 避免影响生产环境 测试完成后禁用插件规则 通过本教程,您应该能够掌握使用SignMe插件自动化处理签名接口的方法,显著提高安全测试效率,特别是在需要爆破签名保护的接口时。