护网实战:漏洞修不好,网站不能关,杀毒扫不掉?用“秒删”脚本硬刚Webshell

admin 2026-07-03 05:57:55 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文介绍护网实战中应对Webshell的秒删脚本方案。针对漏洞无法修复、网站不能停摆、杀毒软件扫不掉的困境,提出通过脚本在文件落地瞬间删除高危后缀文件(如.jsp/.php/.asp),不依赖特征库或规则。提供Linux和Windows系统具体实现步骤,并建议配置开机自启及配合目录禁止执行权限实现双保险。该方案是5分钟内可落地的紧急止血措施。 综合评分: 80 文章分类: 应急响应,红队,内网渗透,WEB安全,安全运营


cover_image

护网实战:漏洞修不好,网站不能关,杀毒扫不掉?用“秒删”脚本硬刚Webshell

原创

流量名侦探 流量名侦探

流量名侦探

2026年7月2日 07:40 山东

在小说阅读器读本章

去阅读

前言:护网人最绝望的三重困境

护网行动中,如果你突然收到告警:服务器被上传了Webshell

紧接着你面临的是三座大山:

  1. 漏洞无法修复——开发说要排期,代码不敢动
  2. 网站不能停摆——业务一分一秒都断不得
  3. 杀毒软件扫不掉——免杀Webshell过掉了所有引擎,或者文件藏得太深

眼看着攻击者可能随时执行命令、拖库、横向扩散,你能做什么?

答案是:让他传,但让他传了个寂寞。

今天这篇文章,分享一个护网实战中屡试不爽的“歪招”——秒删脚本。既然我修不好漏洞,那我就让你的Webshell落地即消失,连URL都来不及敲,文件就没了。

一、为什么“秒删”比杀毒软件更管用?

| 方案 | 原理 | 局限性 | | — | — | — | | 杀毒软件 | 特征库匹配 | 免杀Webshell分分钟绕过,0day根本识别不了 | | WAF拦截 | 流量特征检测 | 加密流量(冰蝎、哥斯拉)根本看不懂 | | 定时查杀 | 定时扫描目录 | 攻击者几秒内就执行完了命令,你扫到已经晚了 | | 秒删脚本 | 文件落地瞬间删除 | 不依赖特征库,不依赖规则,纯物理删除 |

秒删的核心优势在于:不管你是免杀马还是0day马,只要后缀是 .jsp/.php/.asp,落地就删。 简单粗暴,但极其有效。

二、适用场景(真实护网案例)

  • 老系统存在文件上传漏洞,但代码没人敢动
  • 业务7×24小时不能中断,没法停机修复
  • 查杀工具扫不出Webshell(冰蝎/哥斯拉内存马或免杀变种)
  • 攻击者自动化批量上传,人工根本来不及删
  • 护网期间溯源需要保留样本,但又不能让文件存活

遇到以上任意一条,“秒删”就是你最后的防线。

三、实战方案一:Linux系统

第一步:创建秒删脚本

