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

SQL Injection 進階攻擊與防禦:從資訊蒐集到取得系統權限的實戰剖析

     編輯:關於SqlServer

前言:SQL Injection 的破壞力

資料庫是企業核心資產,SQL Injection 可讓攻擊者繞過驗證、竊取資料、甚至取得作業系統層級控制權。本文以實戰角度剖析攻擊鏈與防禦對策。

資訊蒐集階段:確認注入點與環境指紋

測試 URL:https://www.xxx.com/list.asp?classid=1'
回應錯誤:Microsoft OLE DB Provider for SQL Server error '80040e14' 未關閉的引號...
→ 確認存在 SQL Injection(單引號未過濾)。

利用內建函數蒐集情報

函數用途
@@VERSION取得 Windows 版本、SQL Server 版本、Service Pack 級別
USER_NAME()目前連線使用者
DB_NAME()目前資料庫名稱
HOST_NAME()主機名稱

注入 Payload:1 AND 0<>(SELECT @@VERSION)
錯誤訊息回顯版本資訊:Microsoft SQL Server 2000 - 8.00.760 (Intel X86) ... Standard Edition on Windows NT 5.0 (Build 2195: Service Pack 4)
→ 判斷:SQL 2000 SP3、Windows 2000 SP4。

權限偵測:確認是否為 dbo/sa 權限

Payload:1 AND USER_NAME()='dbo' → 正常回應 → 確認為 dbo。
進一步爆出:1 AND 0<>(SELECT USER_NAME()) → 錯誤回顯 dbo。
dbo 通常隸屬 sysadmin 伺服器角色,意味著擁有最高權限。

進階攻擊:修改系統預存程序新增 sysadmin 登入

利用 db_owner 權限可修改 sp_addlogin、sp_addsrvrolemember 系統預存程序,繞過驗證邏輯直接新增登入並加入 sysadmin 角色。具體步驟:

  1. 刪除原程序:DROP PROCEDURE sp_addlogin
  2. 重建程序移除驗證碼,直接執行 sp_addlogin 核心邏輯。
  3. 同理處理 sp_addsrvrolemember 加入角色。
  4. 呼叫新增登入:EXEC sp_addlogin 'hacker', 'pwd'; EXEC sp_addsrvrolemember 'hacker', 'sysadmin'

註:完整程式碼篇幅極長,核心在於移除 sp_validname、sp_validlang 等驗證呼叫,並允許任意 SID、密碼加密選項。

防禦對策總結

  1. 參數化查詢:徹底杜絕動態 SQL 拼接。
  2. 最小權限原則:Web 應用連線帳號僅授予 db_datareader/db_datawriter,嚴禁 db_owner、sysadmin。
  3. 錯誤訊息不回顯:生產環境關閉詳細錯誤,使用自訂錯誤頁面。
  4. WAF/輸入過濾:部署 Web 應用防火牆,過濾單引號、註解、UNION、系統函數等特徵。
  5. 定期審計權限:檢查 sysadmin 角色成員、db_owner 資料庫角色成員,移除異常帳號。
  6. 修補補丁:SQL Server 2000 SP4 修正了部分擴展預存程序漏洞,務必套用最新補丁。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved