『提权』MySQL数据库提权之UDF提权

一、前情提要


MySQL数据库提权成功的概率基本上是蛮大的,但是它有一定的前提条件:我们所拿到的数据库用户必须为root权限才可以。

本篇文章围绕着MySQL数据库提权之UDF提权展开,至于具体的怎么上传文件到目标机器中的操作,需要具体情况具体分析。


二、三种方法向MySQL添加新函数的方法


(1)可以通过用户定义的函数(UDF)接口添加函数。用户定义的函数被编译为库文件,然后使用CREATE FUNCTION和DROP FUNCTION语句动态添加到服务器或从服务器中删除。

(2)可以将函数添加为本机(内置)MySQL函数。本机函数被编译到 mysqld服务器并永久可用。

(3)添加函数的另一种方法是创建存储的函数。这些是使用SQL语句编写的,而不是通过编译目标代码。


三、UDF


UDF(user-defined function)是MySQL的一个拓展接口,也可称之为用户自定义函数,它是用来拓展MySQL的技术手段,可以说是数据库功能的一种扩展,用户通过自定义函数来实现在MySQL中无法方便实现的功能,其添加的新函数都可以在SQL语句中调用,就像本机函数如ABS()或SOUNDEX()或version() 一样方便。


四、有关UDF的拓展


UDF官方介绍以及其函数定义请参考(Oracle MySQL Search),除了常见的UDF提权外,其实UDF还有更多更广泛的应用,例如mysqludf/lib_mysqludf_preg: Use PCRE regular expressions directly in MySQL (github.com),就提供了非常多的应用:

• lib_mysqludf_fPROJ4:一组扩展的科学函数,将地理经度和纬度坐标转换为笛卡尔坐标,反之亦然。

• lib_mysqludf_json:用于将关系数据映射到JSON格式的函数的UDF库。

• lib_mysqludf_log:用于将调试信息写入日志文件的UDF库。

• lib_mysqludf_preg:直接在MySQL中使用PCRE正则表达式。

• lib_mysqludf_stat:用于统计分析的UDF库。

• lib_mysqludf_str:一个带有MySQL附加字符串函数的UDF库

• lib_mysqludf_sys:具有与操作系统交互的功能的UDF库。这些函数允许您与MySQL运行的执行环境进行交互。

• lib_mysqludf_xml:一个UDF库,用于直接从MySQL创建XML输出。


五、实操:MySQL数据库提权之UDF提权


1、信息搜集


1)这里我们使用大马来作为WebShell,之后的动作便是进行信息搜集,这是一个MySQL+PHP的环境,我们的目的就是通过MySQL进行提权,因此我们先去寻找跟数据库有关的配置文件来搜集到数据库的相关信息,而配置文件一般命名为config.php,如下所示,我们点击Edit:

image


2)可以看到,这个config.php就是数据库的配置文件,从这个配置文件中我们可以看到数据库的用户权限是root,数据库的密码为root,数据库为phpok

image


2、连接数据库


1)点击MYSQL Manager,进入MySQL数据库控制模块,将数据库的密码输入框中,点击Connect,连接数据库

image


2)点击连接之后,会提示我们选择一个数据库,我们选择其中一个数据库之后,出现以下回显,说明此时我们已经成功通过webshell连接到数据库了

image


3、MySQL数据库提权


1)MySQL数据库提权需要利用UDF提权,UDF提权的整个原理主要是建立在MySQL的func上,官方的定义是:对认证的用户——只要拥有INSERT和DELETE这两个权限的用户,就可以在任意的数据库下面以MySQL创建一个函数,然后用这个函数去攻击数据库来达到我们的目的


2)这个时候我们就要上传一个UDF了,UDF有两个限定条件:

①如果MySQL的版本大于5.1,这个udf.dll文件就得放到MySQL的安装目录下的lib\plugin文件夹下,如果没有这个目录,那么我们就自己创建一个就行了。

②如果MySQL的版本小于5.1,这个udf.dll文件就得放置于C:\windows\system32


3)因此我们现在webshell的mysql管理功能里面输入查询命令:

select version();

可以看到这是一个 MySQL 5.5.53的版本

image

因此udf.dll文件就得放到MySQL的安装目录下的lib\plugin文件夹下,如果没有这个目录,那么我们就自己创建一个就行,但是这里为了介绍的完整一点,顺便讲下将udf.dll文件放置于C:\windows\system32的过程。


