CVE-2024-4577是PHP CGI参数注入远程代码执行漏洞,非官方所谓“PHP2Shell”版本;其成因是Windows字符编码Best-Fit特性绕过CVE-2012-1823防护,影响PHP 8.1<8.1.29、8.2<8.2.20、8.3<8.3.8在Windows CGI模式下的部署,修复方式为升级至对应安全版本并配置cgi.fix_pathinfo=0。

没有“PHP2Shell”这个官方版本,也不存在名为 PHP2Shell 的 PHP 修复版本。
你可能是混淆了以下几种情况:
- CVE-2024-4577(PHP CGI 参数注入漏洞):该漏洞常被误称为“PHP2Shell”,因为它允许攻击者在特定 CGI 模式下通过参数注入触发命令执行,看似“把 PHP 变成 Shell”,但实际是漏洞利用效果,并非新版本名称。
- PHP 官方修复版本:此漏洞已在 PHP 8.1.29、8.2.20、8.3.8 及更高版本中正式修复(截至 2026 年 10 月,最新稳定版为 PHP 8.3.12 和 8.4.0 RC)。
-
错误拼写或误解:PHP 版本号始终是
主版本.次版本.修订号(如8.2.20),不存在2Shell这类命名。
✅ 正确做法:升级到含 CVE-2024-4577 修复的 PHP 官方版本
一、确认你是否受影响
运行以下命令检查当前版本和部署模式:
php -v ps aux | grep -i "php-fpm\|httpd\|apache\|nginx"
- 若使用 Apache mod_php 或 PHP-FPM:一般不受 CVE-2024-4577 影响(非 CGI 模式)。
- 若使用 Apache CGI / Windows IIS FastCGI / Nginx + cgi-fcgi:需立即升级。
二、升级到已修复版本(按环境选择)
-
Ubuntu/Debian(APT):
立即学习“PHP免费学习笔记(深入)”;
sudo apt update sudo apt install php8.2 php8.2-cli php8.2-fpm php8.2-mysql php8.2-curl sudo systemctl restart apache2 # 或 nginx && php8.2-fpm
-
CentOS/RHEL 8+(dnf + Remi):
sudo dnf install epel-release sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm sudo dnf module reset php sudo dnf module enable php:remi-8.2 sudo dnf install php php-cli php-fpm php-mysqlnd sudo systemctl restart php-fpm httpd
-
Windows(IIS 或 Apache CGI):
- 前往 https://www.php.cn/link/a9a2c061a1c2743d489c6863eae6725a
- 下载 PHP 8.2.20+ 或 8.3.8+ 的 Thread Safe (TS) ZIP 包(如
php-8.3.12-Win32-vs16-x64.zip) - 替换原
php/目录,更新php.ini,重点检查:extension_dir = "ext" extension=mysqli extension=openssl cgi.fix_pathinfo=0 ← 关键!缓解未升级时的风险
- 在 IIS 中重新注册 PHP 处理器映射,或重启 Apache。
三、验证是否修复
-
查看版本:
php -v # 应显示 ≥ 8.2.20 或 ≥ 8.3.8
-
检查漏洞是否可利用(简易测试):
curl -v "http://localhost/index.php?-d+allow_url_include%3don+-d+auto_prepend_file%3dphp://input" --data "<?php echo 'vulnerable'; ?>"
- 若返回
vulnerable→ 仍存在风险 - 若返回 400/404/500 或无输出 → 已缓解或修复
- 若返回
-
确认
phpinfo()页面中:- PHP Version 字段为修复版本
-
Server API 不是 “CGI/FastCGI”(最佳);若是,确保
cgi.fix_pathinfo=0
⚠️ 补充提醒
- 不要尝试“打补丁”或修改源码绕过——PHP 官方已明确要求升级版本。
-
cgi.fix_pathinfo=0是临时缓解措施,不能替代升级。 - Docker 用户请更新
Dockerfile中的FROM php:8.3-apache等基础镜像,并重建容器。 - ThinkPHP、Laravel 等框架本身不修复该漏洞,底层 PHP 升级才是关键。
如你看到“PHP2Shell”出自某教程、扫描报告或安全通告,建议核对该来源是否将漏洞代号误写为版本名。真正的修复路径只有一条:升到 PHP 官方发布的修复版本。



















