針對 Windows + IIS + ASP/ASP.NET 經典架構,本文匯總從作業系統、文件系統、IIS、組件、應用層面的纵深加固實踐,核心思想是「最小權限運行、組件最小化、攻擊面收斂、入侵後影響半徑最小化」。
原理: IIS 處理請求時,以「匿名用戶」身份訪問文件系統。若所有站點共用同一匿名用戶(默認 IUSR),一旦某站點被 WebShell 植入,攻擊者即獲得所有站點文件讀寫權限。
site_a_user、site_b_user…,加入 IIS_IUSRS 組,不加入 Users/Guests;Read & Execute、List Folder、Read,寫入權限僅授予上傳目錄/緩存目錄/日志目錄;dir c:\ → 應顯示「拒絕訪問」;僅能操作自身目錄下授權寫入目錄。| 組件 | ProgID / CLSID | 危害 | 處置建議 |
|---|---|---|---|
| WScript.Shell | {13709620-C279-11CE-A49E-444553540000} / Shell.Application | 執行任意命令、啟動進程、讀寫注冊表、網絡操作 — 提權、植入後門核心 | 優先卸載/重命名。業務確不依賴則 regsvr32 /u + 刪除文件;若依賴,雙重重命名(ProgID + CLSID)並記錄映射表 |
| Scripting.FileSystemObject | Scripting.FileSystemObject | 文件系統全盤讀寫 | 權限隔離後風險可控,若無依賴可重命名 |
| MSXML / XMLHTTP | Msxml2.XMLHTTP 等 | 發起 HTTP 請求、下載惡意代碼、SSRF | 現代 ASP.NET 少用,經典 ASP 依賴較多,按需保留 |
| ADODB.Stream | ADODB.Stream | 二進制讀寫、繞過文本編碼檢測上傳 WebShell | 上傳目錄禁用執行權限 + 組件重命名雙重防禦 |
# 1. 導出原註冊表項備份
reg export "HKCR\CLSID\{13709620-C279-11CE-A49E-444553540000}" shell_bak.reg
reg export "HKCR\Shell.Application" shell_app_bak.reg
# 2. 修改 .reg 文件:CLSID 最後一位 +1,ProgID 後綴 _sec
# 3. 刪除原項,導入新項
reg delete "HKCR\CLSID\{13709620-C279-11CE-A49E-444553540000}" /f
reg delete "HKCR\Shell.Application" /f
reg import shell_modified.reg
# 4. 驗證:ASP 頁面 CreateObject("Shell.Application") → 失敗
# 新名稱 CreateObject("Shell.Application_sec") → 業務代碼同步修改
GetObject("WinNT://") 枚舉用戶/進程,切斷偵察鏈路;*.asp/*.aspx/*.php 處理程序,或 web.config 設置 <handlers accessPolicy="Read, Script"> 排除上傳目錄。結語: Windows 服務器安全無銀彈,權限隔離是基石,組件清理是利刃,應用加固是盾牌。將「每個站點一個專用匿名用戶 + NTFS 顯式拒絕跨目錄訪問」落地,再疊加高危組件重命名/卸載、上傳目錄無執行、WAF 防護,即可將單站點被植入 WebShell 的影響半徑壓縮至「僅該站點授權寫入目錄」,實現「入侵不可避免,災難可控制」的工程目標。