新手友好!用Wireshark分析PHPStudy环境下的Webshell攻击:从可疑POST请求到CobaltStrike密钥提取
从零开始用Wireshark追踪PHPStudy环境中的Webshell攻击链最近在本地搭建PHPStudy环境测试时发现服务器响应异常缓慢查看日志发现大量可疑请求。作为刚接触网络安全的新手我决定用Wireshark这个网络显微镜一探究竟。本文将完整记录如何从一个可疑的POST请求开始逐步追踪到CobaltStrike密钥的全过程。1. 环境准备与初始流量捕获在开始分析之前我们需要准备好以下工具和环境PHPStudy集成环境建议使用最新版本Wireshark 3.6.0支持HTTP2解析的版本Python Requests库用于模拟攻击测试7-Zip处理加密压缩包关键配置步骤在PHPStudy中创建一个测试站点例如http://test.local确保Wireshark能捕获本地回环流量需要安装Npcap驱动设置Wireshark只监控PHPStudy相关的网络接口# 快速检查本地网络接口 ipconfig /all注意在Windows上分析本地流量时选择Npcap Loopback Adapter接口首次捕获流量时建议先进行基准流量采集——即在没有任何操作时记录1-2分钟的正常流量。这能帮助我们后续快速识别异常流量。2. 识别可疑HTTP POST请求在启动Wireshark约10分钟后我注意到一个异常的流量模式多个来自同一IP的POST请求间隔时间异常规律每37秒一次。通过以下过滤条件快速定位这些请求http.request.method POST http.user_agent contains python可疑请求特征分析特征项正常值观察值异常点User-Agent浏览器标识Python/3.9非浏览器客户端Content-Typeapplication/x-www-form-urlencoded缺失不符合常规表单提交请求长度通常1KB4.8KB过大且固定响应时间毫秒级3-5秒明显处理延迟在追踪该HTTP流时右键→Follow→TCP Stream发现请求体中包含特殊字符串AAA*VGhpcyBpcyBhIHRlc3Q*AAA这种以AAA*开头、*AAA结尾的编码格式引起了我的注意。通过查询公开漏洞数据库发现这与Laravel框架的CVE-2021-3129漏洞利用特征高度吻合。3. 解码漏洞利用流量针对发现的异常编码我们需要进行多层解码初步清理去除AAA*前缀和*AAA后缀字符替换将所有替换为00Base64解码对处理后的字符串进行解码import base64 def decode_payload(payload): # 示例解码函数 cleaned payload.replace(AAA*, ).replace(*AAA, ) cleaned cleaned.replace(, 00) return base64.b64decode(cleaned).decode(utf-8, errorsignore) sample AAA*VGhpcyBpcyBhIHRlc3Q*AAA print(decode_payload(sample)) # 输出: This is a test通过分析多个类似请求发现攻击者正在尝试写入Webshell。关键写入路径为POST /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.phpWebshell写入特征利用Laravel的phpunit组件漏洞文件写入路径通常包含/tmp/或/vendor/响应包会返回写入文件的MD5值4. 定位并分析Webshell活动成功写入Webshell后攻击者开始执行更多操作。通过以下过滤条件捕获相关流量http contains 14433 || http contains eval(发现一个关键的大马功能更强大的Webshell通信过程请求中包含密码参数pass14433响应使用特定格式加密前两位为随机字符剩余部分为Base64编码解密示例def decrypt_webshell(resp): # 示例去除前两位后Base64解码 return base64.b64decode(resp[2:]).decode(utf-8)在分析这些通信时注意到攻击者执行了以下可疑操作cd /d D:\phpstudy_pro\WWW\secretC:\Program Files\7-Zip\7z.exe x secret.zip -pP4Uk6qkh6Gvqwg3y这提示我们系统中可能存在一个名为secret.zip的加密压缩包。5. 提取并解密CobaltStrike密钥文件回到Wireshark中通过搜索PK文件头压缩文件特征定位到可疑数据包frame contains PK\x03\x04导出和修复压缩文件的步骤右键包含PK头的数据包→Follow→TCP Stream选择Raw格式保存为.bin文件使用WinHex或HxD编辑器删除PK头前后的Webshell代码确保文件以PK头开始并以\x50\x4B\x05\x06结束使用之前发现的密码P4Uk6qkh6Gvqwg3y解压后得到.cobaltstrike.beacon_keys文件——这是CobaltStrike后门的密钥文件。密钥文件结构解析00000000 00 00 00 01 00 00 00 20 [... ...] 00000008 9A 02 3B 92 1D 8B 6D E6 [..;...m.] 00000010 A7 5D 5E 5B 3D 4D 9D 9A [.]^[M..]6. 解密CobaltStrike通信流量获得Beacon密钥后我们可以解密攻击者的C2命令与控制通信。关键识别特征心跳包路径/en_US/all.js数据传输路径/submit.php?idxxxxxxCookie中携带加密元数据解密流程使用私钥解密元数据获取AES密钥用AES密钥解密实际通信内容解析解密后的数据通常是Base64编码实际操作中可以使用第三方工具如cobaltstrike_parser自动化这个过程python cs_parse.py -k beacon_keys -f traffic.pcap在分析解密后的流量中发现了攻击者执行的完整操作链系统信息收集用户名、网络配置、进程列表横向移动尝试扫描内网其他主机持久化后门安装计划任务、服务创建整个分析过程中最关键的突破点是早期那个Python Requests的POST请求。如果没有注意到这个异常点后续的Webshell和CobaltStrike活动很容易被当作正常流量忽略。这也提醒我们在日常监控中要特别关注非浏览器客户端的HTTP请求。