jazz-max/scan-webshells

GitHub: jazz-max/scan-webshells

一款基于 Python 的多进程 webshell 扫描与清理工具,用于在服务器被入侵后搜索、隔离和清除 PHP 后门及被注入的恶意代码。

Stars: 0 | Forks: 0

# scan-webshells.py — webshell 扫描与清理工具 用于在服务器遭到入侵后搜索、隔离和清理 webshell / PHP 加载器。 **自主**遍历目录树(不依赖 `xargs` 和参数列表长度), 根据**文件内容**进行扫描(不仅限于扩展名), 支持**全核心**运行,**即时流式输出**发现结果并显示进度。 ## 快速开始 ``` # 1. 查看受感染情况(不做任何更改,占用所有核心,名称会立即显示) python3 scan-webshells.py /var/www | tee found.txt # 2. 预览治疗 + 隔离 — 在不触碰文件的情况下查看计划 ← 首先执行此操作 python3 scan-webshells.py /var/www --quarantine /root/Q --clean-index --dry-run | tee plan.txt # 3. 实战启动:治疗 index.php + 将完整 shell 移至隔离区 python3 scan-webshells.py /var/www --quarantine /root/Q --clean-index | tee clean.log ``` 仅需 Python 3(使用标准库,无需外部包)。 ## 参数标志 | 标志 | 功能 | |---|---| | `path` | 要扫描的目录(默认为当前目录) | | `--quarantine DIR` | 将**完整的 shell** 移动到 `DIR`(保留路径) | | `--clean-index` | 从受感染的 `index.php` 中切除注入代码(备份至 `.bak`) | | `--dry-run` | 仅显示将要执行的操作 — **不进行任何更改** | | `--quiet` | 不显示进度条(适用于 cron/日志记录) | | `-j N`, `--jobs N` | 并行进程数(默认为 CPU 核心数) | | `-h`, `--help` | 帮助信息 | ## 输出与进度 - **实时输出发现结果**(输出至 `stdout`),一旦检测到即打印 — 无需等待扫描结束: === 发现结果 (随检测实时输出) === [INJECT] /var/www/.../index.php => goto 加载器 A [FULL] /var/www/.../accesson.php => accesson 后门 - **进度**信息以单独的可重写行输出至 `stderr` 并显示百分比: [661800/1412292 46% 发现:95] 32 核心 完成:处理结束,共发现 312 个 - 如果输出未直接连接到交互式终端( `| tee`、`> file`、`| grep`),进度显示将**自动关闭**,以免造成干扰。也可使用 `--quiet` 标志强制关闭。 - **Ctrl+C** 会安全停止程序:打印“已中断 ... 发现 N 个”且不抛出 traceback; 中断时操作(`--quarantine`/`--clean-index`)**不会执行** (因为列表不完整)。对于正式环境的运行,请让扫描完整执行完毕。 ## 常用运行命令 ``` # 仅显示找到的文件列表(不含操作区块) python3 scan-webshells.py /var/www --dry-run | grep -E '^\[(FULL|INJECT)\]' # 仅治疗 index.php(不隔离其他内容) python3 scan-webshells.py /var/www --clean-index # 仅隔离完整 shell(不触碰 index.php) python3 scan-webshells.py /var/www --quarantine /root/Q # 限制负载(负载下的生产环境 - 使用 8 个核心而非 32 个) python3 scan-webshells.py /var/www -j 8 # 旧单线程模式(调试 / 对比) python3 scan-webshells.py /var/www --jobs 1 ``` ## 生产环境推荐流程 ``` # 1. 查看计划(写入文件 - 即使终端关闭也会保留完整列表) python3 scan-webshells.py /var/www --quarantine /root/Q --clean-index --dry-run | tee /root/plan.txt # 2. 执行(让其运行至结束,请勿中断) python3 scan-webshells.py /var/www --quarantine /root/Q --clean-index | tee /root/clean.log # 3. 检查网站是否正常运行 # 4. 之后再删除备份和隔离区 find /var/www -name '*.bak' -newermt '-1 hour' # сначала посмотреть, что удалится ``` 在庞大的目录树(数百万文件)中,即使在 32 核心上扫描也会需要几分钟 — 文件名会实时滚动显示,表明进程正在运行。 ## 发现结果的分类:FULL 与 INJECT - **`[FULL]`** — 文件**完全是恶意代码**(`accesson.php`、`cache.php`、`w.php`、`.tmp`, 伪装成媒体的空文件 `.ico/.gif/.wma/.wmv`、BOM-webshell 等)。 这些将由 `--quarantine` 处理(移动即备份)。 - **`[INJECT]`** — **带有顶部恶意插入的正常网站文件**(例如主 `index.php`)。 `--quarantine` **不会触碰**它,而是由 `--clean-index` 仅切除开头的恶意 `` 代码块,并将原件备份到旁边的 `.bak` 文件中。 这两个集合互不相交:`--clean-index` 和 `--quarantine` 可以同时运行。 ## 取证:文件日期与清单 `--quarantine` 在移动文件时会保留 **mtime**(修改时间 = 文件写入/出现的时间), 并在隔离文件夹中写入 CSV 清单 `_quarantine_manifest.csv`: ``` original_path,mtime,ctime,size,signatures /var/www/.../accesson.php,2026-05-12 03:41:09,2026-05-12 03:41:09,212,accesson бэкдор ``` 在输出中可直接看到修改时间:`隔离: …/shell.php [修改时间: 2026-05-12 03:41:09]`。 细节说明: - **mtime** — “文件何时出现”的主要取证指标,原封不动地转移; - **ctime**(inode 时间)在任何移动/复制时都会改变 — 因此它会在 移动**之前**被提取并记录到清单中; - 攻击者可能伪造了 mtime(`touch`),因此请将其与 Web 服务器日志及同一文件夹中的相邻 文件进行比对。 ## 检测目标 该扫描器针对已知的恶意代码集进行了优化,可捕获多个家族: - goto 混淆加载器(range 注入、隐藏标记、hex/octal 字符串); - `Sy1Lz` 打包的 shell(多层 gzinflate/base64); - WSO / FilesMan(`Watching webshell`、ASCII 伪图形变量); - xleet shell(`//Pass: xleet`); - 微型后门 `accesson.php`(`eval(base64_decode($_REQUEST))` + 上传); - AES 验证的文件管理器(`pw_name_*`); - 伪装成媒体的空文件的 base64/`zip://` 包含; - WP 伪装且带有 `eval(pre_term_name())`; - BOM-webshell(双重 BOM + `@session_start`); - 微注释 `/*-…-*/` 混淆及十六进制编码的 superglobals; - 隐藏在媒体/`.txt` 文件中的 PHP 代码(仅在包含危险函数时触发), 以及内部带有 `.tmp` 加载器的 `.zip`。 扫描基于**文件内容**,因此即使是命名为 `logo.png` 的 shell 或 没有扩展名的文件也会被找到。 为了提高速度,会跳过 `vendor/`、`node_modules/`、`.git/` 目录; 每个文件仅读取前 3 MB(注入型加载器总是位于文件开头)。 ## 误报 启发式规则经过了调整,以避免在庞大的混合目录树中产生噪音: - WSO/FilesMan:会在所有文件中搜索字符串 `Watching webshell`,而 ASCII 伪图形变量 `$▛` **仅在 PHP 文件中**搜索 — 否则字节 `▛` 会大量误报 JPEG 及其他二进制文件; - `/*-` 混淆**仅在 PHP 文件中检查**(根据扩展名或以 `
标签:DNS 反向解析, Python, WebShell查杀, 库, 应急响应, 恶意软件清理, 文档结构分析, 无后门, 逆向工具