PHP2shell漏洞怎么排查:自查与日志取证

PHP2shell漏洞怎么排查?排查是指两件事:先确认你跑的是不是受影响版本,再确认有没有已经被利用的痕迹。卓创源码网(zhuochuangyun.cn)把自查路径、日志信号和取证口径整理成一份能照着走的清单。

PHP2shell漏洞自查方法是什么?十分钟内确认版本

能登服务器的直接查运行时版本:php -v 看到的是命令行版本,线上 Web 用的可能是另一套,最好用带鉴权的 phpinfo 页面看 Server API 和版本号。

WordPress 用户在后台「工具 → 站点健康 → 信息 → 服务器」里能看到 PHP 版本。虚拟主机和托管环境看控制面板的 PHP 版本选择项,或者直接问服务商。

然后按分支对照:8.5 低于 8.5.12、8.4 低于 8.4.27、8.3 低于 8.3.36、8.2 低于 8.2.35,8.1 及更早全部受影响。有个坑要注意:Linux 发行版和 LTS 厂商把补丁回补进自己的包,版本号可能没变,所以不能只看版本数字,要对着厂商安全公告确认这个包是否包含这两个 CVE 的修复。

排查范围要往外扩一圈。容易被漏的是那些不面向业务但对外提供 Web 服务的 PHP:phpMyAdmin、Zabbix Web、Nagios、Cacti、监控后台、防火墙与 VPN 的 Web 管理界面、CI 构建环境、预发和压测环境、第三方交付的整套系统。

PHP2shell漏洞日志特征有哪些?四类信号要交叉比对

官方和几家安全机构给的信号基本一致,优先看这四类:

一是异常 multipart 请求。特点是字段数或分片数极多、大量空文件字段、字段名层层嵌套、缺失或伪造 Content-Length,而且可以打到任意 .php 路径,不需要特定功能入口。

二是内存耗尽报错激增。日志里出现大量 Allowed memory size exhausted,且时间点对得上外部请求。

三是 HTTP 500 集中爆发。Wiz 特别提到「异常 multipart 请求之后紧跟成片的 500 响应」这个组合。

四是 PHPSESSID 响应 cookie 异常偏大或格式异常。这是 109619 那条内存泄露路径的特征——被释放的内存可能通过这个 cookie 回到客户端,里面可能带着别的请求里的口令、令牌、API 密钥和证书。

PHP2shell漏洞日志特征的关键在于交叉比对。单看内存报错,那是日常运维噪音;单看 500 爆发,那可能是正常业务波动;两者和异常 multipart 请求在时间上叠在一起,指向性就完全不同了。

排查动作 7 步,顺序别乱

  1. 先留证再动手:把 Web 访问日志、PHP 与 FPM 错误日志、应用日志、主机日志全部归档,官方明确要求在重启或重建前保留日志
  2. 清点所有对外提供 Web 服务的 PHP 实例,记录版本、SAPI 类型、位置、是否公网可达
  3. 比对修复版本线,低于对应分支修复版本的一律标记为暴露面
  4. 从 10 月 20 日之前开始查日志,不要只查披露之后,泄露到打补丁之间已经有一段时间
  5. 按异常请求、内存报错、500 爆发、PHPSESSID 异常四类信号做交叉匹配
  6. 在主机侧核对子进程派生、Web 目录新增文件、计划任务与账号变化
  7. 任何一条命中就按可能失陷处理:隔离主机、轮换凭据、不要急着清理覆盖现场

PHP2shell漏洞入侵痕迹在哪?主机侧要核对什么

有几类指向性比较强。

第一类,Web 进程派生出 shell、解释器或下载工具,命令行里出现 /dev/tcp/、fsockopen、mkfifo。

第二类,web 目录里新增或近期被改动的 PHP 文件、陌生的插件和主题。

第三类,新增的 cron、计划任务、systemd 服务、账号或 SSH 授权公钥。

第四类,php.ini、.user.ini、.htaccess 里 autoprepend_file 被改,或者出现了不该有的 PHP 扩展。

第五类,Web 进程向陌生的外部地址发起出站连接,尤其是那种连上之后接着出现交互式 shell 的模式。

