哥斯拉GodzillaV4版本 WebShell木马(php)通信解密分析
字数 990 2025-09-01 11:26:02
哥斯拉Godzilla V4版本WebShell木马通信解密分析教程
一、概述
本教程详细讲解如何解密哥斯拉(Godzilla)WebShell V4版本的加密通信流量,包括请求和响应的解密过程。哥斯拉V4版本采用了多层加密技术:XOR异或加密 + GZIP压缩 + Base64编码 + URL编码。
关键特征:
- 默认加密密钥:
3c6e0b8a9c15224a - 加密流程:PHP序列化数据 → GZIP压缩 → XOR加密 → Base64编码 → URL编码
- 解密流程:URL解码 → Base64解码 → XOR解密 → GZIP解压
二、原始数据示例
HTTP请求示例
key=fL1tMGI4YTljMX78f8Wo%2FyhTV1ECWEn3M%2BF4ZGJ%2BL2Iz5Ep7TupOFkzm%2Bhr7%2BbAcKvtI%2BCsUKBS1fn9%2Fnwa3ZNEYTX8zalGLMAL5fx%2F9qXySfal9B9pnI%2FJrpKjeqP6o%2BK7yMmKqk8RSazUyMg%3D%3D
HTTP响应示例
72a9c691ccdaab98fL1tMGI4YTljMuYdeRizHEwZsv9K8azoTHj4H/p9TXpO4Cp6L5VT32Exb2o/bX8zYzY=b4c4e1f6ddd2a488
三、解密流程详解
1. 解密HTTP请求中的key参数
步骤1:URL解码
from urllib.parse import unquote
encoded_key = "fL1tMGI4YTljMX78f8Wo%2FyhTV1ECWEn3M%2BF4ZGJ%2BL2Iz5Ep7TupOFkzm%2Bhr7%2BbAcKvtI%2BCsUKBS1fn9%2Fnwa3ZNEYTX8zalGLMAL5fx%2F9qXySfal9B9pnI%2FJrpKjeqP6o%2BK7yMmKqk8RSazUyMg%3D%3D"
decoded_key = unquote(encoded_key)
# 结果: fL1tMGI4YTljMX78f8Wo/yhTV1ECWEn3M+F4ZGJ+L2Iz5Ep7TupOFkzm+hr7+bAcKvtI+CsUKBS1fn9/nwa3ZNEYTX8zalGLMAL5fx/9qXySfal9B9pnI/JrpKjeqP6o+K7yMmKqk8RSazUyMg==
步骤2:Base64解码
import base64
decoded_bytes = base64.b64decode(decoded_key)
步骤3:XOR解密
def xor_decrypt(data, key):
key_bytes = key.encode('utf-8')
decrypted = bytearray()
for i in range(len(data)):
decrypted.append(data[i] ^ key_bytes[i % len(key_bytes)])
return bytes(decrypted)
key = "3c6e0b8a9c15224a" # 哥斯拉V4默认密钥
xor_decrypted = xor_decrypt(decoded_bytes, key)
步骤4:GZIP解压
import gzip
try:
uncompressed = gzip.decompress(xor_decrypted)
command = uncompressed.decode('utf-8')
print("解密后的命令:", command)
except Exception as e:
print("解压失败:", e)
2. 解密HTTP响应体
响应体结构分析:
72a9c691ccdaab98 [XOR加密的GZIP数据] b4c4e1f6ddd2a488
- 前16字节和后16字节是随机填充数据
- 中间部分是真正的加密数据
解密步骤:
response = "72a9c691ccdaab98fL1tMGI4YTljMuYdeRizHEwZsv9K8azoTHj4H/p9TXpO4Cp6L5VT32Exb2o/bX8zYzY=b4c4e1f6ddd2a488"
# 1. 提取中间加密部分
encrypted_part = response[16:-16] # "fL1tMGI4YTljMuYdeRizHEwZsv9K8azoTHj4H/p9TXpO4Cp6L5VT32Exb2o/bX8zYzY="
# 2. Base64解码
decoded_response = base64.b64decode(encrypted_part)
# 3. XOR解密
xor_decrypted_response = xor_decrypt(decoded_response, key)
# 4. GZIP解压
try:
uncompressed_response = gzip.decompress(xor_decrypted_response)
response_data = uncompressed_response.decode('utf-8')
print("解密后的响应:", response_data)
except Exception as e:
print("响应解压失败:", e)
四、常见问题与解决方案
问题1:解密后出现乱码
现象: 类似KMKe2a``(PMVPJNQP/K,///(/I-I,I-OJM2W.(OQR0S3M-OKMeZ윟윟1Z的乱码
原因:
- 缺少GZIP解压步骤
- 检查十六进制开头是否为
1f8b08(GZIP魔数)
解决方案:
确保解密流程完整:Base64 → XOR → GZIP
问题2:响应解密失败
原因:
- 未正确处理响应体结构(前后16字节的随机数据)
- 密钥不正确
解决方案:
- 确保只解密中间部分数据
- 验证密钥是否正确(默认
3c6e0b8a9c15224a)
问题3:GZIP解压失败
原因:
- XOR解密不完整导致数据损坏
- 数据被截断
解决方案:
- 检查XOR解密步骤是否正确
- 验证Base64解码是否完整
五、完整Python解密脚本
import base64
import gzip
from urllib.parse import unquote
def xor_decrypt(data, key):
key_bytes = key.encode('utf-8')
decrypted = bytearray()
for i in range(len(data)):
decrypted.append(data[i] ^ key_bytes[i % len(key_bytes)])
return bytes(decrypted)
def decrypt_godzilla_v4(encrypted_data, is_response=False):
# 哥斯拉V4默认密钥
key = "3c6e0b8a9c15224a"
try:
# 如果是响应数据,需要去掉前后16字节的随机数据
if is_response:
encrypted_data = encrypted_data[16:-16]
# Base64解码
decoded = base64.b64decode(encrypted_data)
# XOR解密
xor_decrypted = xor_decrypt(decoded, key)
# GZIP解压
uncompressed = gzip.decompress(xor_decrypted)
# 返回解密后的明文
return uncompressed.decode('utf-8')
except Exception as e:
return f"解密失败: {str(e)}"
# 解密请求示例
encoded_key = "fL1tMGI4YTljMX78f8Wo%2FyhTV1ECWEn3M%2BF4ZGJ%2BL2Iz5Ep7TupOFkzm%2Bhr7%2BbAcKvtI%2BCsUKBS1fn9%2Fnwa3ZNEYTX8zalGLMAL5fx%2F9qXySfal9B9pnI%2FJrpKjeqP6o%2BK7yMmKqk8RSazUyMg%3D%3D"
decoded_key = unquote(encoded_key)
decrypted_command = decrypt_godzilla_v4(decoded_key)
print("解密后的命令:", decrypted_command)
# 解密响应示例
response = "72a9c691ccdaab98fL1tMGI4YTljMuYdeRizHEwZsv9K8azoTHj4H/p9TXpO4Cp6L5VT32Exb2o/bX8zYzY=b4c4e1f6ddd2a488"
decrypted_response = decrypt_godzilla_v4(response, is_response=True)
print("解密后的响应:", decrypted_response)
六、技术要点总结
- 加密流程:哥斯拉V4采用多层加密,理解每层的顺序是关键
- 密钥使用:XOR加密使用固定密钥,循环使用密钥字节进行异或
- 数据识别:
- GZIP压缩数据以
1f8b08开头 - 响应体包含前后16字节的随机数据
- GZIP压缩数据以
- 错误处理:解密失败时逐步检查每步结果,特别是Base64和GZIP步骤
通过本教程,您应该能够完整解密哥斯拉V4 WebShell的通信流量,分析攻击者执行的命令和服务器返回的信息。