PHP 7.4网站挂马需从入口、执行、留存、反弹四环节反向排查:用find命令筛可写目录下小于50KB含eval/base64_decode等特征的PHP文件,head -n 20查前20行确认恶意逻辑;结合access.log中POST时间与异常IP定位攻击入口;收紧disable_functions、关闭allow_url_fopen/include、设置精确open_basedir;检查数据库注入和.user.ini篡改;Nginx层限制仅index.php可执行。

PHP 7.4 网站被挂马,不能只盯着“删文件”,得从入口、执行、留存、反弹四个环节反向推演。漏洞排查核心是找“谁让木马进得来、跑得动、藏得住、回得去”。以下是实战中真正有效的排查路径:
查真实木马入口:重点扫可写目录里的小 PHP 文件
攻击者极少用 shell.php 这种名字,而是把后门塞进 /upload/、/cache/、/images/ 下,起名 index.php.bak、wp-config.php(内容却是 eval(base64_decode(...)))、123.php 或伪装成图片(如 logo.jpg.php)。
用这条命令快速筛出高危嫌疑文件:
find /www/wwwroot -name "*.php" -type f -size -50k -exec grep -l "eval\|base64_decode\|gzinflate\|str_rot13\|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 行
看 access.log 定位攻击时间与手法
木马上传后必然被访问才能触发。打开对应站点日志 /www/wwwlogs/your-site.com/access.log,搜索刚才发现的可疑文件名,例如:
grep "index.php.bak" /www/wwwlogs/your-site.com/access.log | tail -20
重点关注:
- 是否有 POST 请求(说明是上传或表单提交)
- IP 是否异常(如非你常用办公出口、境外、高频扫描段)
- 时间是否集中在凌晨 2–5 点(低流量时段)
- 是否伴随
/wp-admin/admin-ajax.php、/admin/index.php、/api/upload等路径——这指向具体漏洞点(如未授权上传、插件 RCE、弱后台密码)
检查 PHP 配置是否等于“开门揖盗”
PHP 7.4 默认 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(正规业务 99% 不需要) -
open_basedir = /www/wwwroot/your-site.com:/tmp/:/proc/(必须精确到当前站点根目录,不能留空或写/)
改完务必点「服务 → 重启」对应 PHP 版本,再执行php -i | grep disable验证是否生效
查数据库和 .user.ini:木马可能根本不落地
很多挂马不写文件,而是:
立即学习“PHP免费学习笔记(深入)”;
- 往 WordPress 的
wp_posts.post_content字段注入<script src="xxx.js"> - 在 Typecho 的
typecho_contents.text或模板字段里插入document.write(...) - 篡改站点根目录下的
.user.ini,把open_basedir = /或直接删掉限制,实现持久化提权
操作建议: - 导出全库 SQL,用编辑器全局搜索:
<script>、iframe src=、document.write、eval(、base64_decode - 检查每个站点根目录是否存在
.user.ini,内容是否被改成open_basedir=/或为空;若存在,进宝塔 → 网站 → 设置 → 网站目录 → 勾选「禁止访问 .user.ini 文件」
Nginx 层补漏:只允许 index.php 执行
即使 PHP 配置收紧,攻击者仍可能通过上传任意 PHP 文件绕过。可在 Nginx 层强制限制:
修改 /www/server/nginx/conf/enable-php-74.conf(按你实际 PHP 版本调整),把原 location ~ [^/]\.php(/|$) 块替换为:
# 只允许入口文件执行
location = /index.php {
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi-74.sock;
fastcgi_index index.php;
include fastcgi.conf;
include pathinfo.conf;
}
# 其他所有 .php 返回 404
location ~ \.php$ {
return 404;
}多入口网站(如 ThinkPHP 多模块)需额外加 location = /admin.php 等白名单条目。改完重载 Nginx 即可生效。
不复杂但容易忽略



















