前言
数据库提权的目的是通过已有的数据库权限获得操作系统的权限。
UDF(user-defined function)是MySQL的一个拓展接口,也可称之为用户自定义函数。用户通过自定义函数来实现MySQL中无法方便实现的功能,其添加的新函数都可以在SQL语句中调用,通过添加命令执行函数可以执行系统命令, 从而进行提权。
UDF提权的过程是:
首先在网站中引入一个udf.dll文件-->在数据库中构造自定义函数-->通过数据库语句执行系统命令
UDF提权的利用条件是:
(1)Mysql版本大于5.1版本udf.dll文件必须放置于MYSQL安装目录下的lib\plugin文件夹下
(2)Mysql版本小于5.1版本udf.dll文件在Windows2003下放置于c:\windows\system32,在windows2000下放置于c:\winnt\system32
(3)已经掌握的这个mysql数据库的账号,需要有mysql的操作权限(插入、删除),即我们需要获得mysql的root权限账号
(4)有可以将udf.dll写入到相应目录的权限
(5)secure-file-priv参数不为null(这个参数是针对文件导入导出)
实操
1、生成dll文件
通过sqlmap自带的dll_文件,生成我们需要的dll文件。(选择dll_文件时要注意与数据库版本对应)
使用的命令如下:
python C:\Users\龙\Desktop\udf\cloak.py -d -i C:\Users\龙\Desktop\udf\lib_mysqludf_sys.dll_
2、导入dll文件
将dll文件导入到网站服务器的过程是,首先使用load_file语句读取本地的dll文件,然后使用into dumpfile或into outfile数据库语句写入到目标绝对路径。
注意:因为在数据库5.1版本之后,lib\plugin目录默认是不存在的,所以需要自己建立,不然无法上传dll文件。
导入文件成功的结果如下图所示:
如果secure_file_priv的参数为null,即不允许导入导出文件,报错结果如下图:
3、构造用户自定义函数
从udf.dll文件中选择一个存在的函数进行定义。
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';