必须先扫出所有php运行时实例,否则补丁打在空气上;php2shell漏洞只取决于php二进制或镜像版本是否低于修复版,dockerfile、docker-compose.yml、k8s yaml、ci脚本中隐藏的旧php实例是最易被漏掉的“影子运行时”。

必须先扫出所有 PHP 运行时实例,否则补丁打在空气上。 PHP2Shell 漏洞不看你用没用 Laravel 或 WordPress,只看你跑的 php 二进制或镜像是不是低于修复版本。Dockerfile、docker-compose.yml、K8s YAML、CI 脚本里藏着的旧 PHP,才是最常被漏掉的“影子运行时”。
扫 Dockerfile:FROM 行不能只看标签名
Dockerfile 里的 FROM php:7.4-apache 看似明确,但实际拉取的镜像可能早已过期——尤其是你没加 @sha256: 锁定哈希时。更危险的是 FROM ubuntu:20.04 后手动 apt install php7.4 这类写法,版本完全不可控。
- 用
grep -r "FROM.*php\|apt.*php\|yum.*php" . --include="Dockerfile*"扫所有 Dockerfile - 对每个匹配行,检查是否含
@sha256:;不含的,立刻用docker pull拉最新镜像并docker inspect查php -v - 特别注意
php:alpine镜像——Alpine 的包管理独立更新,php:8.2-alpine可能仍含未修复的 8.2.34
扫 docker-compose.yml:image 字段和 build.context 都要查
docker-compose.yml 里 image: myapp:latest 是个黑洞。它可能指向一个本地构建的镜像,而构建源头正是上面漏掉的 Dockerfile;也可能指向私有 registry 里一个长期没推新 tag 的旧镜像。
- 先跑
grep -r "image:.*php\|build:" . --include="docker-compose*.yml" - 对每个
image:值,用docker images | grep确认本地是否存在;不存在就docker pull后docker run --rm $IMAGE php -v - 对每个
build:块,提取context:路径,跳转过去再扫一遍 Dockerfile
扫 K8s YAML:initContainer 和 sidecar 容易成盲区
K8s 清单里,主容器用 PHP 8.3 不代表安全——initContainer 可能用 php:7.2-cli 做配置生成,sidecar 可能用 php:8.1-cgi 暴露健康检查端点。这些容器哪怕只运行几秒,只要用了漏洞版本,就能被利用。
- 用
grep -r "image:.*php" . --include="*.yaml" --include="*.yml" - 重点过滤
initContainers:和sidecars:(或containers:下非主业务的命名) - 对每个 image,执行
kubectl get pods -o jsonpath='{.items[*].spec.containers[?(@.image=="IMAGE")].imagePullPolicy}'确认是否Always;不是就可能卡在旧镜像
扫 CI 脚本:测试环境 PHP 版本 ≠ 生产环境
CI 脚本里 php:7.4 用于跑单元测试,看似无害——但它可能触发 CI runner 上的 PHP-FPM 实例(比如用 php-fpm -t 验证配置),而这个实例一旦被复用,就满足 PHP2Shell 的进程复用条件。
- 搜
.github/workflows/、.gitlab-ci.yml、Jenkinsfile中所有php、php-version、setup-php - 特别留意
services:块(GitHub Actions)或docker类型 job(GitLab),它们会启动长期存活的 PHP 容器 - CI 中用
php -v输出的版本,必须和生产一致;若不一致,要么升级 CI 环境,要么确保其 PHP 进程不暴露公网或不复用
最麻烦的不是找不到旧 PHP,而是找到后发现它嵌在某个没人敢动的 shell 脚本里,或者被硬编码在 vendor 包的 deploy hook 中。这时候别急着改代码,先用 strace -e trace=execve -f php your-script.php 2>&1 | grep php 抓真实调用链——PHP2Shell 的攻击面,永远在你“以为没在跑 PHP”的地方。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











