adityaarsharma/wordpress-malware-removal

GitHub: adityaarsharma/wordpress-malware-removal

一款 AI 驱动的 WordPress 恶意软件深度扫描与安全清除工具,能够发现传统扫描器遗漏的隐蔽威胁并追溯攻击入口。

Stars: 17 | Forks: 2

# WordPress 恶意软件清除 ### 找出扫描器看不见的隐藏恶意软件 — 并了解它们是如何入侵的。 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/adityaarsharma/wordpress-malware-removal/actions/workflows/ci.yml) [![License: AGPL v3](https://img.shields.io/badge/license-AGPL--3.0-blue.svg)](LICENSE) [![Runs with AI agents (MCP)](https://img.shields.io/badge/runs%20with-AI%20agents%20%2F%20MCP-8A2BE2.svg)](#works-with-your-ai-agent) [![Python](https://img.shields.io/badge/python-3.8%2B-3776AB.svg)](#standalone-scripts) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](#contributing) [![Stars](https://img.shields.io/github/stars/adityaarsharma/wordpress-malware-removal?style=social)](https://github.com/adityaarsharma/wordpress-malware-removal/stargazers) Google 标记了您的网站。或者它将访问者重定向到垃圾网站。或者您的扫描器显示“一切正常”,而博彩页面却在您的域名下排名靠前。这通常是为了**隐藏**而构建的恶意软件 — 躲避您,也躲避那些只像浏览器一样查看网站的工具。 **WordPress Malware Removal** 通过以 **Google 和攻击者**的方式检查您的网站,可以发现那些隐蔽的东西 — SEO 垃圾**隐蔽技术 (cloaking)**、**日文关键词劫持**、重定向恶意软件、web-shell 和后门 —。它能**安全**地进行清理(先完整备份,绝不盲目删除,如果更改导致网站损坏,它会恢复文件),并告诉您**攻击者是如何入侵的**,以免再次发生。 **免费 · 开源 (AGPL-3.0) · 可与任何 AI 编程代理一起运行 — Claude Code、Cursor、Codex 或任何 MCP 客户端。**
## 目录 - [它的功能](#what-it-does) - [与您的 AI 代理协同工作](#works-with-your-ai-agent) - [功能对比](#how-it-compares) - [如何使用](#how-to-use-it) - [保持更新](#keeping-it-updated) - [工作原理(12 层扫描)](#how-it-works) - [连接您的网站(网关)](#connecting-your-site) - [它能检测什么(39 个家族)](#what-it-detects) - [独立脚本](#standalone-scripts) - [如何安全清理](#how-it-cleans-safely) - [文档](#documentation) - [常见问题解答](#faq) - [真实案例](#a-real-example) - [贡献指南](#contributing) - [许可证](#license) ## 它的功能 用通俗的话说: 1. **像 Google 和攻击者那样查看您的网站** — 而不仅仅是像浏览器那样。 2. **扫描整个服务器**、您的数据库、日志和用户 — 总共 12 项检查。 3. **在处理任何可疑文件之前先读取它**,因此对误报非常谨慎。 4. **安全清理** — 首先进行备份,将不良文件*移动*到隔离区(而不是删除),并在每一步操作后检查网站是否仍能正常加载。如果出现故障,它会自动恢复文件。 5. **告诉您攻击者是如何入侵的** — 密码被盗?插件过期?— 并帮助您关闭该通道。 6. **以 Googlebot 的身份重新检查您的页面**,以此证明垃圾内容已被清除。 ## 与您的 AI 代理协同工作 不仅仅是 Claude。它的设计是**与代理无关的**: - **Python 脚本可独立运行** — 无需 AI。直接从您的终端扫描、检测隐蔽技术、验证核心完整性并检查漏洞。 - **清理方法适用于任何强大的 AI 编程代理** — Claude Code、Cursor、Codex,或者任何能够读取项目并运行命令的工具。只需将您的代理指向此仓库,并让它进行扫描或清理即可。 - **它通过 MCP**(一种开放标准)或 SSH 连接到您的网站 — 因此任何兼容 MCP 的客户端都可以驱动它。[SproutOS](https://github.com/posimyth/sproutos) 是推荐的网关(无需 SSH)。 - **Claude Code 获得了最紧密的契合度** — 它将其作为一项原生技能加载,因此一句简单的“扫描我的网站”即可直接生效。 一个工具,由您选择代理。这里没有任何东西被锁定在单一供应商上。 ## 功能对比 这些都是很好的工具,但各有专攻。该表格描述了每个工具**公开记录的方法** — 这是设计上的比较,并不是声称任何产品更好或更差。在您现有的安全插件**旁边**运行此工具;多一次独立检查总是有益无害的。 | | 手动清理 | Wordfence | MalCare | Sucuri | 本工具 | |---|---|---|---|---|---| | **产品性质** | 自己动手 | 安全插件 | 插件 + 云端 | 插件 + 远程服务 | AI 代理 / Claude 技能 | | **运行位置** | 您在服务器上 | WordPress 内部 | 在其云端同步副本 | 远程扫描 + 云防火墙 | 通过连接或 SSH — 整个服务器 | | **如何发现恶意软件** | 您自己检查 | 特征匹配 | 行为信号 | 特征库 + 远程检查 | 结合上下文读取每个文件 | | **检查范围** | 您查看的任何地方 | WordPress 文件 & 数据库 | WordPress 文件 & 数据库 | 公开页面 + 文件(带 agent) | 整个服务器、数据库、日志、用户 | | **以 Googlebot 身份检查页面**
(仅向 Google 显示的垃圾内容) | 只有当您知道要这么做时 | 扫描文件,而不是爬虫抓取 | 扫描其云端的文件 | 远程扫描器读取公开页面 | 是 — 以 Googlebot 身份 & 在源站 | | **扫描 `wp-content` 之外的文件** | 如果您检查那里 | 专注于 WordPress | 专注于 WordPress | 公开 URL;通过 agent 进行服务器扫描 | 是 — Web 根目录及更上层 | | **解释网站是如何被黑的** | 只有当您深挖日志时 | 实时流量 / 登录日志 | 活动日志插件 | 黑客攻击后分析(付费) | 内置日志取证 + 免费漏洞检查 | | **减少误报** | 取决于您的技能 | 模式规则 | 信号评分 | 特征规则 | 在标记前读取每个文件 | | **破坏网站的风险** | 高 — 容易删除错误的文件 | 中低 | 低 | 低 | 低 — 备份、隔离、自动回滚 | | **所需技能** | 高 | 低 | 低 | 低 | 低 — 由 AI 驱动 | | **撤销 / 回滚** | 您自己的备份 | 手动恢复 | 从备份恢复 | 从备份恢复 | 隔离 + 自动回滚 | | **开源** | 不适用 | 免费插件为 GPL | 插件为 GPL;引擎专有 | 插件为 GPL;平台专有 | 完全开源 (AGPL-3.0) | | **价格** | 您的时间 | 免费增值 | 免费增值 | 付费平台(免费远程扫描) | 免费 | 以上是截至 2026 年各选项公开记录的方法的对比,仅供参考 — 并非声称任何产品更好或更差,且功能经常变化,因此请查看当前版本。产品名称是其各自所有者的商标。这些工具是互补的;运行独立的第二次扫描总是明智的。 **本工具的额外优势:** 它以**搜索引擎**的方式检查您的页面(以捕捉仅向 Google 显示的垃圾信息),扫描 `wp-content` **之外**的区域(Web 根目录及更上级目录),采用**隔离优先**的方式移除威胁并进行自动健康检查,同时解释**网站是如何被黑的**。 ## 如何使用 **步骤 1 — 获取它。** ``` git clone https://github.com/adityaarsharma/wordpress-malware-removal.git ``` **步骤 2 — 将您的代理指向它。** - **Claude Code**(原生技能):`ln -s "$(pwd)/wordpress-malware-removal" ~/.claude/skills/wordpress-malware-removal` - **Cursor / Codex / 其他代理**:在您的代理中打开此文件夹,并让它遵循 `SKILL.md`。 - **无代理**:直接运行[脚本](#standalone-scripts)。 **步骤 3 — 连接您的网站**(参见[网关](#connecting-your-site)) — SproutOS(无需 SSH)或 SSH。 **步骤 4 — 只需询问**(或运行脚本):
可选:使用免费的 Wordfence 漏洞源查找入侵入口
免费的 [Wordfence Intelligence](https://www.wordfence.com/threat-intel/) 源(免费账户、无使用上限、允许商业使用)允许该工具将您已安装的插件/主题与已知漏洞进行交叉比对,从而找出可能的入侵途径。 ``` export WORDFENCE_API_KEY=your_free_key ``` 这是可选的 — 核心的恶意软件检测没有它也能正常工作。设置详情:[references/wordfence-integration.md](references/wordfence-integration.md)。
## 保持更新 新的恶意软件不断出现,因此检测机制是为了不断扩展而构建的。 - **更新工具:** `git pull` — 您将获得最新的检测模式和修复。 - **漏洞数据自动更新:** Wordfence 源会自动刷新(使用 `python3 scripts/wordfence_client.py --refresh` 强制刷新)。 - **添加您自己的模式:** 特征列表 ([`scripts/signatures.json`](scripts/signatures.json)) 易于扩展,并且内置的测试语料库 + CI 确保新模式能捕获真实的恶意软件,而不会标记干净的代码。完整指南:[references/growing-the-database.md](references/growing-the-database.md)。 ## 工作原理
12 层取证扫描 — 点击展开
每次扫描都会运行这些层级(每一层都会根据您实际拥有的访问权限优雅降级)。每层的完整命令:[references/detection-playbook.md](references/detection-playbook.md)。 | # | 层级 | 检查内容 | |---|---|---| | 1 | **外部隐蔽技术** | 以 Googlebot 与浏览器的身份分别抓取页面(并在 CDN 后的源站进行),以捕捉仅向搜索引擎显示的垃圾信息 | | 2 | **Web 根目录扫描** | `wp-content` 之外的文件/文件夹 — 这是大量恶意软件隐藏的地方 | | 3 | **核心完整性** | 被修改或多余的 WordPress 核心文件 | | 4 | **插件/主题完整性** | 破解版/隐藏的插件、注入的代码、虚假插件、未经身份验证的 REST 路由 | | 5 | **上传文件** | 出现在不该出现的地方的可执行 PHP 文件 | | 6 | **mu-plugins & drop-ins** | `db.php`、`object-cache.php` 以及在每次请求时加载的 must-use 插件 | | 7 | **Web-shells & 后门** | 文件管理器和微型自动登录后门 | | 8 | **代码混淆** | `eval(base64…)`、打包/编码的代码 | | 9 | **数据库** | 文章、选项、用户、重定向和日志表中的注入 | | 10 | **持久化** | Cron、`.htaccess`、PHP 预加载、流包装器、服务器级后门 | | 11 | **用户 & 会话** | 意外的管理员、恶意的应用程序密码 | | 12 | **日志取证** | 重建攻击时间线并找到入口点 + 攻击者 IP | 流程: ``` Scan (12 layers) -> verify each finding in context (reduce false alarms) -> back up -> quarantine -> health-check + rollback -> re-check as Googlebot -> harden -> report ```
它如何判断什么是恶意软件(防止误报的步骤)
它绝不会仅仅因为模式匹配就进行删除。对于每个可疑项目,它会: 1. **结合上下文读取实际的文件/数据行**,并像工程师一样判断它是恶意的还是合法的(压缩的库、代码片段插件、AMP 处理程序等)。 2. **将其分类**为 *已确认*、*需要人工介入* 或 *误报*。只有 *已确认* 的项目才会被移除。 3. **当不确定时,会标记以供审查**,而不是直接删除。它为您留下的文件是可以恢复的;而如果因为错误删除导致网站崩溃,那是无法轻易挽回的。
## 连接您的网站
三种连接方式(推荐 SproutOS,均非必须)
| 网关 | 需要 | 最适合 | |---|---|---| | **[SproutOS](https://github.com/posimyth/sproutos)** *(推荐)* | 一个应用程序密码 | 无需 SSH — 直接在 WordPress 内部连接 | | 任何其他 WordPress MCP | 已连接的 MCP | 如果您已经在使用的话 | | **SSH + WP-CLI** | Shell 访问权限 | 最完整的访问权限 | SproutOS 通过应用程序密码将任何 WordPress 网站变成 MCP 服务器 — 无需 SSH。它是一个**通道,而不是依赖项**。每个网关的命令映射[references/mcp-gateways.md](references/mcp-gateways.md)。
## 它能检测什么
39 个恶意软件家族 — 点击展开
SEO 垃圾隐蔽技术 · 日文关键词劫持 · 钓鱼与博彩垃圾内容 · 重定向恶意软件 · Web-shells · 自动登录后门 · 上传脚本 · 隐藏在图片中的 PHP 流包装器载荷 · 从数据库重建的虚假“核心功能”加载器 · 未经身份验证的 REST 路由后门 · PHP 对象注入 · `wp-config.php` 注入 · 恶意的 `.htaccess` 规则和 `DirectoryIndex` 劫持 · `?g=` 查询字符串垃圾内容 · 恶意的 cron 任务 · 意外的管理员帐户 · 恶意的应用程序密码 · 信用卡窃取程序 · 挖矿木马 · SSH 密钥后门 · 伪装成图片的文件 · 核心文件名仿冒 · 双扩展名 shells · 注入的站点地图 · 服务器级别的持久化机制等等。 完整的解释列表:[references/signature-library.md](references/signature-library.md) · 深入了解每个家族及其隐藏方式:[references/malware-families.md](references/malware-families.md)。
## 独立脚本
直接运行引擎 — 零依赖,原生 Python 3
您不需要 Claude 即可使用核心脚本: ``` # 检查整个 sitemap 中仅向搜索引擎显示的 spam python3 scripts/cloaking_diff.py --sitemap https://example.com/sitemap.xml --origin-ip 1.2.3.4 # 深度扫描 WordPress 文件夹以检测 39 种 malware families python3 scripts/scan_patterns.py /path/to/wordpress --since 2026-06-14 --json findings.json # 根据已知漏洞检查已安装的 plugins/themes(免费的 Wordfence feed) python3 scripts/wordfence_client.py --installed installed.json ``` | 脚本 | 功能 | |---|---| | `scripts/cloaking_diff.py` | 检测隐蔽技术(机器人 vs 浏览器,源站 vs CDN,JS 重定向) | | `scripts/scan_patterns.py` | 对 WordPress 目录树进行模式扫描以查找可疑项 | | `scripts/wordfence_client.py` | 将已安装的版本与已知的 CVE 进行匹配 | | `scripts/safety_gate.py` | 代码强制执行的 备份 → 隔离 → 回滚(没有备份不会删除) | | `scripts/reinstall_clean.py` | 根据官方校验和验证核心/插件;从干净来源重新安装 | | `scripts/signatures.json` | 特征数据库(易于扩展) |
## 如何安全清理
“不要破坏网站”协议
- 首先进行**完整的数据库备份** — 并且在备份存在之前,该工具**不会删除任何内容**(由 `safety_gate.py` 在代码中强制执行,而不仅仅是一项准则)。 - 对于注入到**真实的 WordPress/插件文件**中的恶意软件,它会**从官方干净的源替换它们** (`reinstall_clean.py`),而不是进行有风险的手动编辑。 - **移动**独立的不良文件到隔离文件夹 — 它不会删除它们。 - 在每次更改后**检查网站是否仍能加载**;如果更改破坏了某些功能,它会自动恢复该文件。 - **在进行任何永久性操作之前先询问您。** - **以 Googlebot 的身份重新检查**,以确认垃圾内容确实已被清除。 它的目标是清除它发现的每一个感染,并确保网站正常工作。没有任何扫描器能够保证网站在未来的未知攻击中*永久*干净,因此它对此非常坦诚:它会列出任何无法完全检查的内容,并建议在一两天后进行跟进扫描,以捕捉任何试图卷土重来的东西。完整协议:[references/remediation-playbook.md](references/remediation-playbook.md)。
## 文档
所有指南 — 点击展开
| 文档 | 内容 | |---|---| | [SKILL.md](SKILL.md) | AI 遵循的完整方法 | | [SPEC.md](SPEC.md) | 产品 & 安全规范 | | [references/detection-playbook.md](references/detection-playbook.md) | 各网关下每一层的命令 | | [references/remediation-playbook.md](references/remediation-playbook.md) | 安全移除:备份 → 隔离 → 验证 → 回滚 | | [references/cloaking-detection.md](references/cloaking-detection.md) | 机器人 vs 浏览器方法的深入探讨 | | [references/malware-families.md](references/malware-families.md) | 恶意软件家族 + 2026 年威胁态势 | | [references/signature-library.md](references/signature-library.md) | 人类可读的特征列表 | | [references/edge-cases.md](references/edge-cases.md) | 多站点、自定义前缀、重复感染、安全防护 | | [references/mcp-gateways.md](references/mcp-gateways.md) | 通过 SproutOS / 其他 MCP / SSH 连接 | | [references/wordfence-integration.md](references/wordfence-integration.md) | 免费的 Wordfence 源设置 | | [references/growing-the-database.md](references/growing-the-database.md) | 如何扩大漏洞 + 攻击模式的覆盖范围 | | [references/incident-case-study.md](references/incident-case-study.md) | 一个从开始到结束的真实黑客攻击案例 |
## 常见问题解答
如何移除日文关键词劫持?
将工具连接到您的网站并说 *“移除日文关键词劫持。”* 它会查找仅向搜索引擎显示的垃圾页面、恶意站点地图、`.htaccess` 欺骗手段和数据库注入,安全地清理它们,并以 Googlebot 的身份重新检查以确认它们已被清除。
我的 WordPress 网站将访问者重定向到了垃圾网站。它能帮上忙吗?
可以 — 它会查找 `.htaccess`、数据库、主题文件和注入的 JavaScript 中的重定向代码,包括仅在移动设备上或针对搜索引擎触发的重定向。
我的扫描器说网站很干净,但 Google 标记了它。为什么?
某些感染(称为*隐蔽技术 cloaking*)仅向搜索引擎显示垃圾内容,而向其他人(包括扫描器)显示干净的内容。该工具以 *Googlebot* 的身份检查您的页面,这就是它能发现此类感染的原因。
没有 SSH 它能工作吗?
可以。连接 [SproutOS](https://github.com/posimyth/sproutos)(通过应用程序密码),它可以在没有 shell 访问权限的情况下运行。
它会弄坏我的网站吗?
它的设计初衷是不会这样做:它会首先进行备份,采取隔离而不是删除的方式,并在每一步后检查网站,自动恢复任何引起问题的内容。
## 真实案例
一个普通扫描未能发现的隐藏博彩垃圾感染
一个在线的 WordPress 网站感染了博彩垃圾信息,这些信息**仅出现在 Google 搜索结果中** — 对于访问者以及网站上运行的安全扫描器来说,该网站看起来完全正常。恶意软件隐藏在 `wp-content` **之外**的文件夹中,加上一个微小的后门文件,让攻击者不断重返。 这款工具正是为了发现这种隐藏的感染而构建的。完整的分步说明包含在工作示例和回归测试中:[references/incident-case-study.md](references/incident-case-study.md)。
## 贡献指南
始终欢迎新的检测模式
恶意软件在不断变化。特征列表 ([`scripts/signatures.json`](scripts/signatures.json)) 很容易扩展 — 添加一个家族,增加一个防止误报的安全措施,然后提交一个 PR。发现了它遗漏的东西吗?[提交一个 issue](https://github.com/adityaarsharma/wordpress-malware-removal/issues) 并附上经过脱敏处理的样本。 **如果这对您有帮助,点个 Star 可以帮助其他人发现它。**
## 与其他工具完美配合 [Wordfence](https://www.wordfence.com/)、[MalCare](https://www.malcare.com/) 和 [Sucuri](https://sucuri.net/) 是知名的 WordPress 安全工具;运行独立的第二次扫描总是明智的。本项目使用 [SproutOS](https://github.com/posimyth/sproutos) 作为其推荐的网关,并使用免费的 [Wordfence Intelligence](https://www.wordfence.com/threat-intel/) 漏洞源。 ## 许可证 [AGPL-3.0-or-later](LICENSE)。强传染性左版:您可以自由使用、修改和自行托管它,但如果您将**修改后**的版本作为网络服务运行,则必须共享您的源代码。这保证了托管派生版本依然保持开源。
Aditya Sharma 构建
标签:CISA项目, MCP, Python, Webshell检测, WordPress, 内存分配, 恶意软件查杀, 无后门, 网站安全运维, 逆向工具