在渗透测试过程中,常会遇到需要破解前端JavaScript加密算法才能篡改数据包的情况。传统做法是使用Python的requests库手动构造请求,效率较低。RaindropEcho工具旨在将JS逆向成果与BurpSuite集成,实现数据包的自动加解密,从而提升测试效率。通过编写符合规范的JS模板并导入插件,即可让BurpSuite自动处理指定接口的加解密流程。
核心功能
- 自定义JS模板:提供模板框架,支持用户编写针对特定域名和接口的加密/解密算法。
- 多模板支持:可同时导入多个模板,应对不同接口的加密方案。
- 自动化流程:拦截到的密文数据包会自动解密并送入重放器(Repeater);修改明文后发送时,插件会自动加密并发出。
环境准备
- 安装Jython,并在BurpSuite的Extender选项中配置其路径。
- 安装Node.js,并确保其可执行文件路径已添加到系统环境变量。
使用指南
1. 编写JS逆向模板
模板主要包含三部分:
encryptFunction(data)函数:在此处编写具体的加密逻辑。
config对象:配置该加密算法对应的目标域名(domain)和接口路径(path)。
default_json对象:定义逆向分析得到的原始数据结构。
以下是一个完整的模板示例:
const fs = require('fs');
// ---------- 用户编写区域开始 ----------
// 加密函数
function encryptFunction(data) {
const json_data = JSON.parse(data);
// 需根据实际加密结果返回相应格式
return `data=${jeimit(json_data.data)}&crc=${json_data.crc}`;
}
// 目标配置
const config = {
domain: "xxx.com",
path: "/v3/xxx"
};
// 默认数据
const default_json = {};
// ---------- 用户编写区域结束 ----------
// ---------- 以下代码请勿修改 ----------
const mode = process.argv[2];
if (mode === 'config') {
console.log(JSON.stringify(config));
process.exit(0);
}
if (mode === 'default') {
console.log(JSON.stringify(default_json));
process.exit(0);
}
if (process.argv.length < 4) {
console.error("Usage: node script.js [mode] [inputFile] [outputFile]");
process.exit(1);
}
const inputFile = process.argv[3];
const outputFile = process.argv[4];
let inputData;
try {
inputData = fs.readFileSync(inputFile, 'utf8');
} catch (err) {
console.error(`Error reading input file: ${inputFile}`, err);
process.exit(1);
}
let outputData;
switch (mode) {
case 'encrypt':
outputData = encryptFunction(inputData);
break;
default:
console.error(`Unknown mode: ${mode}`);
process.exit(1);
}
try {
fs.writeFileSync(outputFile, outputData, 'utf8');
} catch (err) {
console.error(`Error writing to output file: ${outputFile}`, err);
process.exit(1);
}
2. 导入插件与模板
- 在BurpSuite中安装RaindropEcho插件。
- 在插件界面选择导入编写好的JS文件。
- 重要:确保JS文件的存放路径不包含中文字符。
- 导入成功后,插件列表中会显示该模板的配置信息。
3. 插件工作流演示
说明:以下演示使用公开测试网站的心跳包,不涉及敏感数据与攻击行为。
- 捕获与解密:在Proxy或任何其他模块中,右键点击目标数据包,选择发送到RaindropEcho插件。插件将自动调用JS模板中的解密函数,并将明文结果显示在界面中。
- 修改与重放:在插件界面修改解密后的明文数据,点击发送。插件会先调用加密函数处理修改后的数据,再将加密结果自动发送到目标服务器,完成一次自动化的加解密重放。
通过以上步骤,RaindropEcho成功桥接了JavaScript逆向分析与BurpSuite的渗透测试工作流,极大简化了对加密接口的测试难度。
项目开源地址:https://github.com/tingyusys/RaindropEcho
|