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流的方式,大家可以进行尝试,这里我直接手工进行创建。
然后我们需要把自定义好的函数,也就是执行系统命令的函数加载进数据库中,我们需要先将定义好的一个dll放入lib\plugin这个文件夹,这里如果无法上传文件,我们可以创建一个数据表,将dll中的数据十六进制编码,之后在通过读取的方式写入到lib\plugin\udf.dll文件中,这样也是可以达到上传文件的效果的。
写入文件有一个前提,就是secure_file_priv这个选项需要为空值,这样才可以加载或写入文件。
NULL表示不可以写入
修改mysql.ini文件,使其为空值
这样一来就可以写入文件了。
但是这里我们利用msf进行攻击,需要远程连接该主机的数据库,所以要提前查看,该数据库是否可以远程连接。
这里发现root用户的连接对象都是本地,可以使用sql语句进行修改,将其改为允许远程连接
update user set host = ‘%’ where user = ‘root’;
这条语句来修改连接对象为所有主机
之后尝试使用msf进行攻击。
进入msf,加载exploit/multi/mysql/mysql_udf_payload模块这里的需要mysql数据库的账号和密码,以及连接的主机。
设置完之后,尝试攻击。
攻击完之后,在受害机的lib\plugin目录下将会生成一个dll文件。
之后查看已载入的函数并尝试执行。
执行成功返回0。
由于该命令没有回显,不方便,所以我们需要手动的加载一个有回显的函数。
这里的dll文件的名称是msf随机的,利用该条命令载入了sys_eval函数
可以看到该条函数成功将执行结果回显出来了。
参考文章
https://blog.****.net/qq_36119192/article/details/84863268
https://blog.****.net/wulex/article/details/54868131