MySQL提权——udf提权

本文详细介绍了MySQL UDF提权的过程,包括前期准备、udf提权原理、NTFS ADS创建目录以及提权实操步骤。通过创建并导入自定义函数dll,利用MySQL的权限执行系统命令,实现提权。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

零基础学黑客,搜索公众号:白帽子左一

作者:掌控安全学员——逍遥子

一、前期准备

1.Mysql udf简介

MySQL udf(user definedfunction,用户定义函数),为用户提供了一种高效创建函数的方式。udf函数按其运行模式可以分为单次调用型和聚集函数型两类,单次调用型函数能够针对数据库查询的每一行记录进行处理,聚集函数型用于处理Group By等聚集查询。

2.udf提权原理

udf的设计初衷是为了方便用户自定义一些函数,方便查询一些复杂的数据,同时也增加了使用udf提权的可能。
攻击者通过编写调用cmd或者shell的udf.dll文件,并且导入到一个指定的文件夹目录下,创建一个指向udf.dll的自定义函数,从而在数据库中的查询就等价于在cmd或者shell中执行命令。不同的操作系统,不同的版本,提权时导出udf.dll存放的目录不一样。
Windows 2000操作系统需要导出udf.dll到c:\winnt\目录下。Windows2003操作系统导出udf.dll到c:\windows\目录下。在MySQL 5.1版本及以后的环境下,udf提权时需要将udf.dll导出到mysql安装目录\lib\plugin\目录下

3. NTFS ADS创建目录

在mysql 5.1以后的版本中,需要将dll文件导入到lib\plugin目录中才会生效,但是一部分在安装中没有这个路径文件夹,所以需要使用NTFS 数据交换流进行文件夹的创建
每个文件数据流的完整格式如下:<filename>:<streamname>:<stream type>

只有一个data流时,streamname通常可以省略,stream
type也可以成为attributetype。我们通常看到的是文件的data流,其它数据流都处于隐藏状态。当attribute
type为 I N D E X A L L O C A T I O N 时 , 表 明 该 该 数 据 流 的 宿 主 是 文 件 夹 。 所 以 可 以 通 过 M y S Q L 导 出 数 据 到 d i r e c t o r y p a t h : : INDEX_ALLOCATION时,表明该该数据流的宿主是文件夹。所以可以通过MySQL导出数据到directory_path:: INDEXALLOCATION宿MySQLdirectorypath::INDEX_ALLOCATION文件的方法来创建directory_path目录。

二、提权实操

1.首先需要获取目标的webshll,获得的这个webshell很明显权限很低,甚至连命令都无法执行。在这里插入图片描述

2.因为服务器部署了mysql,所以就可以考虑使用mysql提权,所以需要找到MySQL的账户和密码。
通过对文件的的浏览,找到了网站的配置文件,里面可以看到数据库的账户的密码都是以明文的形式存在的。在这里插入图片描述

3.还可以通过查看数据库的user.MYD文件,里面存的是用户的密码的hash值,获取了以后可以通过cmd5或者其他途径进行查找。简答搜索就可以知道mysql的常见文件存储结构。
在这里插入图片描述

4.通过查看user.myd,获取到了hash值,并且碰撞得到明文。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.拿到了数据库的账户和密码,开始对数据库进行链接。
在这里插入图片描述

6.查看是否有上传文件的权限。show global variables like ‘secure%’

当secure_file_priv 的值为 NULL ,表示限制mysqld 不允许导入|导出,此时无法提权
当secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入|导出只能发生在/tmp/ 目录下,此时也无法提权
当 secure_file_priv的值没有具体值时,表示不对 mysqld 的导入|导出做限制,此时可提
在这里插入图片描述

7.查看mysql的安装路径(绝对路径)
在这里插入图片描述

8.查看mysql的版本。发现是5.2版本,所以需要将dll文件放在lib\plugin目录下才可以生效,如果是5.1以下,需要放到 C:\Windows\system32下
在这里插入图片描述

9.浏览目录,发现没有lib路径的存在,需要使用NTFS ADS进行创建(在获取到shell的情况下,如果权限够,也可以使用webshell管理工具创建。)在这里插入图片描述

10.使用命令创建路径:select ‘xxx’ into outfile ‘C:\phpstudy_pro\Extensions\MySQL5.5.29\lib::$INDEX_ALLOCATION’;,执行命令后发现报的是失败,但是检查文件夹,确实已经创建。

在这里插入图片描述
在这里插入图片描述

11.使用同样的方法创建plugin文件夹。
12.使用直接导入的方式将udf.dll文件到指定位置。(udf.dll我以txt的形式放在附件)select 0x[udf数据] into dumpfile [path]
在这里插入图片描述
在这里插入图片描述

13.创建sys_eval函数,用于执行命令和回显。
在这里插入图片描述

14.成功执行命令。
在这里插入图片描述
在这里插入图片描述

之前是使用了直接将udf数据写入文件,有时候还可以将数据写入到数据库中,再写入到文件中。
1.首先将创建的自定义函数sys_eval删除掉,避免产生干扰。删除函数:drop function sys_eval,查询所有的自定义函数select *from mysql.func
在这里插入图片描述
在这里插入图片描述

2.创建一个临时表
![
]在这里插入图片描述

3.将数据写入到表中。insert into udf values(convert(二进制文件,CHAR))

在这里插入图片描述

4.将数据导入到指定文件夹下的目录中。```select udf from udf into dumpfile’path’;
在这里插入图片描述

5.文件成功导入后,直接同之前的方法创建自定义函数。(这次使用的dll文件是udf1,因为是第二次写入的文件名就是udf1)
在这里插入图片描述

6.成功执行命令,获取到权限。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

### 关于 MySQL UDF 方法 #### 条件准备 为了成功实施基于MySQLUDF(User Defined Function),需确保几个前条件被满足。这包括确认MySQL服务是以高限(如Windows下的System或Linux下的root)运行;该服务开启了必要的远程访问以及文件读写功能[^1]。 #### 获取必要限 攻击者不仅需要获取到具有足够限的数据库账户信息——即知晓管理员级别的用户名与密码组合来登录目标MySQL实例,还需要此账号具备执行`CREATE FUNCTION`语句的能力,这意味着至少要拥有对特定模式下表对象的操作利,比如`INSERT`和`DELETE`等限[^2]。 #### 验证安全设置 进一步地,在尝试加载自定义动态链接库(.dll/.so)前,应当检查服务器变量`secure_file_priv`的状态。如果其返回值为空(`NULL`),则意味着当前环境禁止任何形式的数据导入/导出示图,从而阻止了通过上传恶意共享对象实现本地至系统级特升的可能性[^3]。 #### 实施过程概述 一旦上述准备工作完成,可以按照如下方式继续: - 利用已有的管理限向指定位置上传特制的DLL/SO文件; - 创建一个新的存储函数指向这个外部资源; - 调用新建立的功能触发命令执行或其他形式的控制转移机制; 需要注意的是实际操作过程中涉及的具体技术细节会因操作系统差异而有所不同。例如在Linux环境中可能涉及到更复杂的路径处理及依赖关系解决等问题[^4]。 ```sql USE test; SELECT @@basedir INTO @base_dir; -- 查询基础目录 SET @cmd_func_name='do_system'; SET @output_file=CONCAT(@base_dir,'/',@cmd_func_name); -- 这里省略具体下载指令... CREATE FUNCTION do_system RETURNS STRING SONAME 'lib_mysqludf_sys.so'; ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值