SOMA9-Cloud/wp-shell-hunter

GitHub: SOMA9-Cloud/wp-shell-hunter

专注检测 WordPress 环境中伪装成媒体文件的 PHP webshell 及隐藏在重复目录结构中的后门,弥补常规恶意软件扫描器的盲区。

Stars: 0 | Forks: 0

# wp-shell-hunter [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/360a7a44c7132152.svg)](https://github.com/SOMA9-Cloud/wp-shell-hunter/actions/workflows/test.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Python](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org) [![No deps](https://img.shields.io/badge/dependencies-stdlib%20only-brightgreen.svg)](#requirements) 检测 WordPress 和 cPanel 托管环境中**伪装成媒体文件**的 PHP webshell。能够捕获表层恶意软件扫描器通常遗漏的模式。 ## 为什么开发此工具 大多数 WordPress 恶意软件工具会寻找标准路径中的 `.php` 文件。现代 webshell 家族通过以下方式绕过此检测: - 将 PHP 代码嵌入到带有媒体扩展名的文件中(`.tiff`、`.gif`、`.png`、`.mp4`、`.flv`、`.3gp`、`.webp`、`.zip`)。 - 隐藏在攻击者创建的**双重目录**中(`wp-admin/maint/maint/`、`cgi-bin/cgi-bin/cgi-bin/`、`images/images/images/images/`)。 - 使用 `goto` 语句面条代码、四层嵌套的 `md5()` 密码门以及 `eval()` 与 `curl_exec()` 的链式调用来混淆投放器。 当管理员只找到并删除了明显的 `.php` 文件时,非 `.php` 的投放器会残留下来,导致网站在几小时内再次被感染。 `wp-shell-hunter` 专为捕获那些非显而易见的威胁而构建。 ## 快速开始 ``` # 一次性安装(无需 pip,无需 virtualenv) curl -fsSL https://raw.githubusercontent.com/SOMA9-Cloud/wp-shell-hunter/main/install.sh | sudo bash # 扫描 webroot wp-shell-hunter /var/www/html # /home 下的多个 WordPress 安装 wp-shell-hunter /home --workers 8 # 用于 SIEM/CI 导入的 JSON 输出 wp-shell-hunter /var/www/html --json > findings.json # 默认跳过(非常嘈杂的)WordPress uploads 目录; # 如需同时扫描请显式启用: wp-shell-hunter /var/www/html --scan-uploads ``` 退出代码: | 代码 | 含义 | |------|------------------------------------------------------| | `0` | 未发现可疑内容 | | `1` | 至少有一个可疑发现(需人工复查) | | `2` | 至少有一个被评级为 `malicious` 的发现(紧急情况) | 这些代码在各个版本中保持稳定,可安全用于 CI 关卡。 ## 检测器 ### 1. `disguised_php` 读取每个带有媒体或资源扩展名文件的前 16 个字节,如果内容以 ` shell-hunter.json ``` 当发现 `malicious` 结果时,非零退出代码(`2`)将默认导致任务失败,从而尽早暴露问题。 ## 性能 在多站点 cPanel/WP 主机上进行代表性扫描的指示性数据: | 文件数 | 工作线程数 | 耗时 | |------:|--------:|-----:| | 50,000 | 4 | ~12秒 | | 250,000 | 8 | ~45秒 | | 1,000,000 | 16 | ~3分钟 | 遍历器默认会修剪大型无关目录树(`node_modules`、`vendor`、`__pycache__`、`cache` 等)。如果您的环境有需要,可以通过 `--scan-uploads` 和 `--follow-symlinks` 进行覆盖。 ## 局限性 - 有动机的攻击者可以避开所有这三个检测器。此工具捕获当前常见的模式;但不能保证绝对的安全。 - 仅限静态分析。无行为检测。 - 混淆检测器是基于启发式的。在高度混淆但良性的代码上可能会出现误报(在 WordPress 环境中很少见)。 ## 贡献 欢迎提交 Issue 和 Pull Request。新的检测器模块应放在 `src/wp_shell_hunter/detectors/` 下,并公开一个 `check(path: Path) -> Optional[Finding]` 方法。请参阅 `disguised_php.py` 以获取最简单的参考实现。 ## 许可证 MIT。详情请见 [LICENSE](LICENSE)。 ## 作者 由 **SOMA9™ Security Team**(SOMA9™ Holdings, LLC 的安全运营团队)构建并维护。该工具是我们对我们管理的 WordPress 托管账户运行的内部狩猎检查的开源版本。 我们不接受通过此存储库提交的私人漏洞报告。如需报告,请发送邮件至 `security@soma9.cloud`(PGP 公钥位于众所周知的位置)。 SOMA9™ 是 SOMA9 Holdings, LLC 的商标。
标签:AppImage, cPanel安全, DNS 反向解析, DNS 解析, Homebrew安装, PB级数据处理, PHP木马, Python, SIEM集成, Webshell检测, Web应用防火墙, WordPress安全, 代码混淆, 媒体文件解析, 安全运维, 开源安全工具, 恶意代码分析, 恶意软件扫描, 操作系统监控, 数据展示, 文件伪装检测, 文件系统监控, 无依赖, 无后门, 沙箱逃逸, 红队, 网站安全, 逆向工具, 逆向工程平台, 配置文件