1. 项目概述:从一次实战告警说起
那天下午,安全运营中心的告警大屏上突然弹出一条高置信度的Webshell连接告警,目标指向一台对外提供Web服务的业务服务器。告警引擎的标签显示为“哥斯拉变种”,但具体的payload特征与我们已知的哥斯拉家族样本库对不上。这立刻引起了我的警觉。在攻防对抗日益激烈的今天,攻击者早已不满足于使用公开的、特征明显的Webshell管理工具,对“哥斯拉”、“冰蝎”这类利器进行深度定制和混淆,已成为绕过传统WAF和IDS检测的常规操作。我们手头正好捕获了这次攻击事件的完整网络流量包(pcap文件),这次分析的目标,就是把这个“某修改版哥斯拉”的流量外衣一层层剥开,还原攻击者的操作链路,并提炼出可用于后续检测的精准特征。这不仅仅是分析一个Webshell,更是理解当前攻击手法演进趋势的一次绝佳实战。
“观成科技”在这个上下文中,可以理解为一种视角或目标,即“观察并达成对某修改版哥斯拉Webshell流量的深度分析技术”。整个分析过程将围绕这个变种Webshell展开,涉及流量捕获、协议解析、payload解码、行为还原等核心环节。无论你是安全分析师、应急响应工程师,还是对Webshell攻防感兴趣的研究者,这篇从实战流量出发的深度拆解,都将为你提供一套清晰的排查思路和可复现的分析方法。我们会用到Wireshark、自定义脚本以及一些基础的Web知识,目标是让你看完后,能独立完成对类似加密混淆流量的分析工作。
2. 分析环境搭建与核心思路拆解
工欲善其事,必先利其器。面对一个经过修改的、加密的Webshell流量,盲目的搜索字符串是徒劳的。我们的核心思路是“先通后解,动态关联”。所谓“先通”,是指先理清通信的脉络,找到HTTP请求/响应配对,确定哪个数据包是攻击指令,哪个是执行结果。“后解”则是在明确通信模型后,集中精力攻克payload的加密与编码难关。
2.1 工具准备与初始过滤
首先,你需要一个稳定的分析环境。我通常在虚拟机中配置,主要工具如下:
- Wireshark :流量分析的不二之选,版本越新越好,其对HTTP2、TLS等协议的解码支持更完善。
- Burp Suite Professional :用于本地搭建代理,重放、调试请求,尤其是修改请求参数测试解码逻辑。社区版功能受限,但用于基础重放也勉强够用。
- Python 3环境 :安装
requests,base64,hashlib,Crypto(或cryptography) 等库。我们将编写脚本模拟加解密过程。 - 文本编辑器/IDE :如VS Code,用于编写和调试脚本。
- 一个本地Web测试环境 :例如PHPStudy、Docker运行的Apache+PHP,用于安全地重放和验证Webshell行为。
拿到pcap文件后,第一步不是直接看内容,而是做过滤,缩小目标范围。因为业务服务器通常流量繁杂,我们需要快速定位到可疑的HTTP会话。
- 过滤HTTP流量 :在Wireshark过滤栏输入
http,这样可以快速列出所有HTTP协议的数据包。但注意,如果攻击者使用了HTTPS,且我们没有私钥,则无法直接解密内容。这时需要关注TLS握手包,并结合上下文(如目标IP、端口、时间)来判断。本例我们假设为HTTP流量,或已通过其他手段解密了HTTPS。 - 定位可疑会话 :在过滤后的数据包列表中,寻找那些请求体(
POST数据)看起来是乱码或长字符串、响应体也是类似乱码的会话。通常,Webshell的请求路径会比较特殊,可能藏在某个正常路径下,如/upload/images/xxx.php,或者直接是短小奇怪的路径如/c.php。你可以使用http.request.uri contains “.php”或http.request.uri contains “.jsp”等过滤条件辅助查找。 - 追踪TCP流 :一旦找到一对可疑的请求和响应,右键点击该请求包,选择
追踪流->TCP流。这是最关键的一步,Wireshark会将这个会话的所有数据按顺序拼接起来,并以清晰的方式展示请求和响应。请务必将“显示和保存数据为”设置为“原始数据”,这样我们才能看到最本真的字节流,避免Wireshark的自动解码干扰。
注意:很多修改版Webshell会自定义通信格式,可能不完全符合标准HTTP,导致Wireshark无法正确识别为HTTP协议。此时,你需要通过目标端口(如80,443)、TCP载荷长度和模式来人工判断。可以尝试过滤
tcp.port == 80然后逐个查看TCP载荷。
2.2. 哥斯拉流量通用模型与修改版识别
标准的哥斯拉(Godzilla)Webshell流量具有鲜明的特征,理解它有助于我们发现“修改点”。其核心模型是:
-
请求(Request) :
- Pass(密码) :通常是一个固定的密码参数,用于Webshell验证。
- 数据(Payload) :攻击指令(如
whoami,ls)经过加密和Base64编码后,作为一个参数(如z0,id等)传递。 - 其他元数据 :可能包含加密模式标识、时间戳等。
-
响应(Response) :
- 密文结果 :服务器执行命令后的输出,同样经过加密和Base64编码,放在HTTP响应体中返回。
- 可能包含状态码或标识头 。
在Wireshark的TCP流视图中,一个典型的标准哥斯拉请求可能看起来像这样:
POST /shell.php HTTP/1.1
...
Pass=godzilla&z0=QkFTRTY0X0VOQ09ERURfUEFZTE9BRA==...
响应体则是一长串Base64字符串。
如何识别这是“修改版”?
- 参数名变化 :
Pass、z0等关键参数名被替换,例如变成了key,data,c </


1153

被折叠的 条评论
为什么被折叠?



