宝塔木马查杀仅能扫描指定路径下文件的静态WebShell特征(如eval、gzinflate等),不覆盖配置文件、数据库、CDN及隐藏文件,需人工比对.user.ini、.htaccess、首页HTML、Nginx配置及数据库/Redis/CDN缓存。

木马查杀工具在宝塔里实际能扫到什么
宝塔自带的「木马查杀」功能(位于安全中心 → 木马查杀)本质是静态规则匹配,不是运行时行为监控。它能识别常见 WebShell 特征,比如 eval(base64_decode(、gzinflate(、str_rot13(、assert( 等函数组合,也覆盖混淆后 JS 中的 unescape("%3Cscript") 这类硬编码跳转片段。
但注意:它扫不到 Nginx 配置层注入、.htaccess 重写规则、或数据库字段中存储的 JS 跳转代码——这些不属于「文件内容静态扫描」范围。
- 必须手动指定网站根目录路径,如
/www/wwwroot/example.com;不填或填错路径会导致漏扫 - 默认不扫描隐藏文件(如
.user.ini、.htaccess),要勾选「深度扫描」才包含 - 扫描结果里的「匹配行号」是真实可定位的,点击「查看文件」会直接跳转并高亮,别只看摘要就删文件
为什么查杀完还有恶意跳转?重点比对哪些核心文件
很多跳转问题其实不来自 PHP 文件,而是被篡改的前端或配置层。以下 4 类文件必须人工比对:
-
/www/wwwroot/example.com/.user.ini:PHP 配置劫持点,常见插入auto_prepend_file指向恶意脚本 -
/www/wwwroot/example.com/.htaccess(Apache)或 Nginx 站点配置中的location /块:检查是否有rewrite或add_header注入 JS -
/www/wwwroot/example.com/index.html或首页模板文件:搜索unescape、document.write、src=后接可疑域名 -
/www/server/panel/vhost/nginx/example.com.conf:确认无异常sub_filter或proxy_set_header插入 JS 片段
比对方法很简单:用宝塔文件管理器打开对应文件,再开一个干净环境下的同名备份文件(或 Git 历史版本),逐行 Ctrl+F 查关键词,尤其留意末尾空格、不可见字符、注释块里的伪装代码。
ClamAV 和 D盾补位时要注意什么
宝塔内置木马查杀漏掉的混淆型 WebShell,可以靠 ClamAV 或 D盾补充。但它们不是“一键全解决”:
- ClamAV 命令行查杀需进终端执行:
clamdscan --fdpass --infected --multiscan /www/wwwroot/example.com;它依赖病毒库更新,旧版可能不认识新型 base64+gzinflate 套壳 - D盾需单独部署在 Windows 本地,上传整站 ZIP 扫描;它对 JS 跳转识别强,但无法检测服务器上实时生效的 Nginx 配置劫持
- 二者都可能报大量误报,比如把 Laravel 的
eval()辅助函数、或正常压缩 JS 里的unescape当成威胁——得结合上下文判断
最常被忽略的跳转源头:数据库和缓存
如果所有文件都干净,跳转还在发生,立刻检查:
- MySQL 数据库中文章内容、页面 HTML 字段是否含恶意 script 标签(尤其是 CMS 如 WordPress 的
wp_posts.post_content) - Redis 缓存里是否存了被污染的渲染结果(比如用
redis-cli keys "*html*"搜关键词) - CDN 缓存是否被注入——清空 CDN 全站缓存,再访问源站确认是否仍有跳转
这类问题不会出现在任何「文件扫描」报告里,但却是真实攻击链的最后一环。别只盯着磁盘文件,数据层和中间件层一样要动刀。


















