实战autoDecoder:一站式搞定数据包加密与签名验证的自动化测试

张开发
2026/4/18 5:50:42 15 分钟阅读

分享文章

实战autoDecoder:一站式搞定数据包加密与签名验证的自动化测试
1. 为什么需要autoDecoder这样的工具最近几年越来越多的Web应用开始在前端对敏感数据进行加密处理比如登录接口的账号密码、支付接口的金额参数等。这种设计虽然提升了安全性但也给安全测试人员带来了不小的挑战。想象一下你每次修改一个参数都要手动计算签名、重新加密测试效率会变得非常低下。我在实际测试中就遇到过这样一个案例目标网站使用AES_CBC加密所有请求参数同时还加入了时间戳、随机ID和MD5签名校验。这意味着每次测试时都需要修改明文参数重新生成时间戳重新生成随机ID重新计算签名重新加密整个请求发送请求整个过程不仅繁琐耗时而且容易出错。autoDecoder就是为了解决这类问题而生的工具它能自动完成所有这些加解密和签名更新的工作让你可以像测试明文接口一样流畅地进行安全测试。2. autoDecoder的工作原理与核心功能2.1 整体架构设计autoDecoder本质上是一个中间人代理工具它的工作流程可以分为以下几个步骤拦截请求捕获从Burp Suite发出的加密请求解密处理将加密请求发送到本地代理服务进行解密明文展示将解密后的明文显示在Burp Suite界面中修改参数测试人员在明文界面修改参数重新加密将修改后的明文发送到本地代理服务重新加密发送请求将重新加密的请求发送到目标服务器这个过程中最核心的部分就是本地的加解密代理服务通常我们会用Flask这样的轻量级框架来实现。2.2 关键功能组件autoDecoder的主要功能可以概括为自动解密将加密的请求体解密为明文自动加密将修改后的明文重新加密签名更新自动重新计算并更新签名头信息维护自动更新时间戳、随机ID等校验字段无缝集成与Burp Suite完美配合操作体验流畅3. 实战搭建加解密代理服务3.1 环境准备在开始之前我们需要准备好以下环境Python 3.6Flask框架PyCryptodome库用于AES加解密execjs库用于执行JavaScript代码Burp Suite专业版或社区版autoDecoder插件安装必要的Python库pip install flask pycryptodome execjs3.2 编写加解密服务代码下面是一个完整的Flask加解密代理服务实现支持AES_CBC加密、时间戳、随机ID和MD5签名校验from flask import Flask, request import base64 import execjs import hashlib import re from Crypto.Cipher import AES from Crypto.Util.Padding import pad, unpad app Flask(__name__) # AES加密配置 key b1234567891234567 iv b1234567891234567 # 加载JavaScript函数 ctx execjs.compile( function generateTimestamp() { return Date.parse(new Date) } function generateRequestId() { var chars 0123456789abcdef; var id Array.from({length: 32}, () chars.substr(Math.floor(16 * Math.random()), 1)); id[14] 4; id[19] chars.substr(3 id[19] | 8, 1); id[8] id[13] id[18] id[23]; return id.join() } ) def md5(text): return hashlib.md5(text.encode(utf-8)).hexdigest() def encrypt_data(data): cipher AES.new(key, AES.MODE_CBC, iv) padded pad(data.encode(utf-8), AES.block_size) encrypted cipher.encrypt(padded) return base64.b64encode(encrypted).decode(utf-8) def decrypt_data(data): encrypted base64.b64decode(data) cipher AES.new(key, AES.MODE_CBC, iv) decrypted unpad(cipher.decrypt(encrypted), AES.block_size) return decrypted.decode(utf-8) app.route(/encode, methods[POST]) def handle_encode(): body request.form.get(dataBody) headers request.form.get(dataHeaders) # 生成必要字段 request_id ctx.call(generateRequestId) timestamp str(ctx.call(generateTimestamp)) # 计算签名 signature md5(body request_id timestamp) # 更新头信息 headers re.sub(rtimestamp:\s*[^\r\n], ftimestamp: {timestamp}, headers) headers re.sub(rrequestId:\s*[^\r\n], frequestId: {request_id}, headers) headers re.sub(rsign:\s*[^\r\n], fsign: {signature}, headers) # 加密请求体 encrypted_body encrypt_data(body) return headers \r\n\r\n\r\n\r\n encrypted_body app.route(/decode, methods[POST]) def handle_decode(): body request.form.get(dataBody) headers request.form.get(dataHeaders) # 判断是否需要解密 if in body: # 已经是明文 return headers \r\n\r\n\r\n\r\n body else: # 需要解密 decrypted decrypt_data(body) return headers \r\n\r\n\r\n\r\n decrypted if __name__ __main__: app.run(host0.0.0.0, port8888)3.3 代码关键点解析AES加解密部分使用PyCryptodome库实现AES_CBC算法注意处理PKCS7填充加解密前后都需要进行Base64编解码JavaScript执行部分使用execjs执行前端加密逻辑包括时间戳生成和随机ID生成函数签名计算部分按照规则拼接参数计算MD5签名格式MD5(明文参数 requestId timestamp)头信息处理部分使用正则表达式动态更新头信息确保timestamp、requestId和sign字段正确4. autoDecoder配置与使用技巧4.1 基础配置步骤启动Flask加解密服务python app.py在Burp Suite中安装autoDecoder插件配置autoDecoder设置加密接口http://127.0.0.1:8888/encode设置解密接口http://127.0.0.1:8888/decode勾选Enable Request/Response Decoding配置代理设置确保流量经过Burp Suite4.2 高级使用技巧爆破测试注意事项必须使用单线程因为多线程可能导致签名校验失败在Intruder的Payload Processing中添加必要的处理步骤合理设置请求间隔避免触发频率限制常见问题排查解密失败检查密钥和IV是否正确确认填充方式是否匹配检查Base64编码是否正确签名校验失败确认签名算法实现是否正确检查时间戳是否在有效期内确认参数拼接顺序是否符合预期性能优化对于高频测试可以考虑缓存JavaScript执行环境优化正则表达式匹配效率适当增加Flask服务的worker数量5. 实际测试场景应用5.1 参数篡改测试配置好autoDecoder后参数篡改测试变得非常简单拦截加密请求在autoDecoder标签页查看明文直接修改明文参数发送请求autoDecoder会自动处理加密和签名更新5.2 爆破测试实战对于需要爆破的场景操作流程如下在Repeater中构造一个正确请求发送到Intruder设置爆破位置和字典在Payload Processing中添加必要的处理设置单线程模式开始爆破5.3 其他安全测试场景autoDecoder同样适用于SQL注入测试XSS测试业务逻辑漏洞测试越权测试关键是要确保加解密和签名逻辑正确实现这样所有测试都可以在明文状态下进行大大提高效率。

更多文章