AntSword 2.1.15 加密流量解密实战:从Wireshark捕获到XOR密钥还原(附Python脚本)
AntSword 2.1.15 加密流量解密实战从流量捕获到XOR密钥还原在网络安全攻防演练和渗透测试中Webshell管理工具产生的加密流量分析一直是安全研究人员关注的重点。作为一款开源的跨平台Webshell管理工具AntSword蚁剑因其模块化设计和丰富的功能在渗透测试领域被广泛使用。本文将深入探讨AntSword 2.1.15版本的加密流量特征并提供一个完整的实战解密流程。1. AntSword加密流量基础分析AntSword默认采用XOR加密算法对通信数据进行混淆这种轻量级加密方式既能规避部分基础WAF检测又保持了较高的执行效率。要成功解密流量首先需要识别其独特的通信特征HTTP头部特征User-Agent通常包含AntSword标识POST请求模式数据交互主要通过POST请求完成参数命名规律加密参数名常带有随机字符串前缀响应包特征返回数据包含特定分隔符如bbbf3和8f0909使用Wireshark捕获流量时可以通过以下过滤条件快速定位AntSword通信http.request.method POST http.user_agent contains AntSword关键流量特征对比表特征类型未加密流量表现XOR加密流量表现参数值可读PHP代码乱码字符串数据长度较短且固定长度随机变化响应格式原始输出带加密标记包裹2. Wireshark实战捕获与分析在实际分析环境中我们使用Wireshark 3.6.5版本进行流量捕获。以下是关键操作步骤启动捕获前设置合适的捕获过滤器tcp port 80 or tcp port 443捕获到流量后使用统计功能快速定位可疑会话点击Statistics → Conversations → TCP选项卡按数据包数量排序重点关注POST请求频繁的会话对可疑流量进行TCP流追踪Follow TCP Stream观察交互模式典型AntSword流量交互过程初始握手阶段发送基础环境检测代码命令执行阶段传输Base64编码的加密指令结果返回阶段服务器返回加密执行结果注意AntSword 2.1.15版本开始支持自定义编码器实际捕获的流量特征可能因配置不同而变化3. XOR加密原理与密钥识别AntSword使用的XOR加密算法虽然简单但通过密钥轮询机制增强了混淆效果。其核心算法可表示为def xor_encrypt(data, key): encrypted bytearray() key_length len(key) for i in range(len(data)): encrypted.append(data[i] ^ key[i % key_length]) return bytes(encrypted)识别XOR密钥的关键技巧查找密钥长度分析重复出现的字节模式间隔利用明文特征已知部分明文时如PHP标记?php可反向推导密钥频率分析对密文进行统计分析寻找可能的密钥字节常见密钥存储位置流量初始阶段的特定参数值Cookie中的特定字段HTTP头部自定义字段4. Python自动化解密脚本开发基于上述分析我们可以编写自动化解密脚本。以下是一个功能完整的解密工具实现import base64 import re from urllib.parse import unquote def ant_decode(encrypted_data, xor_key): 解密AntSword XOR加密数据 decoded bytearray() key_len len(xor_key) # 处理可能的URL编码 clean_data unquote(encrypted_data) # Base64解码如果适用 try: decoded_data base64.b64decode(clean_data) except: decoded_data clean_data.encode() # XOR解密 for i in range(len(decoded_data)): decoded.append(decoded_data[i] ^ ord(xor_key[i % key_len])) return decoded.decode(utf-8, errorsignore) def extract_from_pcap(pcap_path, output_file): 从pcap文件中提取并解密AntSword流量 try: import pyshark except ImportError: print(请先安装pyshark库pip install pyshark) return print(f[*] 分析文件: {pcap_path}) cap pyshark.FileCapture(pcap_path, display_filterhttp.request.method POST) results [] for pkt in cap: try: if AntSword in str(pkt.http.user_agent): uri pkt.http.request_uri post_data str(pkt.http.file_data) # 密钥提取逻辑根据实际情况调整 xor_key extract_key_from_data(post_data) if xor_key: decrypted ant_decode(post_data, xor_key) results.append(f\n[] 解密请求 {uri}:\n{decrypted}) except AttributeError: continue with open(output_file, w) as f: f.write(\n.join(results)) print(f[] 解密结果已保存到 {output_file}) def extract_key_from_data(data): 从加密数据中尝试提取XOR密钥 # 这里添加实际的密钥提取逻辑 # 示例从特定参数名或Cookie中提取 return default_key # 替换为实际提取逻辑5. 实战案例CTF赛题解密分析以某次CTF比赛中AntSword流量分析题为例演示完整解密流程流量初步筛查tshark -r challenge.pcap -Y http.request.method POST -T fields -e http.host -e http.request.uri | sort | uniq -c识别加密参数 通过分析发现主要通信参数为a3b5c7加密数据密钥定位 在初始握手包中发现Cookie字段包含XOR_KEY5tH3K3y执行解密from Crypto.Util.strxor import strxor encrypted base64.b64decode(1tXQz9aN...) # 截取的部分密文 key 5tH3K3y.encode() decrypted strxor.strxor(encrypted, key*(len(encrypted)//len(key)1)) print(decrypted.decode())获取Flag 解密后数据包含服务器文件系统遍历结果在/var/www/backup/目录下发现flag文件6. 高级技巧与疑难解决在实际分析中可能会遇到以下复杂情况情况一自定义编码器当攻击者使用非默认编码器时需要调整解密策略识别编码器类型Base64、ROT13、RSA等分析流量中的编码器配置参数实现对应的解码链情况二分块加密部分版本会采用分块加密策略def decrypt_chunked(data, key): chunk_size 512 # 常见分块大小 decrypted b for i in range(0, len(data), chunk_size): chunk data[i:ichunk_size] decrypted xor_encrypt(chunk, key) return decrypted情况三密钥轮换高级攻击者可能采用动态密钥策略需要通过以下方式应对分析密钥交换过程追踪会话上下文提取内存中的密钥片段7. 防御建议与检测方案作为防御方可以采取以下措施识别和阻断AntSword流量网络层检测部署规则匹配特定User-Agent监控异常的POST请求频率应用层防护# Nginx示例规则 location ~* \.php$ { if ($http_user_agent ~* AntSword) { return 403; } # 检测长Base64参数 if ($arg_* ~* [A-Za-z0-9/]{100,}{0,2}) { return 403; } }日志分析策略记录所有带长加密参数的POST请求关联分析高频访问同一PHP文件的源IP在真实业务环境中建议结合以下多维检测手段静态特征检测HTTP头、URL模式动态行为分析命令执行序列加密流量指纹熵值检测通过本文介绍的技术方法安全研究人员可以有效地分析AntSword加密流量还原攻击者的操作过程。在实际工作中建议结合多种工具和技术进行交叉验证以确保分析结果的准确性。