当前位置:首页 >> 网站维护

网站被攻击修复别乱删文件,从应急响应顺序讲起

发布时间:2026-10-16 作者:吉安市云尚网络
简介 网站被挂马后先删文件还是先断网?本文按应急响应正确顺序拆解webshell清除、木马定位与日志回溯,附真实CVE与排查命令。

先做减法:被挂马后最容易踩的三个坑

接到"网站被挂马"的求助,现场往往已经一团乱:运维在删文件,开发在改代码,老板在催恢复。但真正把站搞死的不是木马本身,是应急顺序错了。

第一个坑,一上来就 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,先做个免费检测看看结果。