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

MySQL 密碼找回實戰:利用 PASSWORD() 函數反推明文密碼

     編輯:MySQL 資料庫相關知識

遺忘 MySQL root 密碼時,若已有其他管理員帳號登入權限,可通過 mysql.user 表的加密密碼值反推明文。本文演示利用 PASSWORD() 函數對比破解的實戰技巧。

現場狀況:user 表密碼欄位解讀

mysql> SELECT user, password, host FROM mysql.user;
+------+------------------+-----------+
| user | password         | host      |
+------+------------------+-----------+
| root | 773359240eb9a1d9 | localhost |
| root |                  | fsailing1 |
| root |                  | 127.0.0.1 |
| root | 309e1248634a4f61 | %         |
+------+------------------+-----------+

發現:

  • localhost 的 root 有加密密碼 773359240eb9a1d9
  • % 主機的 root 密碼為 309e1248634a4f61
  • 其餘兩個 root 密碼為空(極度不安全)

核心技巧:PASSWORD() 函數驗證明文

MySQL 的 PASSWORD(str) 返回加密後的雜湊值,可用於離線對比:

mysql> SELECT PASSWORD('root');
+------------------+
| PASSWORD('root') |
+------------------+
| 67457e226a1a15bd |
+------------------+

mysql> SELECT PASSWORD('chen');
+------------------+
| PASSWORD('chen') |
+------------------+
| 309e1248634a4f61 |  -- 完全匹配 % 主機的 root 密碼!
+------------------+

結論:% 主機的 root 密碼明文為 chen。

延伸應用:離線字典攻擊腳本思路

# 針對已知雜湊值 773359240eb9a1d9 進行字典爆破
SELECT PASSWORD('candidate1'), PASSWORD('candidate2'), ... 
-- 若某候選結果與目標雜湊一致,即破解成功

⚠️ 安全警示:

  • MySQL 5.7+ 已棄用 PASSWORD(),改用 caching_sha2_password 插件,此法僅適用 5.6 及更早版本。
  • 生產環境嚴禁保留空密碼帳號,必須執行 mysql_secure_installation。
  • 真正忘記 root 密碼時,標準流程是 --skip-grant-tables 啟動後重設密碼,而非暴力破解。

此技巧適合「已知部分帳號密碼、需驗證其他帳號是否同密」的審計場景,而非常規運維手段。

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