网站被攻击修复别乱删文件,从应急响应顺序讲起
先做减法:被挂马后最容易踩的三个坑
接到"网站被挂马"的求助,现场往往已经一团乱:运维在删文件,开发在改代码,老板在催恢复。但真正把站搞死的不是木马本身,是应急顺序错了。
第一个坑,一上来就 rm -rf 删木马。木马删了,入侵入口还在,攻击者几小时后再传一个,甚至你删的是攻击者故意留的诱饵,真正的后门藏在框架 vendor 目录里。
第二个坑,只扫根目录。ThinkPHP 站点的马经常藏在 runtime/、public/upload/,Laravel 的马藏在 storage/logs/ 伪装成日志。只扫 /www/wwwroot/xxx.com/*.php 会漏掉八成。
第三个坑,不看日志直接重装。重装确实能清干净,但攻击者怎么进来的没搞清,同一批被扫的站下周还会被同一套 payload 打穿。
下面按正确顺序讲一遍。
第一步:保留现场,别急着断网也别急着删
发现被挂马后,第一动作是快照。云服务器直接做磁盘快照,物理机至少把 /www/wwwroot、/var/log/nginx、/etc/passwd、crontab 打包留一份。
用这条命令按修改时间捞最近被动过的 PHP,木马通常是最新落地的那个:
find /www/wwwroot -name "*.php" -mtime -7 -type f
如果站点是 ThinkPHP,重点看 runtime/ 和 public/;如果是宝塔面板,/www/wwwroot/xxx.com/public/upload/ 下出现任何 .php 都直接标记,正常业务上传目录不该有可执行PHP。
ls -la /www/wwwroot/xxx.com/public/upload/ | grep -E ".(php|phtml|pHp)$"
第二步:定位入口,三个真实CVE对上号
入口判断靠日志加版本。三个高频漏洞:
- CVE-2018-20062,ThinkPHP 5.0.23及以下、5.1.31及以下。攻击特征非常规整:
POST /index.php?s=/index/ hinkpp/invokefunction,body 里function=call_user_func_array,参数指向system或file_put_contents。日志里同一IP会连续几十次请求,UA 常见python-requests或干脆空白。 - CVE-2021-3129,Laravel 8.4.2及以下配合 Ignition 2.5.1及以下。攻击路径
/_ignition/execute-solution,利用 phar 反序列化写文件,落地的马常伪装成vendor/laravel/framework/src/Illuminate/Support/xxx.php。 - CVE-2017-9841,PHPUnit 4.8.28之前、5.6.3之前。老项目
vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php没删,直接POST过去就是命令执行,批量扫描器最爱。
版本对上了,日志里搜对应路径,能直接锁定攻击IP和时间点。WebLogic 站还要搜 %252e%252e 这种双重编码的路径穿越。
第三步:日志逐行看,一句话木马怎么暴露自己
Nginx access.log 里,一句话木马的请求长度和正常页面差很多。正常PHP页面响应几KB到几十KB,木马响应往往几百字节甚至几十字节。
关注这些POST参数名:z0、cmd、pass、c、x,值多为 base64 或 assert。一条典型记录长这样:
1.2.3.4 - - [12/Mar/2024:03:17:22 +0800] "POST /public/upload/202403/a8f3.php HTTP/1.1" 200 42 "-" "Mozilla/5.0"
半夜三点、上传目录、POST、响应42字节,四个特征凑齐,这个文件基本可以确定是马。用特征匹配批量扫一遍:
grep -rEn "eval(|assert(|base64_decode(|\$_(POST|GET|REQUEST)[" /www/wwwroot/xxx.com --include="*.php"
注意排除框架自带的合法用法,ThinkPHP 内核里就有 call_user_func_array,别误删。判断标准是:这个文件是不是业务代码?是不是最近才出现?
第四步:清除与加固,顺序不能反
确认入口和木马后,处理顺序是:先封攻击IP和入口路径,再删马,最后补漏洞。
删马之前先记录每个木马的路径、大小、MD5,方便事后对比是否清干净。删完用 find 再扫一遍,同时检查 crontab、/etc/rc.local、SSH authorized_keys,这三处是持久化重灾区。
然后才是打补丁:ThinkPHP 升到 5.0.24+ / 5.1.32+,Laravel 升到 8.4.3+ 并删除 Ignition,老项目直接删 vendor/phpunit。最后检查上传目录有没有禁掉 PHP 解析,Nginx 加一条 location ~ /upload/..php$ { deny all; } 能挡掉一大半后续利用。
全部做完再重启服务,不要中途重启,重启会丢内存里的可疑进程线索。
写在最后
这类问题排查思路大致如上,顺序比工具重要。如果拿不准自己的站有没有中招,可以联系:电话 18316973247,微信 yswl898,先做个免费检测看看结果。
- 上一篇:服务器PHP后门清除后又被二次感染怎么办?排查与修复思路
- 下一篇:没有了!
推荐阅读
- 网站被攻击修复别乱删文件,从应急响应顺序讲起 2026-10-16
- 服务器PHP后门清除后又被二次感染怎么办?排查与修复思路 2026-10-16
- 网站清理网页解密与高危漏洞修复服务对比 2026-10-16
- 服务器被黑如何修复?网站运维与网站修复实战指南 2026-10-16
- 网站木马清除:别等搜索引擎拉黑才后悔 2026-10-15


