站点被写入异常 PHP 文件后,官方排查顺序为什么要先看运行目录
官方的处置顺序值得琢磨:先升级到已修复版本,再删除运行目录,检查伪静态重写规则,排查异常 PHP 文件,并说明问题与历史版本漏洞有关。运行目录被放在很靠前的位置,不是偶然——它既是被写入最常见的落点,又多是可再生内容,删掉不伤站点数据,清完还能当复发的参照。
公告里给的处置顺序
顺序本身有逻辑。
| 步骤 | 目的 | 顺序为何在此 |
|---|---|---|
| 升级到修复版本 | 关掉被利用的入口 | 不先升级,清完还会再被写 |
| 删除运行目录 | 清掉常见落点 | 多为可再生内容,删了不伤数据 |
| 检查重写规则 | 看是否被动过 | 规则被改说明不止一处 |
| 排查异常文件 | 找其他落点 | 前两步做完才有干净基线 |
先升级再谈清理,是因为入口没关时清理等于白做。
运行目录为什么要先清
运行目录里通常是缓存、临时编译产物一类的可再生内容,正常站点也能重建,所以把它整体清掉风险低、见效快。它又是攻击者最爱落文件的地方——路径可写、访问直接。先清这里,既最大概率移除已落地脚本,又留下一个「干净基线」,之后再出现异常就能判断是否复发。
伪静态规则为什么会被人动过
重写规则是执行入口之一,被改通常意味着攻击者留了后门,或想让自己的文件被稳定访问。看到规则被动,就不该假设只有这一处被改,要把范围扩大:其它可写目录、计划任务、上传目录都要一并排查。
为什么先看历史版本漏洞
公告里点明问题与历史版本漏洞有关,这决定了排查不能只盯当前文件。被利用的多是旧版本留下的入口,升级到已修复版本是关入口,删运行目录与排查异常文件是清痕迹,两件都要做。只清理不升级,或只升级不排查,都会留下复发的余地。
清完还要确认的两件事
一是备份时间点必须早于入侵时间,否则从备份恢复等于把后门一起恢复回来,这一步靠数据备份与恢复能力来兜底。二是收窄被写入面:防采集干扰码、内容校验与敏感词过滤减少可被利用的输入面,配合认证与转义类防护收住注入与跨站脚本。清文件是止血,收口才是防复发。把这两件事做完,再谈把站点重新放回正常运维节奏。
常见问题
问:不升级只删文件行不行? 不行。入口没关,删完还会被重新写入,升级要放在第一步,清理是紧随其后的第二步。
问:运行目录删了会影响数据吗? 一般是可再生的缓存与临时内容,删掉不影响站点数据;正文与附件另有存储,不在这一层。
问:怎么判断恢复的备份是否干净? 确认备份时间早于最早的可疑改动,恢复后立刻排查重写规则与异常文件,别直接上线。
问:清一次就够吗? 要看是否关了入口。升级到修复版本并收窄被写入面后,复发概率才会真正降下来。