删掉 shell.php 或 1.php 只是表面清理,必须查 access.log、加固 disable_functions、检查 .user.ini,用 find 命令筛出隐藏木马,严控上传漏洞与 PHP 配置。

删掉 shell.php 或 1.php 只是擦灰,不查 access.log、不改 disable_functions、不验 .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 行——解密逻辑和恶意载荷通常就在这儿 - 重点翻
/www/wwwlogs/your-site.com/access.log,搜这些文件被POST访问的时间点,常和你账号异常登录、密码被改的时间重合
数据库和 .user.ini 里也藏木马
很多木马根本不落地,而是靠“无文件”方式存活:恶意 JS 注入到数据库的 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就能直接覆盖所有限制
PHP 配置不收紧,等于给木马留钥匙
宝塔默认 PHP 7.4+ 的 disable_functions 是空的,allow_url_fopen 默认开,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验证是否生效
上传漏洞才是木马进来的主入口
90% 的 WebShell 是通过上传漏洞进来的。开发者常犯的错误是只在前端用 accept="image/*" 或 JS 检查后缀,后端完全没做 MIME 类型和文件头校验。
- 真实攻击者直接发 POST 请求绕过所有前端限制,上传一个
shell.jpg,实际内容却是 PHP 代码 - 后端必须读取文件头(magic bytes),例如 PNG 是
\x89PNG,JPG 是\xff\xd8\xff,而非只看扩展名 - 禁止将用户上传文件放在 Web 可访问路径下;若必须存放,用 Nginx 配置禁止执行:
location ~* ^/upload/.*\.(php|php5|phtml)$ { return 403; } - 旧项目里常见的
move_uploaded_file($_FILES['file']['tmp_name'], $_FILES['file']['name'])必须改成白名单校验 + 重命名 + 路径隔离
最易被忽略的是:改完 php.ini 不重启 PHP 服务,配置等于没写;导出数据库不搜 <script></script>,JS 黑链还在后台自动加载;.user.ini 权限开着,攻击者随时能覆盖 open_basedir。










