前几天,PHP出现了CVE-2026-109618、CVE-2026-109619这两个非常严重的漏洞,均可能在特定条件下被未经身份验证的远程攻击者利用,实现远程代码执行。该漏洞位于PHP核心层,不依赖某个特定CMS,所以,WordPress、Typecho、Drupal、Laravel、phpMyAdmin等使用受影响PHP版本运行环境的系统均需进行排查。
然后今天我看到 OpenAI 提供了一个技能叫 php2shell-checker。对于自己维护 PHP 网站的站长来说,太方便了!
它主要通过网站响应头里的 PHP 版本,或者服务器上的实际安装信息,判断是否需要关注 PHP2Shell 相关漏洞。工具不会发送漏洞利用请求,也不会尝试拿服务器权限。
项目地址:
https://github.com/openai/php2shell-checker
最方便的方法:直接交给 Codex
在 Codex 中输入项目提供的安装提示词:
$skill-installer install both skills from https://github.com/openai/php2shell-checker
项目提供两项技能:phpcheck-url 用于检查网站对外显示的 PHP 版本;phpcheck-server 用于有服务器访问权限时核查实际安装情况。
如果只是想先检查一下网站,可以输入:
$phpcheck-url check https://你的域名
如果 Codex 已经可以访问你的服务器,我更倾向于直接让它检查服务端:
$phpcheck-server 检查我的网站实际使用的 PHP 是否已修复 PHP2Shell 相关漏洞。请确认提供服务的 PHP-FPM、Apache 模块或容器,核对软件包完整版本、厂商公告和运行进程。先只检查,列出依据和处理建议,不要修改配置或升级。
服务端检查有个容易忽略的地方:终端里执行 php -v 看到的版本,可能和网站实际使用的 PHP 不一样。服务器技能会要求核对真正提供服务的安装位置、软件包,以及更新后工作进程是否重启。
不用 Codex,也可以直接运行
电脑上准备好 Git 和 Node.js,在终端依次执行:
git clone https://github.com/openai/php2shell-checker.git
cd php2shell-checker
node phpcheck.js "https://你的域名"
需要方便脚本读取的 JSON 结果,就加上:
node phpcheck.js "https://你的域名" --json
返回结果主要有三种:
| 结果 | 应该怎么理解 |
|---|---|
OK |
对外显示的版本达到工具记录的上游修复版本 |
POTENTIALLY VULNERABLE |
版本落在风险范围,需要进一步核查 |
UNKNOWN |
版本被隐藏、无法识别,或者检查失败 |
URL 检查只读取 X-Powered-By、Server 等响应头,不会分析网页内容,也不会自动跟随跳转,所以最好直接填写网站最终使用的 HTTPS 地址。
检测结果别直接当成安全结论
网站隐藏了 PHP 版本,显示 UNKNOWN 很正常,不能据此判断有没有漏洞。即使返回 OK,也只是响应头中的版本符合条件,没有验证服务器实际运行的程序。
反过来,版本偏旧也不一定代表没修复。有些 Linux 发行版会保留原来的 PHP 主版本号,把安全补丁回移进去,这就需要结合软件包完整版本和厂商公告判断。
截至今天也就是2026 年 10 月 26 日,PHP 官方针对这两项漏洞公布的上游修复版本是 8.2.35、8.3.36、8.4.27、8.5.12。另外,10 月 23 日官方又补充了 Session 上传进度相关风险说明,所以达到这些版本,也不代表后续公告可以忽略。
我的理解是,这个项目适合用来快速筛查和辅助核查。只有网址就先查响应头,有服务器权限就继续查实际软件包和运行进程,这样结果才更有参考价值。