深度解析一键加解密插件autoDecoder,让你像测试明文一样简单
字数 1314 2025-09-01 11:26:11
AutoDecoder加解密插件深度使用指南
一、概述
AutoDecoder是一款BurpSuite加解密插件,主要用于解决渗透测试过程中遇到的加解密问题。它能够:
- 支持内置常见加解密算法直接使用
- 允许用户自定义编写加解密脚本
- 简化加解密测试流程,使测试加密数据像测试明文一样简单
二、核心流程图解析
1. 官方标准流程
- 正常流程:请求/响应 → 加解密处理 → 目标服务器/客户端
- 密文处理流程:接收密文 → 解密 → 处理明文 → 加密 → 发送
- 明文处理流程:接收明文 → 加密 → 发送密文
2. 数据类型处理流程
输入数据 → 判断数据类型 → 转换为所需格式(bytes/str) → 加解密处理 → 输出转换 → 输出数据
三、常见加密算法总结
| 算法 | 加密输入要求 | 解密输入要求 | Key要求 | IV要求 | 填充要求 |
|---|---|---|---|---|---|
| AES | bytes | bytes | bytes | bytes | PKCS5/PKCS7 |
| DES | bytes | bytes | bytes | bytes | PKCS5/PKCS7 |
| 3DES | bytes | bytes | bytes | bytes | PKCS5/PKCS7 |
四、关键问题解析
1. 填充处理
- AES填充:
from Crypto.Util.Padding import pad, unpad
padded = pad(b"Hello", AES.block_size) # 自动填充
unpadded = unpad(padded, AES.block_size) # 自动去除填充
- DES填充:
padded = pad(b"Hello", DES.block_size)
unpadded = unpad(padded, DES.block_size)
- 3DES填充:
padded = pad(b"Hello", DES3.block_size)
unpadded = unpad(padded, DES3.block_size)
2. 数据类型转换
- encode:将数据转换为字节类型(bytes),用于本地加解密
- decode:将数据转换为字符串类型(str),用于网络传输
3. 编码问题
- Base64编码有多种实现方式:
base64.encodebytes(data):会产生换行符,需使用.strip("\n")去除base64.b64encode(data):不会产生换行符
五、Flask在AutoDecoder中的用途
1. Web API接口设计
@app.route('/encode', methods=["POST"]) # 加密接口
@app.route('/decode', methods=["POST"]) # 解密接口
2. 参数获取
body = request.form.get('dataBody') # 必需参数
headers = request.form.get('dataHeaders') # 可选参数
requestorresponse = request.form.get('requestorresponse') # 请求/响应标识
3. 服务启动
app.debug = True # 调试模式
app.run(host="0.0.0.0", port="8888") # 启动服务
六、JSON数据处理
1. 请求包处理(加密后添加数据)
body = aes_encrypt(body)
body = '{"data":"' + body.decode() + '"}'
2. 响应包处理(提取特定字段解密)
json_data = json.loads(text)
data = json_data["result"] # 只解密result字段
decrypted_data = aes_decrypt(data)
七、完整示例脚本
# -*- coding:utf-8 -*-
from flask import Flask, request
from pyDes import *
import base64
import json
app = Flask(__name__)
# DES加密函数
def des_encrypt(s):
secret_key = "f0ngtest"
iv = "f0ngf0ng"
k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)
en = k.encrypt(s, padmode=PAD_PKCS5)
return base64.encodebytes(en).decode()
# DES解密函数
def des_decrypt(s):
secret_key = "f0ngtest"
iv = "f0ngf0ng"
k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)
de = k.decrypt(base64.decodebytes(bytes(s,encoding="utf-8")), padmode=PAD_PKCS5)
return de.decode()
# 加密接口
@app.route('/encode',methods=["POST"])
def encrypt():
param = request.form.get('dataBody')
param_headers = request.form.get('dataHeaders')
param_requestorresponse = request.form.get('requestorresponse')
encry_param = des_encrypt(param.strip("\n"))
if param_requestorresponse == "request":
return param_headers + "\r\n\r\n\r\n\r\n" + encry_param
return encry_param
# 解密接口
@app.route('/decode',methods=["POST"])
def decrypt():
param = request.form.get('dataBody')
param_headers = request.form.get('dataHeaders')
param_requestorresponse = request.form.get('requestorresponse')
decrypt_param = des_decrypt(param.strip("\n"))
if param_requestorresponse == "request":
return param_headers + "\r\n\r\n\r\n\r\n" + decrypt_param
else:
return decrypt_param
if __name__ == '__main__':
app.debug = True
app.run(host="0.0.0.0", port="8888")
八、调试指南
1. 测试数据示例
解密测试请求:
POST /testsql.php HTTP/1.1
Host: 10.211.55.4
Content-Type: application/x-www-form-urlencoded
Content-Length: 24
I9z1fsH5QQ2NUbJi/7a8lw==
加密测试请求:
POST /testsql.php HTTP/1.1
Host: 10.211.55.4
Content-Type: application/x-www-form-urlencoded
Content-Length: 24
{"userName":"admin","userPwd":"123456"}
2. 常见问题解决
- 库缺失错误:根据错误提示安装相应库(pycryptodome、pyDes等)
- Python版本问题:推荐使用Python 3.7+,避免使用Python 2.x
- 自动重载:修改脚本后无需重启服务,Flask会自动重新加载
九、高级应用技巧
- 动态密钥获取:可以从请求头或特定字段提取加解密密钥
- 多算法支持:在脚本中添加算法判断逻辑,支持多种加解密算法
- 错误处理增强:添加详细的错误日志记录,便于排查问题
- 性能优化:对于大量数据处理,可以考虑使用更高效的加解密库
十、资源链接
通过本指南,您应该能够掌握AutoDecoder插件的核心使用方法,并能够根据实际需求编写自定义的加解密脚本,大大提高渗透测试中对加密数据处理的效率。