必须勾选“包含子目录”和“匹配全部文件”才能用宝塔文件管理器有效查木马,否则仅扫描当前目录易漏掉wp-content/plugins等深层路径中的恶意文件。

用宝塔文件管理器的「内容搜索」功能查木马,但默认不递归子目录
宝塔面板自带的文件管理器支持按内容搜索,但默认只搜当前目录,不会进 wp-content/plugins 或 themes 这类深层路径——这恰恰是木马最爱藏的地方。必须手动勾选「包含子目录」,否则等于在门口扫地,屋里堆着黑链文件都看不见。
实操建议:
- 进入「文件」→ 打开网站根目录(如
/www/wwwroot/your-site.com) - 点右上角「搜索」→ 输入关键词(如
eval(base64_decode、shell_exec(、@file_get_contents) - 务必勾选「包含子目录」和「匹配全部文件」(否则跳过 .php、.js 等非文本类型)
- 避免搜
system(这类太泛的词,容易误伤正常代码;优先用带特征的组合,比如$_POST\['x'\].*base64_decode
命令行下用 find + grep 批量扫描,绕过宝塔界面限制
宝塔的图形搜索卡顿、超时、漏报率高,尤其面对几千个文件时。直接 SSH 进服务器,用原生命令更稳更快,还能加正则、跳过缓存目录、限制文件大小。
常见错误现象:直接 grep -r "eval" /www/wwwroot/ 会扫到日志、备份、压缩包,结果全是噪音。
推荐命令(逐条执行):
find /www/wwwroot/your-site.com -type f -name "*.php" -size -2M -print0 | xargs -0 grep -l "eval.*base64_decode\|file_put_contents.*\$_(POST\|GET)"
说明:
-
-size -2M排除大于 2MB 的文件(木马通常很小,大文件多是备份或图片) -
-name "*.php"限定扩展名,避免扫.log或.sql干扰 -
grep -l只输出匹配文件路径,不刷满屏内容 - 正则里用
\|表示“或”,括号需转义;\$_(POST\|GET)能抓到$_POST['x']和$_GET['y']两种写法
识别伪装成正常文件的木马:重点盯 .php 后缀但内容是 base64 或 hex 编码
很多木马文件名字看着无害(如 cache.php、index1.php),打开却是一长串 base64_decode("PD9waHAgZXZ... 或十六进制字符串(\x3c\x3f\x70\x68\x70)。这类文件宝塔内容搜索可能因编码格式漏掉。
快速筛查方法:
- 在宝塔文件管理器中,按「修改时间」倒序排列,重点关注近 7 天内新建或修改的
.php文件 - 右键「编辑」可疑文件,第一行不是
<?php而是eval(、base64_decode(、hex2bin(,基本可判为恶意 - 用命令确认是否含大量 base64 片段:
head -n 20 cache.php | grep -E "[a-zA-Z0-9+/]{30,}="(连续 30+ 字符的 base64 样式)
搜索后别急着删:先隔离再分析,防止误删导致网站崩溃
批量搜出一堆文件,看到 shell_exec 就删,很可能干掉某个插件的合法调用逻辑。真实环境里,exec、curl_init 在监控脚本或支付回调里也存在。
安全操作顺序:
- 把疑似文件统一移到临时目录:
mkdir /tmp/malware-check && mv suspicious.php /tmp/malware-check/ - 用
diff对比同名文件在 Git 历史或备份中的原始版本(如有) - 检查该文件是否被其他文件 include/require —— 在宝塔「搜索」里反向搜
include.*suspicious或require_once.*suspicious - 确认无依赖后再删除;若不确定,先改后缀为
suspicious.php.bak,观察网站是否异常
真正难的不是找到木马,而是区分「攻击者写的后门」和「开发者留的调试接口」——后者往往也用 eval 和 $_REQUEST,只是没被公开利用而已。