cat >&nbsp;/root/kill_webshell_loop.sh <<&nbsp;'EOF'#!/bin/bash
WATCH_DIR="/var/www/html/uploads"LOG_FILE="/var/log/ultra_fast_delete.log"
echo&nbsp;"========================================"&nbsp;>>&nbsp;"$LOG_FILE"echo&nbsp;"[$(date '+%Y-%m-%d&nbsp;%H:%M:%S')] 循环秒删监控已启动(无inotify版本)"&nbsp;>>&nbsp;"$LOG_FILE"
while&nbsp;true;&nbsp;do&nbsp; &nbsp; find&nbsp;"$WATCH_DIR"&nbsp;-type f \( \&nbsp; &nbsp; &nbsp; &nbsp; -name&nbsp;"*.jsp"&nbsp;-o -name&nbsp;"*.jspx"&nbsp;-o \&nbsp; &nbsp; &nbsp; &nbsp; -name&nbsp;"*.php"&nbsp;-o -name&nbsp;"*.php[0-9]"&nbsp;-o -name&nbsp;"*.phtml"&nbsp;-o \&nbsp; &nbsp; &nbsp; &nbsp; -name&nbsp;"*.asp"&nbsp;-o -name&nbsp;"*.aspx"&nbsp;-o -name&nbsp;"*.ashx"&nbsp;-o -name&nbsp;"*.asmx"&nbsp;-o \&nbsp; &nbsp; &nbsp; &nbsp; -name&nbsp;"*.cer"&nbsp;-o -name&nbsp;"*.cdx"&nbsp;-o -name&nbsp;"*.asa"&nbsp;\&nbsp; &nbsp; \)&nbsp;2>/dev/null&nbsp;|&nbsp;while&nbsp;read&nbsp;FILE;&nbsp;do&nbsp; &nbsp; &nbsp; &nbsp; rm -f&nbsp;"$FILE"&nbsp;2>/dev/null&nbsp; &nbsp; &nbsp; &nbsp; echo&nbsp;"[$(date '+%Y-%m-%d&nbsp;%H:%M:%S.%3N')] DELETED:&nbsp;$FILE"&nbsp;>>&nbsp;"$LOG_FILE"&nbsp; &nbsp; done&nbsp; &nbsp;&nbsp;sleep&nbsp;0.5&nbsp; &nbsp;# 每0.5秒扫描一次doneEOF
chmod&nbsp;+x&nbsp;/root/kill_webshell_loop.sh

第二步:后台运行

nohup&nbsp;/root/kill_webshell_loop.sh >> /var/log/ultra_fast_delete_nohup.log 2>&1 &

第三步:验证测试

touch&nbsp;/var/www/html/uploads/shell.jspls&nbsp;-la /var/www/html/uploads/shell.jsp# 输出:No such file or directory —— 秒删成功!

四、实战方案二:Windows系统

第一步:创建秒删脚本

