主页 > 网络知识 > 内网渗透测试:MySql的利用与提权思路总结(4)

内网渗透测试:MySql的利用与提权思路总结(4)

UDF的使用需要调用其动态链接库文件(.dll或.so),使用UDF提权原理大概就是通过引入恶意的udf.dll,引入自定义函数(如sys_eval()函数),执行系统命令。

利用条件:

 

掌握MySQL数据库的账户,从拥有对mysql的insert和delete权限,以创建和抛弃函数。

 

 

当前用户拥有可以将udf.dll写入相应目录的权限。

 

 

如果MySQL版本小于5.1且为Windows系统,则udf.dll文件存放在 C:windows 或者 C:windowssystem32 目录下。

 

 

如果MySQL版本大于5.1,udf.dll文件必须放置在MySQL安装目录的lib/plugin文件夹下,该plugin目录默认不存在需要创建。

 

假设我的UDF文件名为 udf.dll,存放在MySQL安装目录的 lib/plugin 目录下(MySQL>5.1):

 

image-20210123161120125

 

在 udf.dll 文件中,我定义了一个名为 sys_eval() 的 MySQL 函数,该函数可以执行系统任意命令。但是如果我现在就打开 MySQL 命令行,使用 select sys_eval('whoami');的话,系统会返回 sys_eval() 函数未定义。因为我们仅仅是把 udf.dll 放到了 lib/plugin 目录下,并没有引入。类似于面向对象编程时引入包一样,如果没有引入包,那么这个包里的类你是用不了的。所以,我们应该把 udf.dll 中的自定义函数引入进来。引入的方法如下:

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

 

sys_eval:我们要引入的函数名。

 

 

udf.dll:我们要从中引入函数的链接库文件。

 

成功引入该函数后,可以查看一下 mysql 函数里面新增了 sys_eval:

mysql> select * from mysql.func; +----------+-----+---------+----------+ | name | ret | dl | type | +----------+-----+---------+----------+ | sys_eval | 0 | udf.dll | function | +----------+-----+---------+----------+ 1 row in set (0.00 sec) mysql>

此时我们便可以像执行其他MySQL内置函数一样去使用该函数了。

UDF手动提权步骤

当我们通过各种方法获取了目标MySQL数据库的权限并满足UDF提权的条件后,我们可以按照以下步骤进行提权。

(一)查看 secure_file_priv 的值

上文说了,secure_file_priv 是用来限制 into dumpfile、into outfile、load_file() 函数能在哪个目录下导出或者读取文件的,所以该值为空是我们利用UDF提权的首要条件:

mysql> show variables like '%secure_file_priv%'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | secure_file_priv | | +------------------+-------+ 1 row in set (0.02 sec) mysql>

(二)查看系统架构及plugin插件目录

UDF的dll动态链接库文件需要放在该目录下:

mysql> show variables like '%compile%'; # 查看主机版本及架构 +-------------------------+--------+ | Variable_name | Value | +-------------------------+--------+ | version_compile_machine | x86_64 | | version_compile_os | Linux | +-------------------------+--------+ 2 rows in set (0.00 sec) mysql> show variables like '%plugin%'; # 查看plugin目录 +---------------+-------------------------------+ | Variable_name | Value | +---------------+-------------------------------+ | plugin_dir | /www/server/mysql/lib/plugin/ | +---------------+-------------------------------+ 1 row in set (0.01 sec) mysql>

可知目标主机plugin插件目录为/www/server/mysql/lib/plugin/。

如若该目录不存在,可以通过webshell等方式找到 MySQL 的安装目录然后手工创建 lib/plugin 文件夹

(三)将我们构造的恶意动态链接库文件写入plugin插件目录

我们应该去哪里找动态链接库文件去呢?Sqlmap 和 Metasploit 工具里面都自带了对应系统的动态链接库文件。

下面是二者的UDF动态链接库文件的存放位置:

 

Sqlmap:位于sqlmap/data/udf/mysql目录下,包含64位和32位Linux和Windows系统下利用的动态链接库文件:

 

 

image-20210123152105047

 

 

Metasploit:位于/usr/share/metasploit-framework/data/exploits/mysql目录下,包含64位和32位Linux和Windows系统下利用的动态链接库文件:

image-20210123152200001

 

 

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!