实战演示 BurpSuite 插件 SignMe 安装和使用,有签名的接口也可以爆破了
字数 1527 2025-08-22 12:23:24
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代码
关键代码结构
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
}
];
}
}
注意事项
- 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插件自动化处理签名接口的方法,显著提高安全测试效率,特别是在需要爆破签名保护的接口时。