4)接下来的任务是把 UDF 的动态链接库文件放到 MySQL 的插件目录下,这个目录改如何去寻找呢?可以使用如下的 SQL 语句来查询:

show variables like '%plugin%';

将查询的语句写进框里面,写完点击查询,即可查询到我们想找的那个目录的绝对路径:

C:\p_php\MySQL\lib\plugin\ 

image

如果不存在的话可以在 webshell 中找到 MySQL 的安装目录然后手工创建 \lib\plugin 文件夹


5)找到目标目录,将我们写好的UDF.dll上传到此目录

image


6)输入以下命令,创建函数,名为cmdshell,该函数叫什么名字则在后续中继续使用该函数进行查询:

create function cmdshell returns string soname 'udf.dll';

image


7)输入命令:查看是否创建成功

select * from func;

得到以下回显,说明我们的函数创建成功

image


8)输入命令:查看此用户的权限

select cmdshell('whoami')

成功通过这条命令查询到此用户的权限是一个administrator的权限

image

我们直接通过webshell查看此用户的权限的时候,正常情况下查看到的权限都是很低的,一般都是那种apache之类的权限,我们通过UDF来提权的话,就能拿到administrator或者system的权限,此时我们有了administrator的权限,说明我们已经提权成功,因此就可以为所欲为了,可以通过以上命令进行添加账户进管理组之类的操作,这个时候就八仙过海各显神通了。


9)我们UDF的动态链接库文件可以直接在网上找现成的,也可以自己写,我们常用的工具sqlmap和Metasploit里面都自带了对应系统的动态链接库文件。

• sqlmap的UDF动态链接库文件位置

sqlmap根目录/data/udf/mysql

不过sqlmap中自带的这些动态链接库为了防止被误杀都经过编码处理过,不能被直接使用,不过可以利用sqlmap自带的解码工具cloak.py来解码使用,cloak.py的位置为:/extra/cloak/cloak.py

• Metasploit的UDF动态链接库文件位置

MSF 根目录/embedded/framework/data/exploits/mysql

Metasploit自带的动态链接库文件无需解码,可直接食用。

Metasploit自带的动态链接库文件和sqlmap解码后的动态链接库文件中的内容是一样的。

10)这里有几个当时踩坑的点:

①这个UDF.dll文件,要注意的是,UDF.dll里面的内容不同,后面所调用的函数名称也不同,也就是说,在第六步所创建的函数名cmdshell,这个cmdshell并不是自己想取什么名字就取什么名字,必须要UDF.dll里面有才行,而且这个函数在数据库中对应可以得到的函数功能就是UDF.dll里面对应这个名字的函数的功能。

以下是Metasploit自带的动态链接库文件和sqlmap解码后的动态链接库文件里面所包含的一些函数:

image

②根据数据库版本的不同,所使用的UDF.dll文件也不同,跟Windows系统一样,数据库也有32位的和64位的,所使用的UDF.dll文件也是有32位的和64位的,以下是sqlmap自带的解码后的动态链接库文件名称:

lib_mysqludf_sys_32.dll
lib_mysqludf_sys_64.dll

我们可以输入以下命令来查看数据库位数

show variables like '%version_%'

如果我们使用的UDF.dll文件与数据库位数不符,在我们需要调用到这个udf.dll文件时将会出现以下报错:

ERROR 1126 (HY000): Can't open shared library 'udf.dll' (errno: 193 )

因此我们需要根据数据库位数来上传对应位数的UDF.dll文件进行提权,PHPStudy自带的MySQL版本是32位的。

③当时还遇到了一个坑就是,如果要删除函数,UDF.dll文件必须还存在plugin目录下,我当时就是因为先删除了这个UDF.dll文件,就不能在对应的数据库中删除所导入的函数cmdshell,如果后面新创的函数名字和该函数相冲突,MySQL还会不允许创建,所以请注意一下(我被坑了,重置了MySQL才终于把那个自定义导入的函数删掉了)。


11)提权成功,而且有了自定义的函数可以执行命令之后,我们可以就可以该干嘛就干嘛了,以上便是MySQL数据库提权之UDF提权的内容。

posted @   JInG7Yu  阅读(1779)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示