资讯动态

Webshell查杀工具盘点与应急响应实战指南

发布时间:2026/10/20 6:44:45 来源:尧图企业网站定制
做应急响应最怕的不是攻击者多高明而是站点都被人拿走权限、种了好几个Webshell你还在那翻日志找入口。我处理过不少被挂马的现场基本流程都差不多先断网隔离、再翻访问日志、然后全盘扫描可执行文件其中Webshell查杀这一步直接决定你后面是“找到入口”还是“拆东墙补西墙”。这一篇是应急响应系列的第3篇前面聊了整体响应流程和日志分析的思路这篇就把最常见的Webshell查杀工具从头到尾捋一遍包括它们各自适合什么场景、怎么用、误报怎么处理以及我踩过的一些坑。目标很简单不管你是刚入门的运维还是已经在做应急响应的人看完这篇文章都能直接上手排一套查杀方案。1. 别急着上工具先搞懂Webshell查杀到底在查什么1.1 什么是Webshell常见的形态有哪些Webshell本质就是一个放在Web目录下的恶意脚本文件攻击者通过Web请求来触发它执行系统命令、读写文件、反弹连接相当于在服务器上留了一个持久化的“小后门”。按照运行环境来分最常见的几类PHP类最常见主打一句话木马配合各种变形和加密混淆常见函数有eval、assert、system、call_user_func等。ASP/ASPX类常见于Windows IIS环境老系统比较多也是重灾区。JSP类多见于Java应用Tomcat、Spring Boot等场景这几年因为内存马的火热JSP Webshell也多了起来。还有一类是“内存马”不落地文件直接注入到运行中的进程里传统文件查杀工具根本扫不到这个后面单独说。1.2 查杀工具的三层原理特征正则、语义分析、行为检测现在市面上绝大多数Webshell查杀工具都是基于下面三种原理中的一种或组合来实现的。特征正则匹配这个最简单也最直接。工具内置一堆规则比如eval(、base64_decode(、assert(这些敏感函数组合再配合一些常见的恶意代码特征字符串直接扫文件内容命中就算可疑。优点是速度快缺点也明显只要攻击者稍微把代码拆开、拼接、编码正则就废了一大半。AST语义分析则是把PHP、ASPX这类脚本做语法树解析也就是说它不追求“字符串长得像不像”而是看这个代码到底“干了什么”。比如你在文件里写了一句$aev.al; $a($_POST[x]);正则可能被绕过去了但语义分析能看出这是一个动态调用执行变量且参数来自外部输入这个组合就已经非常接近恶意行为。这种方式误报会多一些但查杀能力确实上了一个台阶。行为检测用得最少但也最重通常是丢到沙箱里跑一下看代码有没有去连外网、写文件、执行系统命令等危险行为。适合对付未知变种和新型Webshell缺点是没法在海量文件全量扫的场景里大规模用因为性能开销太高了。注意没有哪个工具能保证100%不漏报所以应急的时候从来不是“只靠一个工具定生死”而是多工具交叉验证再用人工确认最后辅以日志做链路还原。工具告诉你“这里有问题”但真正决定问题是不是问题的永远是人。2. 常见Webshell查杀工具盘点与适用场景2.1 Windows环境的首选本地图形化工具如果你面对的是Windows Server IIS的环境比如某企业老的ASP站点被挂了马那我建议先用本地图形化工具扫一遍。D盾是比较老牌的一个查杀工具主要跑在Windows上现在支持对PHP、ASP、ASPX等文件的扫描。它的特点是很“实在”能按目录扫、按文件扫查杀结果会直接告诉你文件路径、可疑等级和命中规则。它自带的规则库同时覆盖了一部分常见木马的特征对于出了一些不太复杂的Webshell它是能顶上去的。缺点也明显只能装在Windows而且要一台机器一台机器跑不太适合批量运维。安全狗的Webshell查杀模块也值得说它本身是服务器安全软件带了查杀和网站防护功能能实时监控Web目录的文件变化。在应急的时候先用安全狗的全盘查杀功能跑一遍再看一下它有没有在入侵当时就拦下什么请求这块信息量往往比单纯扫文件还大因为日志里能看到攻击者当时尝试传了什么东西上来。用这类GUI工具的时候我有个习惯了扫描前先给被查目录做一个只读快照或至少备份一份。万一工具误杀把业务代码给删了你还能回滚不至于让业务马上挂掉。2.2 Linux环境下更常用命令行查杀工具搞应急的人都知道线上服务器至少七八成是Linux环境Web目录基本都是Nginx/Apache PHP这套体系。在这种环境里哪怕Windows下的工具再强你也得有个能在命令行里跑的东西。河马查杀算是目前用得比较多的命令行查杀工具了支持Linux、Windows有离线版也有在线版。它的兼容性做得很好常见的云主机、虚拟主机都能装扫一个PHP站点基本上几十秒到几分钟就出结果了。输出结果直接给出等级标记恶意、可疑、提示定位到行号配合人工审计非常顺手。而且它的规则库更新频率高对一些网上公开的常用木马识别率很高。牧云或各种云主机安全Agent也值得关注。很多企业服务器已经装了云主机安全Agent这类Agent通常带了Webshell检测和文件监控能力能基于hash、内容和行为来识别恶意脚本。应急的时候直接拉Agent的控制台看它检出的webshell列表比自己全盘扫描快得多。但这个前提是业务侧在入侵发生前就已经装好了Agent像“裸奔”很久的服务器就别指望这个了只能老老实实本地扫。2.3 开源工具与YARA规则灵活但需要一定门槛如果不想依赖商业工具那开源形态的查杀工具和规则就是很好的补充。YARA规则本质上是一套基于字符串和二进制特征的模式匹配框架。你可以自己写规则比如匹配某个已知木马的特征字符串也可以直接用社区里公开的Webshell识别规则库去扫文件。YARA的灵活之处在于它能自由定义扫描目标不只扫Web目录还可以对整个磁盘做批量匹配。给你一个最基本的命令行用法示例# 安装yara apt install yara # 假设有个规则文件webshell.yar yara webshell.yar /var/www/html/但YARA的缺点是你需要有规则如果规则没人维护那它查杀能力就非常依赖你自己的判断和积累。所以更实际的用法是先用河马这类工具扫一遍再用YARA做一个二次覆盖尤其是针对已经确认的样本提取特征再去全盘扫这样能保证“同一马的不同副本”都被收拾干净。2.4 在线查杀平台和沙箱对付疑难杂症的最后手段本地工具全灭、但你又觉得某个文件不对劲的时候把它丢到在线查杀平台上看一眼往往是最后的杀手锏。这类平台通常集合了多个引擎或者有云端沙箱和大数据样本库能针对你上传的单个文件做深度检测告诉你这个文件是否恶意、行为是什么、分析报告里甚至能看到它的网络外连地址。不过在线平台有个天然的坑不要拿敏感核心文件去传。你要是把某银行客户端的代码传到外部沙箱里那等于自己给自己制造泄露风险。所以一般我只推荐拿“已经明确是木马或者高度可疑、且不涉及业务敏感内容”的文件上去分析目的主要是为了确认威胁类型、提取情报而不是为了大范围扫描。工具类型典型场景优势短板本地GUI工具D盾、安全狗等Windows IIS单机处理上手快适合现场排查不能批量平台绑定命令行工具河马Linux环境批量扫描输出清晰速度快适合脚本化规则库依赖厂家更新云Agent已部署Agent的主机实时检测自带历史告警部署前无效要装agentYARA自建规则已知样本批量打捞高度灵活完全可控门槛高规则维护成本大在线沙箱疑难样本分析检测深度高情报丰富有数据泄露风险3. 工具交叉验证与误报处置别把业务代码当木马杀了3.1 为什么不能迷信单个工具的“未发现恶意”任何一个Webshell查杀工具本质上都由“规则库”和“检测引擎”组成。规则库是人写的检测引擎有局限这决定了不可能存在一个完美的查杀工具。漏报就不用说了攻击者拿到一套免杀马专门绕过市面上公开的特征库那引擎大概率是扫不出来的。而误报则是另一个更坑人的方向。你生产环境的代码里如果用了某些加密组件、混淆器或者某些老旧的框架自带了一批看起来很像后门的函数查杀工具就会毫不犹豫地把它们标成“恶意”。以前我遇到过一个站点装了一套加密的第三方支付插件D盾直接把它标成“病毒”一大片业务代码全红了。如果这时候你手一抖点了“自动处理”核心业务就没了而且连备份都没做那就等着哭吧。所以我在应急流程里强制自己遵守一个原则工具只出候选名单人做终审。3.2 误报文件的三个确认维度拿到一个查杀工具报“恶意”的文件怎么判断它到底是真马还是良民我一般按下面三个维度来确认。第一看文件来源。这家网站的代码是谁放的这个文件的时间戳是不是对得上某次已知的发布记录如果一个文件时间戳很新、目录结构里又很突兀比如/uploads/目录下多了一个1.php那即使内容看起来“没毛病”也要重点怀疑。第二看代码逻辑。直接用编辑器打开文件看一个真正的Webshell通常都有“接收输入→执行/写文件/连接外网”这样的链路。哪怕它做了加密和变形最终总要调用系统函数。如果看到$_REQUEST、$_POST这类超全局变量再加上eval、assert、system、exec、shell_exec等危险函数甚至出现了从外部获取数据之后base64_decode再执行基本可以直接定性。第三尝试跑一下文件名和访问路径。你可以把可疑文件放到隔离环境做一次模拟请求。如果它在请求后会生成新的文件、修改文件权限、或者尝试向外部IP发起连接那基本可以实锤了。3.3 查杀只是应急的一半另一半是溯源很多刚做应急的同学发现Webshell之后就特别兴奋直接把文件一删觉得“事情解决了”。但我要泼一盆冷水Webshell只是攻击者留下的后门不是攻击入口。你把后门关了入口还开着攻击者随时可以再传一个新的上来甚至比你删得还快。所以查杀工具出具结果之后下一步一定是回到日志分析里去追攻击链。思路大概是从Webshell文件创建/修改时间出发往前看当时有没有对应的上传行为上传接口是否存在漏洞再往后看Webshell被访问的时间段里攻击者执行了哪些命令、有没有提权、有没有横向移动。把整个链路还原清楚这个应急才算真正闭环。提示如果时间紧、系统大建议用下面这个顺序先容器/快照隔离再备份可疑目录然后工具全盘扫描拿到候选名单后人工复核确认第一批后立刻封堵入口并清理等日志分析结果出来后补全剩余的木马和权限问题。顺序搞反了就会遇到“边扫边被重新上传”的尴尬局面。4. 实战复盘一次典型的Webshell查杀全过程4.1 事件背景与初步判断有次处理一家公司的站点现象是服务器CPU一直飙高业务方反馈访问首页越来越慢数据库连接数也异常。最开始运维怀疑是慢查询结果查了一圈发现是有人把后端机器当成矿机在跑。我的处理流程是这样的先看进程列表发现一个异常PHP进程一直在跑命令行的启动参数指向了/var/www/html/upload/logo.php这个文件明显是可疑的。直接把它kill掉然后开始对Web目录做全盘查杀扫描。4.2 查杀工具的实施步骤与输出验证我同时开了河马和D盾在那台服务器上用得顺手先对/var/www/html/整体扫一遍。河马很快报出两个恶意文件一个是upload/logo.php另外一个是cache/tpl_compile/xxx.php后者是模板编译缓存目录平时很少有人关注其实那也是重灾区。D盾这边则额外报了好几个可疑文件大部分是业务里用了加密函数导致的误报我逐个看了一遍确认其中一个是历史版本留下的测试脚本没有任何外部调用直接在白名单处理了。这里插一句扫描时/tmp、/var/tmp、上传目录、cache、logs等目录最容易藏东西。很多免杀马就埋在那些看起来人畜无害的路径里。工具默认可能要过一遍但最好还是手动把这些目录加入扫描重点甚至单独对它们做一次规则更严格的针对性扫描。4.3 人工复核与细节定位文件列表拿到后我逐个打开可疑文件。那个logo.php的内容非常典型一段base64_decode之后的字符串被eval直接执行解码后看到了fsockopen和exec调用。这就已经够了不用等沙箱结论直接实锤。它的进程里还有挖矿行为所以攻击者进来的时间应该不短了Webshell极有可能不止这一个。于是我把这个文件的特征提取出来拿YARA自己写了一条规则对所有PHP文件再做一次全盘匹配果然又捞出来两个变种副本藏在/tmp/.cache/下面命名还伪装成了.ico文件。工具第一次扫没报它就是因为命名比较隐蔽内容特征也有变异。这算是工具漏报的一种典型情况靠YARA二次扫描补上了。4.4 后续处置与加固Webshell全部确认后开始做清理和加固。顺序是隔离受影响主机避免内网横向扩散。删除所有已确认的Webshell文件并同步清理/tmp下可疑执行文件。封堵攻击源头。回头看日志发现是后台登录接口被爆破成功了攻击者通过弱口令进了后台再利用后台的附件上传功能传了木马。于是强制启用强密码策略、开启登录验证码、限制后台IP白名单。最后用查杀工具再跑一遍确认“干净”并且开启文件完整性监控后续再有Webshell落地会立刻告警。整个过程从发现到清理完成大概花了两三个小时真正拆的时间不算多大头全在“确认攻击路径”和“防止二次返回”上。这也是为什么我一直强调Webshell查杀工具只是执行者人的分析才是应急响应的核心。5. 常见问题与排查技巧实录5.1 工具扫出来了为什么删不掉如果你发现查杀工具报毒了但删除的时候一直提示文件占用或删除失败大概率是下面几个原因。第一Webshell的进程还在运行中或者常驻内存比如PHP-FPM持有这个文件的句柄。你先看下进程列表把相关进程杀掉再删。第二权限问题文件属主是www但你用的是root之外的账号或者目录被设了不可修改的chattr属性用lsattr看一下文件属性把i、a权限先去掉。# 去掉文件不可修改属性 chattr -ia /var/www/html/upload/logo.php第三攻击者做了“文件自恢复”删掉之后马上又被重新写回来。遇到这种情况要特别小心说明服务器上还有其他后门或者计划任务在持续给你“补马”你要先清理计划任务和常驻进程再回头删文件。5.2 日志里完全没有访问记录Webshell为什么不回显你可能会碰到这种情况Webshell文件确认存在但访问日志里找不到对应的HTTP请求记录。原因通常是两个。一是很多Webshell不直接通过Web页面被访问而是由攻击者通过其他工具连接比如用加密流量的客户端这类工具与服务器通信时会把请求伪装成普通静态资源或者干脆走加密协议你的日志里只会看到一堆没意义的随机字符不细看根本发现不了。二是日志被攻击者“洗”过了上传和访问的记录都被针对性删除。这恰恰说明对方是个老手应急时不仅要看日志还要注意日志文件的完整性比如文件是否有非预期的间隙、权限是否被动过。真的想靠日志层面做排查重点不是一条条翻访问日志而是直接做流量侧的分析看可疑时间窗口里有没有长时间保持的异常连接或者与外部IP之间的交互流量明显偏大。没有流量设备的场景至少要把netstat和进程外连情况列出来查一下可疑的TCP连接。# 查看所有外连连接关注ESTABLISHED且连接外部IP的可疑进程 netstat -antp | grep ESTABLISHED | awk {print $5} | sort | uniq5.3 查杀工具全绿就一定安全吗不一定甚至可以说“全绿”是很危险的信号。工具扫不出东西可能原因包括Webshell做了免杀处理特征不在工具库内Webshell是加密变形的Webshell压根不在Web目录下而是以内存马形式存在或者攻击者已经清除了现场痕迹。对于内存马处理思路要从“扫文件”切换到“看Java进程内部”和“看网络监听端口”。比如JVM进程里被动态注入了恶意类你在磁盘上找不到任何文件只能用专业的内存马检测工具或者做线程栈分析才能发现。这个比较高级但应急里现在遇到得越来越多需要单独立项去排查。5.4 常用工具选择速查表场景推荐工具操作要点WindowsIIS站点D盾 / 安全狗先备份再扫描出现大面积误报时要逐条人工复核LinuxPHP站点河马全盘扫一次之后重点目录再单独扫一遍大规模批量主机云主机安全Agent看Agent控制台的检测列表联动封禁已知样本特征复扫YARA提取特征做规则全磁盘匹配疑难杂症分析在线沙箱仅在确保不泄露核心资料前提下使用5.5 查杀时的几个小技巧扫描主机之前先确认系统时间和文件时间是不是准的。如果服务器时钟被篡改文件时间戳会误导你的溯源判断这个基准错了后面全乱。查杀木马时建议断外网或至少做网络访问控制防止木马在你分析期间把敏感数据外传或者被攻击者远程遥控动态更新一波免杀版本。对外提供Web服务的目录不只是webroot本身还有upload、editor、attach、cache、temp这些相关目录它们经常是免杀马的藏身处千万别漏扫。如果是框架类站点比如用了常见CMS或二次开发框架当查杀工具报“框架模板文件可疑”时先对照官方源码hash做比对。完全一致的通常是正常组件内容有变动的再重点看。所有查杀结果都要留档包括扫出来的文件路径、hash值、确认结论和处理动作这个记录对后续复盘和同类事件预警非常有用。我个人在实际操作中的体会有两点一是工具永远是辅助应急响应里真正花时间的从来不是“把它扫出来”而是“把它扫出来之后怎么办”二是查杀要结合日常的监控、备份、日志留存来做等事情发生之后再翻箱倒柜找工具手忙脚乱是常态从容不迫才是少数。最后再分享一个小举一反三的做法每次处理完一起Webshell事件我都会把确认过的样本特征文件hash、关键特征串沉淀到一个私有规则库里这样下次再遇到相似的马第一遍扫描就能快速锁定不用重复做人工分析。这种“一次处理、长期复用”的习惯才是应急响应能力持续提升的真正关键。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