首页/安全/应急响应速查/Webshell 定位与清除

Webshell 定位与清除

清除关键在「先找全再删干净」:修改时间、特征函数与访问日志三路交叉定位,删后复扫并观察。

应急响应速查安全更新于 2026-10-13

Webshell 定位与清除

Webshell 是攻击者留在 Web 目录里的一个脚本入口,通过它执行命令、传文件、连数据库。清除的关键不在删除动作,而在「先找全、再删净、后验证」:只删发现的那一个,几乎一定复发。找全的方法是用三条线索交叉:文件的时间特征、脚本里的高危函数特征、以及访问日志里对可疑文件的请求。三路交叉命中的文件,误报率最低。

基本信息

常见形态随机命名的 .php、图片目录里的可执行文件、伪装成缓存或日志的文件
内容特征eval、assert、system、shell_exec、base64_decode,以及字符拼接混淆
时间线索mtime 与 ctime 落在入侵窗口内,或与访问日志中的首次请求时间吻合
日志线索访问日志里对同一脚本的 POST 请求,参数很长或含编码内容
复验要求删除后全量复扫,并在观察期内确认没有重新生成
关联入口上传接口、框架漏洞、后台弱口令,不修入口等于给攻击者留回头路

典型使用场景

  • 安全设备告警提示 Web 目录存在可疑脚本,需要确认真伪与范围
  • Web 服务器出现异常出站连接,怀疑由脚本触发
  • 站点被挂马或被跳转,需要清理后门脚本
  • 网站被列入黑名单,需要清理并提交复查
  • 清理完成后做复扫与观察,为业务方提供可验证的收尾证据

三路交叉定位

三路交叉定位
find /www/wwwroot -type f -name '*.php' -mtime -30 -printf '%TY-%Tm-%Td %TH:%TM %s %p\n' 2>/dev/null | sort | head -n 40   # 1 时间线索
grep -RnE 'eval\(|assert\(|base64_decode\(|shell_exec\(|passthru\(' /www/wwwroot --include='*.php' -l 2>/dev/null | head -n 40   # 2 内容特征
grep -RhoE 'POST /[^ ]+\.php' /var/log/nginx/access.log 2>/dev/null | sort | uniq -c | sort -rn | head -n 20   # 3 访问日志
find /www/wwwroot -type d \( -name uploads -o -name cache -o -name data \) -exec ls -lt {} + 2>/dev/null | head -n 20

判定与动作

命中线索判定动作
三路同时命中几乎可确定是 webshell复制样本与日志片段留证,再删除并复扫
内容特征命中、时间久远可能是框架正常用法人工读文件,与同版本框架源码比对
仅时间线索命中多为正常发布或上传核对发布记录与文件内容后再决定
仅日志线索命中需要定位文件本体在日志中取完整路径与参数,直接查看该文件
文件被删但日志仍在请求可能还有未发现的副本全量复扫并检查上传目录、缓存目录
发现一处要按「必然还有第二处」处理:webshell 通常成组投放,分散在多个目录,还会在上传目录、缓存目录里留副本。删除后必须全量复扫,并在观察期内复查是否重新生成。
删除之前先留证:把文件内容、mtime、ctime、所在路径与访问日志中的相关请求一起复制到独立目录。这些材料既能说明攻击者如何利用,也是恢复与追责的依据。

留证、删除与复扫

留证、删除与复扫
mkdir -p /evidence/webshell
cp -a /www/wwwroot/shell.php /evidence/webshell/                # 先复制样本与属性
stat -c '%n %s %y %z' /www/wwwroot/shell.php | tee -a /evidence/webshell/meta.txt
sha256sum /evidence/webshell/shell.php | tee /evidence/webshell/sample.sha256
rm -f /www/wwwroot/shell.php                                    # 确认样本留存后再删除
find /www/wwwroot -name '*.php' -newermt '-30 days' -exec grep -lE 'eval\(|assert\(' {} + 2>/dev/null | head -n 20   # 复扫
ls -lt /www/wwwroot/uploads /www/wwwroot/cache 2>/dev/null | head
清理只解决「现在」,不解决「将来」:Webshell 的入口通常是上传校验缺失、框架已知漏洞或后台弱口令。清理完成后要一并修入口、更新组件、重置后台凭据,否则几天内会再次落地。
清理动作本身也要记录:删除了哪个文件、什么时间、依据是哪条线索、由谁执行。观察期结束后把删除清单与复扫结果一起交付业务方,清理工作才算形成闭环。

易错点

  • 只按文件名找:随机命名的脚本容易漏,必须结合内容特征与访问日志三条线索
  • 删完不复扫:残留的第二个副本会立即重新利用,造成反复处置
  • 凭关键字直接删除文件:框架正常使用 eval 的场景会造成业务中断,应先人工确认
  • 只清 Web 目录不看日志:无法确认攻击者通过哪个入口投放,也就无法封堵复发路径
  • 删除前不留证:文件内容与时间戳是判定利用方式的关键材料,删掉就补不回来

数据来源与参考

  • MITRE ATT&CK T1505.003 Web Shell
  • OWASP:Web Shell 检测与处置建议

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