应执行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行确认解密逻辑,并同步检查access.log、.user.ini、数据库及php配置。

怎么用 find 命令筛出真实 PHP 后门文件
光删 shell.php 或 1.php 没用,攻击者早把木马藏进 /upload/、/cache/、/images/ 这类可写目录里,起名 index.php.bak、wp-config.php(内容却是 eval(base64_decode(...)))。宝塔自带扫描对多层混淆基本失效。
执行这条命令快速定位高危小文件:
find /www/wwwroot -name "*.php" -type f -size -50k -exec grep -l "eval\|base64_decode\|gzinflate\|file_get_contents.*http" {} \; 2>/dev/null
-
-size -50k是关键:90% 的小马都小于 50KB,大文件反而可能是正常逻辑 - 匹配
file_get_contents.*http而不是单纯file_get_contents,能过滤掉大量误报 - 发现结果后别只看文件名,用
head -n 20 /path/to/file.php查前 20 行——解密入口和恶意载荷基本都在开头几行
为什么删完还复发?PHP 配置没关严
删光文件只是擦灰。只要 disable_functions 是空的、allow_url_fopen = On、open_basedir 没设,新上传一个 test.php 就能立刻执行命令、拉取远程 payload。
进宝塔「软件商店 → PHP → 设置 → 配置修改」,必须填满这几项:
-
disable_functions = system,exec,passthru,shell_exec,proc_open,popen,assert,call_user_func,pcntl_exec(PHP 7.4+ 默认为空,极易被忽略) -
allow_url_fopen = Off和allow_url_include = Off—— 正规业务完全不需要它们 -
open_basedir = /www/wwwroot/your-site.com:/tmp/:/proc/—— 必须精确到站点根目录,不能留空或写成/
改完务必点「服务 → 重启」对应 PHP 版本,否则配置不生效;可用 php -i | grep disable 验证是否生效。
数据库和 .user.ini 里也藏木马
很多木马根本不落地:恶意 JS 注入到 WordPress 的 wp_posts.post_content 字段,或者靠篡改站点根目录下的 .user.ini 动态覆盖 PHP 限制。
导出整个数据库 SQL 文件,用文本编辑器全局搜索:
-
<script></script>、iframe src=、document.write、eval( - 检查每个站点根目录下的
.user.ini:正常应含open_basedir=/www/wwwroot/xxx:/tmp/:/proc/;若为空、被删、或写成/,就是已被篡改 - 进宝塔「网站 → 设置 → 网站目录」,必须勾选「禁止访问
.user.ini文件」——否则攻击者上传新.user.ini就能直接绕过所有限制
access.log 才是定位入口的关键证据
日志里藏着木马第一次被 POST 访问的时间点,这个时间往往和你后台账号异常登录、密码被改的时间高度重合。不查日志,等于不知道门从哪被撬开的。
重点翻 /www/wwwlogs/your-site.com/access.log,搜这些关键词:
- 可疑文件名(比如刚用
find找出来的config.php.bak) -
POST请求 +php后缀路径 - 带长参数、
base64字符串、或cmd=、eval=这类关键字的 URL
找到对应行后,记下 IP 和时间,再查同一 IP 是否在其他日志里有暴力破解记录——这才是真正要堵的漏洞入口。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