还有一条常被忽略:PHP web shell 可以完全不派生进程,所以 EDR 没告警不等于没被进。做 PHP服务器被入侵排查时,这一项要靠人工比对文件与任务清单,不能只依赖工具的告警列表。

确认被入侵之后,第一步该做什么?

不要第一时间删文件、重装、格式化。官方建议的第一动作是隔离主机并保留日志,因为清理动作会破坏取证现场,事后很难证明攻击范围。

隔离之后做两件事:一是轮换凭据。运行进程能读到的都算暴露——数据库口令、API 密钥、会话密钥、云访问密钥、站点使用的证书。官方在多个通告里都强调这一点,因为内存泄露路径泄露的就是这些东西。

二是查清横向范围。攻击者拿到的是 Web 工作进程权限,通常能读数据库配置、连到内网其他服务。查 Web 目录新增文件、计划任务、新账号、异常出站连接,把访问过的内网服务列出来。

关于可疑的利用代码:网上已经有自称 PHP2shell 利用工具的流传,多家机构明确表示没有验证过任何一份可用,这类来路不明的文件经常夹带恶意软件。看技术细节看官方公告和 CERT-EU、NetSPI、Huntress 的公开分析就够了,不要下载来路不明的样本去跑。

哪些位置最容易漏掉?

按国内站点的实际情况排,漏得最多的基本是这五类:

一是老站的独立 PHP。营销页、活动页、旧版官网常年挂着,可能跑着 7.x,域名还挂着泛解析,权重不高没人管。

二是运维与数据库工具。phpMyAdmin、Zabbix Web、监控面板、网管后台,很多设备固件里直接内置了 PHP 运行时,管理员根本不知道这台设备上有 PHP。

三是容器和预发环境。预发常常和生产共用一套数据库凭据,防护最弱,还经常通过公网端口暴露。

四是第三方交付的系统。代建站、外包系统、厂商提供的整套方案,PHP 版本由对方决定,交付文档里通常不写。

五是仍在运行的 EOL 分支。8.1 及更早拿不到官方安装包,最容易被以「先这样跑着」的方式长期搁置。

做 PHP远程代码执行漏洞排查时,判断标准要按「对外提供 Web 服务」这个标准来,不要按「我们的主站是什么技术栈」来判断——主站是 Java 写的,不代表这台机器上没有 PHP。

信号与处置对照,看完直接分工

观察到的信号指向的问题建议动作
异常 multipart 请求:字段数/分片数极多、字段名深层嵌套、无可用 Content-Length尝试触发 109618 的内存耗尽路径立即升级版本,同时在网关层限制请求体积、字段数、分片数与嵌套深度
Allowed memory size exhausted 报错激增已有请求在冲击内存上限,可能已进入中断异常路径升级版本并回溯同一时段的其他日志
异常 multipart 请求后紧跟成片 HTTP 500高度疑似利用尝试或利用成功按可能失陷处理:隔离主机、留存日志、轮换凭据
PHPSESSID 响应 cookie 异常偏大或格式异常109619 的内存泄露路径,内存内容可能回传客户端立即轮换所有运行进程可读到的凭据与证书
Web 进程派生 shell/解释器/下载工具,命令行出现 /dev/tcp/、fsockopen、mkfifo已获得代码执行能力隔离主机并启动事件响应,不要自行清理覆盖现场
Web 目录出现新增或近期改动的 PHP 文件、陌生插件主题、autoprepend_file 被改已落地后门留存证据后清理并全面排查横向范围

如果你手上的 PHP 源码需要重新部署环境、核对版本要求,或者想按模块挑一套维护状况更好的成品源码,可以先逛卓创源码网按品类对比,再对照[卓创源码网搭建服务价格表](https://zhuochuangyun.cn/zcymwdjfwjgb/)确认部署与二次开发的工作量。拿不准该选哪套,加微信 ynzckj6666 或 QQ 3894381266,说明你的站点技术栈和当前 PHP 版本就行。

© 版权声明
THE END
喜欢就支持一下吧
点赞122 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容