# ============================================# 文件名: C:\kill_webshell_fast.ps1# 功能: 极速秒删(带微秒级重试,无备份阻塞)# 运行: powershell -ExecutionPolicy Bypass -File C:\kill_webshell_fast.ps1# ============================================
# ---------- 配置 ----------$watch_dir&nbsp;=&nbsp;"D:\webapps\upload"$log_file&nbsp;=&nbsp;"C:\ultra_fast_delete.log"
# 清空旧日志(或保留追加)"========================================"&nbsp;|&nbsp;Out-File&nbsp;$log_file&nbsp;-Append"[$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss.fff')] 极速监控已启动"&nbsp;|&nbsp;Out-File&nbsp;$log_file&nbsp;-Append
# ---------- 创建监控器 ----------$watcher&nbsp;=&nbsp;New-Object&nbsp;System.IO.FileSystemWatcher$watcher.Path =&nbsp;$watch_dir$watcher.IncludeSubdirectories =&nbsp;$true$watcher.EnableRaisingEvents =&nbsp;$true
# ---------- 定义删除动作(无备份,纯删除) ----------$action&nbsp;= {&nbsp; &nbsp;&nbsp;$path&nbsp;=&nbsp;$Event.SourceEventArgs.FullPath&nbsp; &nbsp;&nbsp;$ext&nbsp;= [System.IO.Path]::GetExtension($path)
&nbsp; &nbsp;&nbsp;# 匹配高危后缀&nbsp; &nbsp;&nbsp;if&nbsp;($ext&nbsp;-match&nbsp;'\.(jsp|php|asp|aspx|jspx|php5|phtml|cer|cdx|asa|ashx|asmx)$') {&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;$deleted&nbsp;=&nbsp;$false
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;# ===== 核心:毫秒级重试循环(尝试20次,每次等待10ms) =====&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;for&nbsp;($i&nbsp;=&nbsp;0;&nbsp;$i&nbsp;-lt&nbsp;20;&nbsp;$i++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;try&nbsp;{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;# 用 .NET 原生方法直接删除,比 Remove-Item 快数倍&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [System.IO.File]::Delete($path)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;$deleted&nbsp;=&nbsp;$true&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;break&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp;catch&nbsp;{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;# 文件被占用(正在上传或扫描),等待10ms后重试&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;Start-Sleep&nbsp;-Milliseconds&nbsp;10&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;# ---------- 记录结果(不影响删除速度) ----------&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;$time&nbsp;=&nbsp;Get-Date&nbsp;-Format&nbsp;"HH:mm:ss.fff"&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;if&nbsp;($deleted) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;$msg&nbsp;=&nbsp;"[$time] 秒删成功:&nbsp;$path"&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp;else&nbsp;{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;$msg&nbsp;=&nbsp;"[$time] 删除失败(可能已移走):&nbsp;$path"&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;# 输出到控制台(方便前台调试)&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;Write-Host&nbsp;$msg&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;# 写入日志文件&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;Add-Content&nbsp;-Path&nbsp;$log_file&nbsp;-Value&nbsp;$msg&nbsp; &nbsp; }}
# ---------- 绑定事件(两种方式都绑,覆盖创建和修改) ----------Register-ObjectEvent&nbsp;$watcher&nbsp;"Created"&nbsp;-Action&nbsp;$action&nbsp;-SourceIdentifier&nbsp;"FastKill"Register-ObjectEvent&nbsp;$watcher&nbsp;"Changed"&nbsp;-Action&nbsp;$action&nbsp;-SourceIdentifier&nbsp;"FastKillChange"
Write-Host&nbsp;"========================================"&nbsp;-ForegroundColor&nbsp;GreenWrite-Host&nbsp;"极速秒删已就绪!"&nbsp;-ForegroundColor&nbsp;GreenWrite-Host&nbsp;"监控目录:&nbsp;$watch_dir"&nbsp;-ForegroundColor&nbsp;YellowWrite-Host&nbsp;"按 Ctrl+C 退出"&nbsp;-ForegroundColor&nbsp;GrayWrite-Host&nbsp;"========================================"&nbsp;-ForegroundColor&nbsp;Green
# 保持脚本在前台运行(Ctrl+C 可退出)while&nbsp;($true) {&nbsp;Start-Sleep&nbsp;-Seconds&nbsp;1&nbsp;}

第二步:后台运行(管理员权限)

&nbsp;powershell&nbsp;-ExecutionPolicy Bypass -File&nbsp;"C:\kill_webshell.ps1"

五、护网特别提醒:不要删了就完了!

1. 配置开机自启

确保服务器重启后秒删脚本自动运行:

  • Linux:配置systemd服务
  • Windows:用NSSM注册为服务

2. 配合“目录禁止执行”使用(双保险)

秒删存在微小的“时间窗口”,最稳妥的做法是同时禁止上传目录执行脚本

  • Nginxlocation ~* /uploads/.*\.(php|jsp)$ { return 403; }
  • IIS:取消上传目录的“脚本”执行权限

双重保险,让攻击者彻底绝望。

结语

护网是一场攻防不对等的对抗。攻击者可以24小时自动化扫描、上传、利用,而防守方往往受限于业务稳定、变更流程、漏洞修复周期,有力使不出。

在这种困境下,“秒删”不是最优解,但它是你能在5分钟内落地的最强止血方案。 它不依赖漏洞修复、不依赖杀毒特征库、不依赖业务停机,纯粹从物理层面阻止Webshell存活。

你传任你传,我删不留痕。

希望这套方案能在护网实战中帮到你。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:流量名侦探 流量名侦探 流量名侦探《护网实战:漏洞修不好,网站不能关,杀毒扫不掉?用“秒删”脚本硬刚Webshell》

评论:0   参与:  0