用户反馈:搜到你网站点进来,先跳一下再落到页面;有的手机用户直接被带到赌博站。这是被挂马跳转了。挂马手法的共同点是“借你的页面插私货”,插的位置就那么几类:篡改的网页文件、PHP 的 auto_prepend_file 注入、计划任务定时复活。应急按这三条线查,别急着先删文件,先定位再动手,删错文件等于替攻击者毁灭证据。
第一条线:找被篡改的文件。你有版本库或近期备份就是上帝视角,diff 一下全现形;没有备份就靠 mtime 筛近期被改过的 php 和 js 文件,再人工看内容。挂马代码常见特征:base64 解码执行、curl/file_get_contents 拉远程内容、跳转函数 header 或 window.location。
# 近 3 天被改动的 PHP/JS 文件(把路径换成你的站点根目录)
find /www/example.com -type f \( -name "*.php" -o -name "*.js" \) -mtime -3 -ls
# 在代码里搜常见挂马特征
grep -rniE "base64_decode|eval\(|gzinflate" /www/example.com --include="*.php" | head
grep -rniE "window\.location|sopop|bocai|boss" /www/example.com --include="*.js" | head
第二条线是本篇的重点,很多教程不提:.user.ini。PHP 支持目录级的用户配置文件 .user.ini,里面可以设 auto_prepend_file 指定“每个 PHP 请求都先执行某个文件”——攻击者放一个加密的木马文件在深处,再用 .user.ini 全局注入,比改 index.php 更隐蔽,而且你改了网页文件它还在,删了 index.php 里的马第二天又“复活”。虚拟主机和宝塔环境尤其常见。
# 全站搜 .user.ini 并检查内容
find /www/example.com -name ".user.ini" -exec ls -la {} \;
find /www/example.com -name ".user.ini" -exec cat {} \;
# 正常环境这个文件通常不存在或为空,出现 auto_prepend_file 就要高度警惕
# 确认异常后删除(文件可能带 immutable 属性,先解锁)
chattr -i /www/example.com/.user.ini && rm -f /www/example.com/.user.ini
# 顺着 auto_prepend_file 指向的文件找到木马本体一并处理
第三条线:计划任务和入口。挂马最烦人的不是找到木马,是删完复活。攻击者会在 crontab 里挂定时任务定期重写文件,或者 WebShell 改了系统文件。所以第三步要把持久化点清干净:查所有 crontab、systemd timer、以及 /tmp 和 /var/tmp 里的可疑可执行文件。最后改掉所有相关密码(面板、FTP、数据库、后台管理员),收尾。
# 清点持久化入口
crontab -l && ls -la /etc/cron.d/ /var/spool/cron/
systemctl list-timers --all | head
ls -la /tmp /var/tmp | grep -vE "^d|total"
# 确认无复活:处理后观察 48 小时再跑一遍 mtime 筛查
find /www/example.com -name "*.php" -mtime -1 -ls
应急的完整顺序复盘:先取证(mtime 筛查加特征 grep)、再定点清除(网页文件、.user.ini、木马本体)、然后拔掉持久化(计划任务、后门账号、WebShell)、最后改密码加观察期。平时给站点目录上 immutable 锁(网站根目录文件日常不该被写)、关掉危险函数、定期异地备份,这三件事做在前面,挂马概率会低一个量级。应急处理完别忘了向搜索引擎和浏览器安全平台提交复检申请,不然红标还挂着,流量照样跑光。
相关阅读:挂马是安全类故障里最急的。《服务器故障排查总纲:按现象反查的五层定位法》应急处置一节把挂马、CC、被劫持的先后顺序排好了,本篇管取证细节,总纲管全局节奏。
A5创业网 版权所有