用于 HestiaCP 服务器的只读 WordPress 安全扫描器。检测所有托管站点上的 wp2shell 入侵指标(CVE-2026-63030 / CVE-2026-60137)——按用户发送的电子邮件报告、与干净 WordPress 版本的核心文件差异对比、PHP/JS/htaccess/图片分析,以及可选的通过 Claude API 进行的 AI 评估。
<div align="center">
# 🛡️ wp2shell-Hestia-Scanner
<p>
<a href="#english">🇬🇧 英文</a>
|
<a href="#greek">🇬🇷 希腊语</a>
</p>




**适用于 HestiaCP 服务器的只读 WordPress 安全扫描器。**
检测所有托管站点中的 wp2shell 入侵指标——支持按客户发送电子邮件报告、核心文件差异比对、SHA256 网页后门检测、风险评分以及可选的 AI 评估。
> ⚠️ **安全版本:** WordPress **6.8.6 / 6.9.5 / 7.0.2** 或更高版本。
> 这些脚本**绝不会修改任何内容**——全程只读。
</div>
---
<a name="english"></a>
# 🇬🇧 英文
## 什么是 wp2shell?
wp2shell 是 WordPress 核心中的一个预认证远程代码执行(RCE)漏洞链,于 **2026 年 7 月 17 日**披露。只需向默认安装发送单个匿名 HTTP 请求,即可创建一个恶意管理员账户并在服务器上执行任意代码。
该漏洞链组合了:
- **CVE-2026-60137** — `WP_Query` 的 `author__not_in` 参数存在 SQL 注入
- **CVE-2026-63030** — REST API `/wp-json/batch/v1` 端点存在路由混淆
被入侵的站点会出现一个恶意管理员账户,其登录名前缀为 `wp2_`,邮箱为 `@wp2shell.invalid`。
更多信息:<https://wp2shell.com>
---
## 仓库内容
| 文件 | 用途 |
|------|---------|
| `wp2shell-scan.sh` | 快速的服务器范围 IoC 扫描器——彩色终端输出、按站点风险评分、自动保存报告至 `/root/` |
| `wp2shell-report-per-user.sh` | 完整扫描器——按 HestiaCP 用户发送电子邮件报告、核心文件差异比对、SHA256 网页后门检测、AI 评估、风险评分 |
| `known_shells.sha256` | 已知网页后门哈希数据库(SHA256)——运行时自动获取 |
---
## 扫描器检测内容
### 数据库 / 用户检查
| 检查项 | 严重级别 |
|-------|----------|
| WordPress 版本与安全版本对比 | HIGH / OK |
| 带有 `wp2_` 前缀或 `@wp2shell.invalid` 邮箱的账户 | CRITICAL |
| 披露日期(2026 年 7 月 15 日)之后创建的管理员 | MEDIUM |
| 用户 ID 序列断号(被删除的恶意管理员痕迹) | MEDIUM |
| 孤立的 `wp_usermeta` 行 | MEDIUM |
| 被投毒的 `oembed_cache` / `customize_changeset` 行 | CRITICAL |
| 被篡改的 WP 选项(`upload_path`、`auto_prepend_file`、`siteurl`) | CRITICAL / HIGH |
### 核心文件完整性
| 检查项 | 严重级别 |
|-------|----------|
| `wp core verify-checksums` 与 wp.org 校验对比 | HIGH |
| 与下载的干净核心进行逐行 `diff -U5` 对比 | CRITICAL / HIGH / OK |
| 干净核心中不存在的额外文件(显示内容 + 元数据) | CRITICAL / HIGH |
### 文件分析
| 检查项 | 严重级别 |
|-------|----------|
| `uploads/` 中的 PHP 文件 | CRITICAL |
| 额外的 PHP 扩展名(`.php7` `.phtml` `.phar` `.php5`) | HIGH |
| **与已知网页后门数据库进行 SHA256 匹配**(WSO、FilesMan、b374k、p0wny…) | CRITICAL |
| 在 `SINCE_DATE` 之后被修改**并且**匹配可疑模式的 PHP 文件——内联显示匹配行 | CRITICAL / HIGH |
| 含有可疑模式但未在近期修改的 PHP 文件 | LOW |
| 在 `SINCE_DATE` 之后被修改且匹配混淆模式的 JS/HTML 文件 | MEDIUM |
| **外部 C2/数据外泄 URL**(pastebin、ngrok、Discord webhooks、bit.ly…) | CRITICAL |
| `.htaccess` 危险指令(`AddType`、`auto_prepend_file`、外部 `RewriteRule`) | HIGH |
| 在 `SINCE_DATE` 之后被修改的 `.htaccess` | MEDIUM |
| 包含 PHP 载荷的多语言图像(`.jpg`/`.png` 中存在 `<?php`…) | CRITICAL |
| 暴露的备份/配置文件(`wp-config.php.bak`、`*.sql`…) | MEDIUM |
### 持久化
| 检查项 | 严重级别 |
|-------|----------|
| 包含 `curl`/`wget`/`php`/`base64` 的用户 crontab 条目 | HIGH |
| 引用站点路径的系统 cron 文件 | MEDIUM |
### 风险评分
每个站点都会获得一个 **0–100 的风险评分**,并逐项列出所有促成该评分的发现:
```
+------------------------------------------+
| RISK SCORE: 96/100 COMPROMISED |
+------------------------------------------+
+40 wp2shell fingerprint account
+30 PHP file(s) inside uploads/
+20 Vulnerable WordPress version
+6 Core checksum failure
```
| 评分 | 标签 |
|-------|-------|
| 0–20 | 可能干净 |
| 21–40 | 低风险 |
| 41–60 | 中风险 |
| 61–80 | 高风险 |
| 81+ | **已被入侵** |
---
## 系统要求
- 运行 **HestiaCP** 的 Linux 服务器
- **bash** 4.0+
- 已全局安装 **[WP-CLI](https://wp-cli.org/)**,命令为 `wp`
- `root` 访问权限
- `sendmail`(用于发送电子邮件报告)
- `python3`(用于 AI 评估的 JSON 处理)
- `curl`、`sha256sum`、`file`、`strings`、`unzip`
### 安装 WP-CLI(如果缺失)
```bash
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar && sudo mv wp-cli.phar /usr/local/bin/wp
```
---
## 一行命令安装与运行
### 快速 IoC 扫描
```bash
curl -fsSL https://raw.githubusercontent.com/BytesPulse-OE/wp2shell-Hestia-Scanner/main/wp2shell-scan.sh | sudo bash
```
### 完整扫描并发送按客户分组的电子邮件报告
```bash
curl -fsSL https://raw.githubusercontent.com/BytesPulse-OE/wp2shell-Hestia-Scanner/main/wp2shell-report-per-user.sh \
-o wp2shell-report-per-user.sh && sudo bash wp2shell-report-per-user.sh
```
> **注意:** 完整扫描器在启动时会询问交互式问题(AI 评估、保存报告、日期阈值)。先下载再运行可确保提示正常工作。
---
## 使用方法
### wp2shell-scan.sh — 快速服务器范围扫描
```bash
sudo bash wp2shell-scan.sh
```
扫描 `/home/*/web/*/public_html/` 下的所有 WordPress 安装,运行所有检查,将彩色输出打印到终端,并将完整报告保存到 `/root/wp2shell-report-YYYYMMDD-HHMMSS.txt`。
启动时会询问一个可选的自定义日期阈值(默认:`2026-07-15`)。
### wp2shell-report-per-user.sh — 完整扫描并发送电子邮件报告
```bash
sudo bash wp2shell-report-per-user.sh
```
启动时会询问三个问题:
```
[AI EVALUATION] Use AI evaluation for ambiguous files? [y/N]
[SAVE REPORT] Save a full report file for later review? [y/N]
[DATE THRESHOLD] Use a different date? Leave blank to keep default [YYYY-MM-DD]:
```
**始终以 `DRY_RUN=1` 启动**(默认值)——电子邮件仅在屏幕上预览,不会实际发送。只有确认输出无误后,才将其更改为 `DRY_RUN=0`。
---
## 配置
### wp2shell-scan.sh
| 变量 | 默认值 | 说明 |
|----------|---------|-------------|
| `WEB_ROOT` | `/home` | HestiaCP Web 根目录 |
| `SINCE_DATE` | `2026-07-15` | “最近修改”时间阈值 |
| `WP` | `wp` | WP-CLI 路径 |
### wp2shell-report-per-user.sh
| 变量 | 默认值 | 说明 |
|-----------|---------|-------------|
| `DRY_RUN` | `1` | `1` = 仅预览,`0` = 发送电子邮件 |
| `SEND_ONLY_IF_ISSUES` | `0` | `1` = 站点干净时跳过电子邮件 |
| `SINCE_DATE` | `2026-07-15` | “最近修改”时间阈值 |
| `MAIL_FROM` | `security@<hostname>` | 信封发件人 |
| `CORE_CACHE` | `/root/wp2shell-cores` | 干净核心缓存目录 |
| `ANTHROPIC_API_KEY` | *(空)* | 用于 AI 评估的 Claude API 密钥 |
---
## AI 评估(可选)
对于仅靠模式无法分类的模糊差异,扫描器会将差异发送到 **Claude API**(`claude-sonnet-4-6`)并返回判定结果:`DANGER`、`SUSPICIOUS`、`REVIEW` 或 `OK`,附带一句说明。AI **仅**在灰色地带使用——明确的情况无需任何 API 调用即可即时分类。
在脚本中设置密钥,或在运行前导出:
```bash
export ANTHROPIC_API_KEY='sk-ant-api03-...'
sudo -E bash wp2shell-report-per-user.sh
```
API 密钥:<https://console.anthropic.com>——与 claude.ai 订阅相互独立。
### 没有 API 密钥?使用浏览器分析器
将扫描输出粘贴到 Claude.ai 上的 **wp2shell Report Analyzer** artifact 中——它可以直接在浏览器中执行相同的 AI 评估,无需您自己的密钥。
---
## 输出格式
### 严重级别
| 标签 | 颜色 | 含义 |
|-------|-------|---------|
| `[CRITICAL]` | 🔴 粗体红色 | 活跃的入侵指标——立即处理 |
| `[HIGH]` | 🔴 红色 | 强烈指标——紧急审查 |
| `[MEDIUM]` | 🟡 黄色 | 可疑——需要调查 |
| `[LOW]` | 🔵 蓝色 | 低优先级——可能是误报 |
| `[INFO]` | ⚫ 灰色 | 信息性 |
| `[OK]` | 🟢 绿色 | 干净 / 符合预期 |
### 核心差异示例
```
┌─ MODIFIED: wp-includes/load.php
│ [CRITICAL] Assessment (patterns): executable/obfuscated pattern in added lines
│ +20 Core file modified with dangerous pattern
│
│ ORIGINAL: /root/wp2shell-cores/7.0.2-el/wp-includes/load.php
│ SITE: /home/user/web/example.gr/public_html/wp-includes/load.php
│ @@ -212,5 +212,6 @@
│ - $loaded = true;
│ + $loaded = true;
│ + eval(base64_decode('aGVsbG8='));
└──────────────────────────────────────
```
---
## 注意事项
- 扫描器**绝不会修改**任何内容。可在生产服务器上安全运行。
- 将 WordPress 更新到已修补版本可以关闭漏洞,但**不会清理**已被入侵的站点。如果发现入侵指标,请从干净的备份中恢复。
- `CORE_CACHE` 目录(`/root/wp2shell-cores/`)会在多次扫描之间复用。删除它可强制重新下载。
- `known_shells.sha256` 哈希数据库每天自动刷新一次。
---
## 许可证
GPL-3.0 — 请参阅 [LICENSE](https://github.com/bytespulse-oe/wp2shell-hestia-scanner/blob/main/LICENSE)
---
## 致谢
由 **[BytesPulse](https://bytespulse.gr)** 针对 wp2shell 漏洞披露(2026 年 7 月)而开发。
CVE 信息:<https://wp2shell.com>
---
---
<a name="greek"></a>
# 🇬🇷 希腊语
## 什么是 wp2shell?
wp2shell 是 WordPress 核心中的一个预认证远程代码执行(RCE)漏洞链,于 **2026 年 7 月 17 日**披露。只需向默认安装发送单个匿名 HTTP 请求,即可创建一个恶意管理员账户并在服务器上执行任意代码。
该漏洞链组合了:
- **CVE-2026-60137** — `WP_Query` 的 `author__not_in` 参数存在 SQL 注入
- **CVE-2026-63030** — REST API `/wp-json/batch/v1` 端点存在路由混淆
被入侵的站点会出现一个恶意管理员账户,其登录名前缀为 `wp2_`,邮箱为 `@wp2shell.invalid`。
更多信息:<https://wp2shell.com>
---
## 仓库内容
| 文件 | 用途 |
|--------|--------|
| `wp2shell-scan.sh` | 快速的服务器范围 IoC 扫描器——彩色终端输出、按站点风险评分、自动保存报告至 `/root/` |
| `wp2shell-report-per-user.sh` | 完整扫描器——按 HestiaCP 用户发送电子邮件报告、核心文件差异比对、SHA256 网页后门检测、AI 评估、风险评分 |
| `known_shells.sha256` | 已知网页后门 SHA256 哈希数据库——运行时自动获取 |
---
## 扫描器检测内容
### 数据库 / 用户检查
| 检查项 | 严重级别 |
|---------|-----------|
| WordPress 版本与安全版本对比 | HIGH / OK |
| 带有 `wp2_` 前缀或 `@wp2shell.invalid` 邮箱的账户 | CRITICAL |
| 披露日期(2026 年 7 月 15 日)之后创建的管理员 | MEDIUM |
| 用户 ID 序列断号(被删除的恶意管理员痕迹) | MEDIUM |
| 孤立的 `wp_usermeta` 行 | MEDIUM |
| 被投毒的 `oembed_cache` / `customize_changeset` 行 | CRITICAL |
| 被篡改的 WP 选项(`upload_path`、`auto_prepend_file`、`siteurl`) | CRITICAL / HIGH |
### 核心文件完整性
| 检查项 | 严重级别 |
|---------|-----------|
| `wp core verify-checksums` 与 wp.org 校验对比 | HIGH |
| 与干净核心进行逐行 `diff -U5` 对比 | CRITICAL / HIGH / OK |
| 干净核心中不存在的额外文件 | CRITICAL / HIGH |
### 文件分析
| 检查项 | 严重级别 |
|---------|-----------|
| `uploads/` 中的 PHP 文件 | CRITICAL |
| 额外的 PHP 扩展名(`.php7` `.phtml` `.phar` `.php5`) | HIGH |
| **与已知网页后门进行 SHA256 匹配**(WSO、FilesMan、b374k、p0wny…) | CRITICAL |
| 在 `SINCE_DATE` 之后被修改**并且**含有可疑模式的 PHP 文件——显示精确匹配行 | CRITICAL / HIGH |
| 含有可疑模式但未在近期修改的 PHP 文件 | LOW |
| 在 `SINCE_DATE` 之后被修改且带有混淆模式的 JS/HTML 文件 | MEDIUM |
| **外部 C2/数据外泄 URL**(pastebin、ngrok、Discord webhooks、bit.ly…) | CRITICAL |
| `.htaccess` 中的危险指令 | HIGH |
| 在 `SINCE_DATE` 之后被修改的 `.htaccess` | MEDIUM |
| 包含 PHP 载荷的多语言图像 | CRITICAL |
| 暴露的备份/配置文件 | MEDIUM |
### 持久化
| 检查项 | 严重级别 |
|---------|-----------|
| 包含 `curl`/`wget`/`php`/`base64` 的用户 crontab | HIGH |
| 引用站点路径的系统 cron 文件 | MEDIUM |
### 风险评分
每个站点都会获得一个 **0–100 的风险评分**,并列出每个发现的详细分析:
```
+------------------------------------------+
| RISK SCORE: 96/100 COMPROMISED |
+------------------------------------------+
+40 wp2shell fingerprint account
+30 PHP file(s) inside uploads/
+20 Vulnerable WordPress version
+6 Core checksum failure
```
| 评分 | 类别 |
|-----------|-----------|
| 0–20 | 可能干净 |
| 21–40 | 低风险 |
| 41–60 | 中风险 |
| 61–80 | 高风险 |
| 81+ | **已被入侵** |
---
## 系统要求
- 运行 **HestiaCP** 的 Linux 服务器
- **bash** 4.0+
- 已安装 **[WP-CLI](https://wp-cli.org/)**,命令为 `wp`
- `root` 访问权限
- `sendmail`(用于发送电子邮件)
- `python3`(用于 AI 评估)
- `curl`、`sha256sum`、`file`、`strings`、`unzip`
### 安装 WP-CLI(如果缺失)
```bash
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar && sudo mv wp-cli.phar /usr/local/bin/wp
```
---
## 一行命令安装
### 快速 IoC 扫描器
```bash
curl -fsSL https://raw.githubusercontent.com/BytesPulse-OE/wp2shell-Hestia-Scanner/main/wp2shell-scan.sh | sudo bash
```
### 完整扫描器并发送电子邮件报告
```bash
curl -fsSL https://raw.githubusercontent.com/BytesPulse-OE/wp2shell-Hestia-Scanner/main/wp2shell-report-per-user.sh \
-o wp2shell-report-per-user.sh && sudo bash wp2shell-report-per-user.sh
```
---
## 使用方法
### wp2shell-scan.sh
```bash
sudo bash wp2shell-scan.sh
```
自动扫描 `/home/*/web/*/public_html/` 下的所有 WordPress 安装,执行所有检查,将彩色输出打印到终端,并将完整报告保存到 `/root/`。
### wp2shell-report-per-user.sh
```bash
sudo bash wp2shell-report-per-user.sh
```
启动时会询问三个问题:
```
[AI EVALUATION] Χρήση AI αξιολόγησης για αμφίβολα αρχεία; [y/N]
[SAVE REPORT] Αποθήκευση πλήρους report σε αρχείο; [y/N]
[DATE THRESHOLD] Διαφορετική ημερομηνία; Αφήστε κενό για default [YYYY-MM-DD]:
```
**始终以 `DRY_RUN=1` 启动**(默认值)——电子邮件仅在屏幕上预览,不会发送。只有确认输出无误后,才将其更改为 `DRY_RUN=0`。
---
## 配置
### wp2shell-scan.sh
| 变量 | 默认值 | 说明 |
|-----------|---------|-----------|
| `WEB_ROOT` | `/home` | HestiaCP 根目录 |
| `SINCE_DATE` | `2026-07-15` | “最近修改”时间阈值 |
| `WP` | `wp` | WP-CLI 路径 |
### wp2shell-report-per-user.sh
| 变量 | 默认值 | 说明 |
|-----------|---------|-----------|
| `DRY_RUN` | `1` | `1` = 仅预览,`0` = 发送电子邮件 |
| `SEND_ONLY_IF_ISSUES` | `0` | `1` = 仅在发现问题时发送电子邮件 |
| `SINCE_DATE` | `2026-07-15` | “最近修改”时间阈值 |
| `MAIL_FROM` | `security@<hostname>` | 发件人电子邮件 |
| `CORE_CACHE` | `/root/wp2shell-cores` | 干净核心缓存 |
| `ANTHROPIC_API_KEY` | *(空)* | 用于 AI 评估的 Claude API 密钥 |
---
## AI 评估(可选)
对于仅靠模式无法判定的模糊差异,扫描器会将差异发送到 **Claude API**(`claude-sonnet-4-6`),并返回结论:`DANGER`、`SUSPICIOUS`、`REVIEW` 或 `OK`,附带一句说明。AI **仅**用于灰色地带。
```bash
export ANTHROPIC_API_KEY='sk-ant-api03-...'
sudo -E bash wp2shell-report-per-user.sh
```
API 密钥:<https://console.anthropic.com>——与 claude.ai 订阅相互独立。
### 没有 API 密钥?使用浏览器分析器
将扫描输出粘贴到 Claude.ai 上的 **wp2shell Report Analyzer** artifact 中——它可以在浏览器中直接执行相同的 AI 评估。
---
## 注意事项
- 扫描器**不会修改任何内容**。可在生产环境服务器上安全运行。
- 将 WordPress 更新到已修补版本可以关闭漏洞,但**不会清理**已被入侵的站点。如果发现入侵指标,请从干净的备份中恢复。
- `CORE_CACHE` 目录(`/root/wp2shell-cores/`)会在多次扫描之间复用。删除它可以强制重新下载。
- `known_shells.sha256` 数据库每 24 小时自动更新一次。
---
## 许可证
GPL-3.0 — 请参阅 [LICENSE](https://github.com/bytespulse-oe/wp2shell-hestia-scanner/blob/main/LICENSE)
---
## 致谢
由 **[BytesPulse](https://bytespulse.gr)** 针对 wp2shell 漏洞披露(2026 年 7 月)而开发。
CVE 信息:<https://wp2shell.com>