必须用find命令筛出隐藏木马:find /www/wwwroot -name ".php" -type f -size -50k -exec grep -l "eval|base64_decode|gzinflate|file_get_contents.http" {} \; 2>/dev/null,再用head -n 20查前20行确认恶意载荷。

删掉 shell.php 或 1.php 不代表清理完成,真实后门往往藏在备份文件、配置文件名下,且依赖日志时间线与 PHP 配置漏洞才能持久存活。必须同步做三件事:用 find + 正则筛出高危小文件、比对 access.log 中的 POST 时间点、验证 .user.ini 和数据库是否被篡改。
怎么用 find 快速筛出隐藏木马而不是只看文件名
攻击者不会把后门起名叫“后门”,而是塞进 /cache/、/upload/、/images/ 这类可写目录,名字像 index.php.bak、wp-config.php(内容却是 eval(base64_decode(...)))。宝塔自带扫描对多层 base64 或异或混淆基本无效。
- 执行这条命令定位高危小文件:
find /www/wwwroot -name "*.php" -type f -size -50k -exec grep -l "eval\|base64_decode\|gzinflate\|file_get_contents.*http" {} \; 2>/dev/null - 发现可疑文件后,别只看名字,用
head -n 20 /path/to/file.php查前 20 行——解密逻辑和恶意载荷通常就在这儿 - 注意:
-size -50k是关键,90% 的无文件落地型木马都小于 50KB;大于这个值的反而大概率是正常业务脚本
为什么必须翻 access.log 找 POST 时间点
单纯删文件等于白干。木马文件往往是被远程 POST 上来的,而这个动作会完整记录在 /www/wwwlogs/your-site.com/access.log 里。你删掉的文件,可能下一秒就被同一 IP、同一 UA、同一 Referer 重新上传。
- 用
grep "POST.*\.php" /www/wwwlogs/your-site.com/access.log | tail -50快速看最近 50 条 POST 请求 - 重点查那些访问了刚删掉的文件路径的条目,记下时间戳,再回溯前后 5 分钟的登录日志:
grep "2026:04:18:13:22" /www/server/panel/logs/login.log - 如果发现 POST 时间和账号异常登录、密码被改的时间高度重合,说明攻击者已拿到后台权限,不改密码+不加固配置,木马必然复发
数据库和 .user.ini 里的木马怎么识别
很多木马根本不落地,而是靠“无文件”方式存活:恶意 JS 注入到数据库字段,或靠篡改 .user.ini 动态覆盖 PHP 配置。光扫文件毫无意义。
- 导出整个数据库 SQL 文件,用文本编辑器全局搜索:
<script></script>、iframe src=、document.write、eval( - 检查每个站点根目录下的
.user.ini:cat /www/wwwroot/your-site.com/.user.ini;正常应含open_basedir=/www/wwwroot/xxx:/tmp/:/proc/;若为空、被删、或写成/,就是已被篡改 - 进宝塔「网站 → 设置 → 网站目录」,必须勾选「禁止访问
.user.ini文件」——否则攻击者上传新.user.ini就能直接绕过所有限制
PHP 配置不收紧,等于给木马留钥匙
删完所有文件却第二天又出现,99% 是因为 disable_functions 是空的、allow_url_fopen = On、open_basedir 没设。这些不是“可选加固”,而是木马执行的必要条件。
- 进「软件商店 → PHP → 设置 → 配置修改」,填满:
disable_functions = system,exec,passthru,shell_exec,proc_open,popen,assert,call_user_func,pcntl_exec - 关掉远程加载:
allow_url_fopen = Off和allow_url_include = Off -
open_basedir必须设为站点专属路径,例如:open_basedir = /www/wwwroot/your-site.com:/tmp/:/proc/,不能留空或写成/ - 改完一定要点「服务 → 重启」对应 PHP 版本,否则配置完全不生效;可用
php -i | grep disable验证是否生效
最易被忽略的是:木马常通过上传漏洞进来,而上传功能本身未必有代码问题,问题出在 PHP 配置没限制执行权限。比如 Nginx 配置里漏了 location ~ \.php$ 的 fastcgi_param SCRIPT_FILENAME 安全校验,或者没禁用 upload_tmp_dir 目录的 PHP 解析——这些细节不查日志、不看配置、只删文件,永远清不干净。











