ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

记一次UDF提权实验

2020-03-09 15:07:15  阅读:235  来源: 互联网

标签:函数 UDF dll 提权 udf Mysql 实验 目录


简介UDF提权

UDF提权是数据库漏洞提权中mysql提权的一种。UDF是Mysql的一个拓展接口,也可称为用户自定义函数,它是用来拓展Mysql的技术手段,可以说是数据库功能的一种拓展,用户通过自定义函数在Mysql中无法方便实现的功能,其添加的新函数都可以在SQL语句中调用
UDF提权是利用Mysql的自定义函数功能,将Mysql账号转化为系统sysytem权限。

提权条件

1)Mysql版本大于5.1版本udf.dll文件必须放置于MYSQL安装目录下的lib\plugin文件夹下。
(2)Mysql版本小于5.1版本udf.dll文件在Windows2003下放置于c:\windows\system32,在windows2000下放置于c:\winnt\system32
(3)掌握的mysql数据库的账号有对mysql的insert和delete权限以创建和抛弃函数,一般以root账号为佳,具备root账号的权限的其他账号也可以
(4)可以将udf.dll写入到相应目录的权限。

另外还需注意:
在mysql4.1以前的版本中,可以将所有的DLL文件里面的任何函数都注册到MYSQL里面以供MYSQL调用。
在4.1—5.1 的版本中,对注册的DLL的位置有了限制,创建函数的时候,所对应的DLL不能包含/或者\,简单的理解就是不能是绝对路径。所以我们将DLL释放到system32目录,来跳过限制,或者放到盘符的根目录下通过c:udf.dll这种形式的写法来跳过限制。其实知道把dll放到path这个环境变量所表示的任何一个目录下面,效果跟放到系统的system32目录下面一样,以下几个创建函数的语句都是正确的:
create function cmdshell returns string soname ‘udf.dll’;
//假设此时udf.dll被上传到了c:\windows\system32目录

create function cmdshell returns string soname ‘c:udf.dll’;
//假设此时udf.dll被上传到了c盘根目录目录

mysql5.1及以后的几个版本又多了一个限制:创建函数时所用的的DLL只能放在mysql的plugin目录里面,而且plugin目录默认是不存在的,可能就是为了通过导出文件的方式将DLL写到这个文件夹,所以UDF提权前,先确定一下mysql版本是很有必要的。

提取操作流程

(1)在通过菜刀连接获得webshell后,使用数据库管理功能来尝试UDF提权,在数据库配置栏目填以下信息并进入数据库管理功能:
在这里插入图片描述
(2)接着我们在菜刀的数据库管理功能页面输入以下语句并执行,查看数据库版本信息:
在这里插入图片描述
这里我们得知,Mysql版本为5.5.40

(3)导出DLL文件
查询Mysql安装的根目录:
在这里的插入图片描述
如上图我们得知目标服务器的Mysql安装根目录为:
C:/Program Files/phpStudy/Mysql/
根据我们前面讲述的Mysql5.1及其之后版本,我们自定义函数要用到shell导出的目录应该是:
C:/Program Files/phpStudy/Mysql/lib/plugin
其实也可以通过以下语句获取插件目录(并不一定真实存在)
show variables like ‘%plugin%’;
在这里插入图片描述
然后我们找个任意的可上传目录把我们准备的udf.dll文件上传;
udf.dll上传后在服务器的绝对路径为:
C:/www/udf.dll
然后我们通过以下方式把上传的udf.dll文件以继承Mysql的权限导出到plugin目录,执行以下语句:
select load_file(‘C:/www/udf.dll’) into dumpfile ‘C:/ProgramFiles/phpStudy/Mysql/lib/plugin/udf.dll’;
在这里插入图片描述
执行该语句后,发现返回为空,可能导出文件不成功,或者是plugin目录不存在,我们通过文件管理查看后得知,plugin目录不存在;
我们可以尝试通过NTS ADS流来创建文件夹,但是成功率不高。可参考文章NTFS中的ADS的一些问题(Mysql建目录,隐藏webshell等)

运气好,直接在终端下cd到C:\Program Files\phpStudy\Mysql\lib\目录md plugin 创建成功,一般情况下严格限制了目录权限的。
在这里插入图片描述
接下来,执行sql语句导出udf.dll到plugin目录;
(4)然后我们执行以下sql语句来通过udf.dll创建shell函数(此函数是我们上传的udf.dll文件中内定的函数名,不同的dll文件有不同的函数名):
create function shell returns string soname ‘udf.dll’;
在这里插入图片描述
shell函数用于执行系统命令,用法如下,其中的set是将要执行的cmd命令:
select shell(‘cmd’,‘set’);
//set命令用于查询系统环境变量
如下图,成功执行了cmd命令并获得返回结果,右键选择文本格式显示可以看到更全面的返回信息:
在这里插入图片描述
(5)最后我们新建了一个test用户,并将其添加到了admistrators组中
在这里插入图片描述
如此,提权完毕。

提权完毕之后我们可以通过以下语句删除相关函数以防被他人利用:
drop function shell;
//删除函数
delete from mysql.func where name=‘shell’;
//删除函数

标签:函数,UDF,dll,提权,udf,Mysql,实验,目录
来源: https://blog.csdn.net/weixin_45645113/article/details/104750213

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有