Burp+Python 深度联动:AES加密数据自动化处理实战指南
字数 1165 2025-08-29 22:41:44
Burp与Python深度联动:AES加密数据自动化处理实战指南
一、核心场景与需求分析
在渗透测试过程中,经常会遇到API数据采用AES加密传输的场景,这给安全测试带来了挑战。主要需求包括:
- 密文实时解析:能够快速解密Burp拦截的加密请求体,以便分析业务逻辑
- 加解密流程闭环:实现从请求加密发送到响应解密验证的全链路自动化
- 密钥动态管理:支持多种密钥加载方式(硬编码、环境变量等)
二、AES解密核心算法实现
1. 基础解密函数设计
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
import base64
# 密钥定义:16字节HEX字符串转字节(AES-128)
AES_KEY = bytes.fromhex('E2842C540F0810C3F11F42427F48A3DE')
def aes_ecb_decrypt(ciphertext: str, key: bytes) -> str:
"""
ECB模式AES解密(含Base64解码与PKCS7去填充)
:param ciphertext: Base64编码的密文字符串
:param key: 16/24/32字节的AES密钥(字节类型)
:return: 解密后的明文字符串
"""
# 1. Base64解码密文
cipher_bytes = base64.b64decode(ciphertext)
# 2. 创建ECB模式解密器
cipher = AES.new(key, AES.MODE_ECB)
# 3. 执行解密
decrypted_bytes = cipher.decrypt(cipher_bytes)
# 4. 去除PKCS7填充
plaintext_bytes = unpad(decrypted_bytes, AES.block_size)
# 5. 字节转UTF-8字符串
return plaintext_bytes.decode('utf-8')
# 示例解密调用
sample_cipher = "zWJLUIlnTNe4SnZqvnk0BbS1WHyi8AxZnCyFw1VuZ+vuKMHczygw6a9Owd89Dl6NNAobn/zkWw4BFDQVLX0uUg=="
print(f"原始密文: {sample_cipher}")
print(f"解密结果: {aes_ecb_decrypt(sample_cipher, AES_KEY)}")
2. 关键技术点解析
-
ECB模式特性:
- 相同明文块生成相同密文块,存在模式缺陷
- 适合单次短数据解密,如API参数解密
- 实际应用中需验证是否为弱加密场景
-
填充算法:
- 使用
unpad自动处理PKCS7填充,兼容标准加密接口 - 若服务端使用非标准填充(如ISO 10126),需自定义去填充逻辑
- 使用
三、Burp联动框架封装
1. 全功能加解密类设计
import json
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import base64
class BurpAESHandler:
def __init__(self, key: str = None):
"""
初始化AES处理器
:param key: 16/24/32字节HEX格式密钥(默认使用硬编码密钥)
"""
self.key = bytes.fromhex(key) if key else AES_KEY
def encrypt_request(self, header: dict, body: dict) -> tuple:
"""
加密HTTP请求体(JSON转AES加密)
:param header: HTTP请求头字典
:param body: 请求体字典
:return: (加密后的请求头, 加密后的请求体)
"""
# 1. 序列化请求体为JSON字符串
json_body = json.dumps(body)
# 2. 创建AES加密器(ECB模式)
cipher = AES.new(self.key, AES.MODE_ECB)
# 3. 填充并加密数据
padded_data = pad(json_body.encode('utf-8'), AES.block_size)
encrypted_bytes = cipher.encrypt(padded_data)
# 4. Base64编码加密结果
encrypted_body = base64.b64encode(encrypted_bytes).decode('utf-8')
# 5. 更新请求头(Content-Type等)
new_header = header.copy()
new_header['Content-Type'] = 'application/aes-encrypted'
return new_header, encrypted_body
def decrypt_response(self, encrypted_response: str) -> dict:
"""
解密HTTP响应体
:param encrypted_response: 加密的响应体(Base64格式)
:return: 解密后的JSON字典
"""
# 1. Base64解码
cipher_bytes = base64.b64decode(encrypted_response)
# 2. 创建AES解密器
cipher = AES.new(self.key, AES.MODE_ECB)
# 3. 解密数据
decrypted_bytes = cipher.decrypt(cipher_bytes)
# 4. 去除填充
plaintext_bytes = unpad(decrypted_bytes, AES.block_size)
# 5. 解码JSON
return json.loads(plaintext_bytes.decode('utf-8'))
2. Burp扩展集成要点
-
Burp API集成:
- 通过
IBurpExtender接口实现扩展 - 使用
IExtensionHelpers处理HTTP消息 - 注册
IHttpListener监听HTTP流量
- 通过
-
自动化处理流程:
- 拦截请求时自动加密敏感参数
- 拦截响应时自动解密返回数据
- 支持修改后重新加密发送
-
密钥管理策略:
- 硬编码密钥(测试环境)
- 配置文件读取
- 环境变量获取
- 动态密钥协商(如从登录响应中提取)
四、实战应用场景
1. 渗透测试中的典型用例
-
加密参数篡改测试:
- 解密请求参数
- 修改关键值(如userID、price等)
- 重新加密发送
- 观察服务端响应
-
敏感信息泄露检测:
- 自动解密响应
- 检查是否包含敏感数据(密码、token等)
- 可结合正则表达式进行模式匹配
-
加密算法强度验证:
- 检测是否使用弱加密模式(如ECB)
- 验证密钥长度是否足够(至少128位)
- 检查是否使用固定IV(CBC模式)
2. 性能优化建议
-
缓存机制:
- 缓存常用密钥
- 缓存解密结果(相同密文)
-
并行处理:
- 多线程处理批量解密任务
- 异步I/O操作
-
选择性解密:
- 只解密特定路径的请求
- 基于内容类型过滤
五、安全注意事项
-
密钥保护:
- 不要在代码中硬编码生产环境密钥
- 使用密钥管理系统
- 实施最小权限原则
-
错误处理:
- 妥善处理解密失败情况
- 不要暴露详细错误信息
-
日志记录:
- 记录解密操作
- 审计密钥使用情况
六、扩展功能
-
多算法支持:
- 添加AES-CBC、AES-GCM等模式
- 支持RSA等其他加密算法
-
智能识别:
- 自动检测加密数据
- 猜测加密算法和模式
-
可视化界面:
- 在Burp中显示明文/密文对比
- 提供便捷的加解密操作按钮
通过这套完整的AES加解密实战框架,安全测试人员可以高效地处理加密通信场景,显著提升渗透测试的效率和质量。