📈 GH Trending Explorer 🎲 Surprise me

← all repos

Qsnh / php2shell-fixed

git clone https://github.com/Qsnh/php2shell-fixed.git

宝塔面板(BT Panel)上已停止维护的 PHP 版本(5.4 – 8.1)的 PHP2Shell(CVE-2026-109618 / CVE-2026-109619)修复包。仓库里有打好补丁的源码包,以及一键完成编译、替换、回滚的脚本。

+46
stars, 24h · #853
+46
stars, 7 days · #4,376
+46
stars, 30 days · #14,021
46
★ total · +46% this week
4
forks · 0 open issues

Star history starts 2026-10-23; the chart appears after the second daily snapshot.

LanguageShell
License—
Created2026-10-22 (1d ago)
Last push1d ago
Watchers1
OwnerUser

Links

README excerpt
# php2shell-fixed
> 联系方式:有事情可以联系 
宝塔面板(BT Panel)上已停止维护的 PHP 版本(5.4 – 8.1)的 **PHP2Shell(CVE-2026-109618 / CVE-2026-109619)修复包**。仓库里有打好补丁的源码包,以及一键完成编译、替换、回滚的脚本。
> Patched PHP source tarballs and a one-command upgrade script that fix PHP2Shell (CVE-2026-109618 / CVE-2026-109619) for end-of-life PHP 5.4 – 8.1 builds installed by BT Panel (宝塔).
---
## 漏洞简介
2026-10-21,PHP 官方披露了两个漏洞,CVSS v4.0 评分都是 9.2,**无需登录即可远程执行代码**:
| CVE | 说明 |
|---|---|
| CVE-2026-109618 | 内存耗尽时,请求数据只初始化了一半,清理阶段被当作有效数据使用,导致远程代码执行 |
| CVE-2026-109619 | 上一个请求留下的内部状态在内存释放后仍被保留,被同一 worker 的下一个请求使用,导致远程代码执行 |
PHP-FPM、Apache mod_php、php-cgi 等处理 Web 请求的方式都受影响。PHP 官方只为 8.2 – 8.5 发布了修复版本(8.2.35 / 8.3.36 / 8.4.27 / 8.5.12)。8.1 及更早的版本没有正式修复版:官方只给 7.4、8.0、8.1 发了源码补丁,7.3 及以下什么都没有。
官方公告: 
## 支持的版本
| 宝塔 PHP 版本 | 升级后 | 补丁来源 | 源码包 |
|---|---|---|---|
| 5.4.x | 5.4.45 | 基于官方 7.4 补丁移植到 PHP5 引擎(**非官方**) | `php-5.4.45-cve2026.tar.gz` |
| 5.5.x | 5.5.38 | 基于官方 7.4 补丁移植到 PHP5 引擎(**非官方**) | `php-5.5.38-cve2026.tar.gz` |
| 5.6.x | 5.6.40 | 基于官方 7.4 补丁移植到 PHP5 引擎(**非官方**) | `php-5.6.40-cve2026.tar.gz` |
| 7.0.x | 7.0.33 | 基于官方 7.4 补丁移植(**非官方**) | `php-7.0.33-cve2026.tar.gz` |
| 7.1.x | 7.1.33 | 基于官方 7.4 补丁移植(**非官方**) | `php-7.1.33-cve2026.tar.gz` |
| 7.2.x | 7.2.34 | 基于官方 7.4 补丁移植(**非官方**) | `php-7.2.34-cve2026.tar.gz` |
| 7.3.x | 7.3.33 | 基于官方 7.4 补丁移植(**非官方**) | `php-7.3.33-cve2026.tar.gz` |
| 7.4.x | 7.4.33 | PHP 官方补丁 `712e60f9ed` | `php-7.4.33-cve2026.tar.gz` |
| 8.0.x | 8.0.30 | PHP 官方补丁 `82f8f31b16` | `php-8.0.30-cve2026.tar.gz` |
| 8.1.x | 8.1.34 | PHP 官方补丁 `1d7dec178a` | `php-8.1.34-cve2026.tar.gz` |
- 每个源码包都是 **php.net 官方发布的源码**(SHA256 与 php.net 公布值一致),加上 `patches/` 目录里对应的补丁。包内的 `CVE-2026-PATCH/` 目录也附了补丁原文
- 升级目标是各分支的最后一个版本,所以同时也会带上这些年已发布的其他安全修复
- 同一大版本内升级,扩展 ABI 不变,redis、swoole_loader 等已安装的扩展**不需要重新编译**
- **PHP 8.2 及以上**:直接在宝塔面板里更新到官方修复版即可,不需要本仓库
> ⚠️ 5.4 – 7.3 的补丁是从官方 7.4 补丁移植的,**没有经过 PHP 官方审核**(其中 5.4 – 5.6 是移植到 PHP7 之前的老引擎,差异更大)。移植细节见下文的补丁说明。介意的话请优先升级到 PHP 8.2+。
## 支持的系统
脚本只依赖 bash、coreutils、gcc/make 这些基础工具,用服务器上**原来编译 PHP 的环境和编译参数**重新编译,不绑定具体发行版。
| 系统 | 编译器 | 实测情况 |
|---|---|---|
| Ubuntu 16.04 | gcc 5.4 | ✅ x86_64:10 个版本全流程 + 回归测试;ARM64:7.0 – 8.1 全流程,5.4 – 5.6 编译 + 回归测试 |
| CentOS 7 | gcc 4.8.5 | ✅ x86_64:10 个版本全流程 + 回归测试;ARM64:7.0 – 8.1 全流程 |
| Debian、Ubuntu 18.04+、CentOS 8 / Rocky / AlmaLinux 等 | — | 未实测,理论上可用 |
"理论上可用"的前提是:宝塔当初能在这台服务器上把这个 PHP 编译出来。如果之后系统升级过(比如 openssl 被换掉了),`build` 这一步可能会失败。失败时线上 PHP 不受任何影响,把 `/www/server/php-cve2026/logs/` 里的日志拿去排查即可。
## 快速开始
以 PHP 7.4 为例,其他版本把 `74` 换成 `54` / `55` / `56` / `70` / `71` / `72` / `73` / `80` / `81`。所有命令都用 root 执行。
### 1. 下载脚本和源码包
只需要下载**脚本**和**你要升级的版本对应的源码包**,放在同一个目录里:
 [code] 
CentOS 7 的 `sha256sum`(coreutils 8.22)不支持 `--ignore-missing`,改用下面这条,只校验已下载的文件:
 [code] 
服务器访问 GitHub 很慢的话,可以在本地电脑下载好,再用宝塔面板的"文件"功能上传到 `/root/phpfix`。
### 2. 确认哪些站点在用哪个 PHP
 [code] 
### 3. 编译(不影响线上)
 [code] 
大约需要 10 – 40 分钟,看到"编译完成,补丁自检通过"就成功了。这一步失败的话线上不受任何影响,日志在 `/www/server/php-cve2026/logs/`。
可用内存不足 1G 时,建议先加一块临时 swap:
 [code] 
### 4. 安装(建议在业务低峰期)
 [code] 
脚本会依次:
1.