MySQL提权/条件竞争漏洞分析和利用(37)

news2024/11/23 7:05:55

预备知识
漏洞描述


CVE编号:CVE-2016-6663 / CVE-2016-5616 && CVE-2016-6664-5617

漏洞级别:严重

漏洞影响:漏洞影响:


MariaDB   < 5.5.52

< 10.1.18

< 10.0.28

MySQL         <= 5.5.51

<= 5.6.32

<= 5.7.14

Percona   Server < 5.5.51-38.2

< 5.6.32-78-1

< 5.7.14-8

Percona   XtraDB Cluster      < 5.6.32-25.17

< 5.7.14-26.17

< 5.5.41-37.0

漏洞发现人:Dawid Golunski

Dawid Golunski在 MySQl, MariaDB 和 PerconaDB 数据库中发现条件竞争漏洞,该漏洞允许本地用户使用低权限(CREATE/INSERT/SELECT权限)账号提升权限到数据库系统用户(通常是'mysql')执行任意代码。成功利用此漏洞,允许攻击者完全访问数据库。也有潜在风险通过(CVE-2016-6662 和 CVE-2016-6664漏洞)获取操作系统root权限。

本实验环境所用软版本:MariaDB 10.0.22-1.el7.centos.x86_64

MariaDB:https://mariadb.org

项目地址:https://github.com/MariaDB
相关课程:

竞态条件漏洞实验主页-合天网安实验室 http://hetianlab.com//expc.do?ec=ECID9d6c0ca797abec2016081015344000001

Tomcat本地权限提升漏洞:http://hetianlab.com/expc.do?ce=ef30f608-6c82-4193-acd7-7c86495705f7

参考资料:

MySQL-Maria-Percona-PrivEscRace-CVE-2016-6663-5616-Exploit :http://legalhackers.com/advisories/MySQL-Maria-Percona-PrivEscRace-CVE-2016-6663-5616-Exploit.html

MySQL-Maria-Percona-RootPrivEsc-CVE-2016-6664-5617: http://legalhackers.com/advisories/MySQL-Maria-Percona-RootPrivEsc-CVE-2016-6664-5617-Exploit.html

firebroo's Blog:http://www.firebroo.com/categorys/23/articles/23.html

【漏洞预警】MySQL / MariaDB / PerconaDB - 提权/条件竞争漏洞-安全客 - 有思想的安全新媒体 http://bobao.360.cn/learning/detail/3152.html

实验目的
1)漏洞复现

2)漏洞形成分析

3)漏洞修复建议


实验环境
操作系统: Centos 7 1511

网络拓扑见下图:



IP随机

实验步骤一
漏洞复现


环境准备:

启动数据库:systemctl start mysql

创建普通权限的mysql账号:attacker

//红色为命令

mysql -uroot

MariaDB [(none)]> create database attacker;

Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]>  insert into mysql.user(Host,User,Password)values("localhost","attacker",password("attacker"));

Query OK, 1 row affected, 4 warnings (0.00 sec)

MariaDB [(none)]> grant create,select,update,insert,delete,drop on attacker.* to attacker@localhost identified by 'attacker';

Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;

Query OK, 0 rows affected (0.00 sec)
A
MariaDB [(none)]> quit

1)漏洞复现/提权普通用户至为mysql

新建一个 /data/目录,给予777权限,用做数据库文件存储目录

新建attacker用户

切换到 attacker 用户
su attacker

默认情况下当前attacker用户是无法操作mysql的

下载攻击代码:

编译:
gcc mysql-privesc-race.c -o mysql-privesc-race `mysql_config --cflags --libs`

执行:
./mysql-privesc-race

按照提示加上mysql用户名,主机,密码和数据库等

进入条件竞争,等待完成:

时间根据系统不同所需时间不同,1分钟到10分钟不等。去喝杯茶,耐心等待一会儿。

………………………………….

经过较长时间的等待,可以得到一个shell:

查看一下当前的用户ID

已经变身为mysql用户了,之前没权限操作的事情,现在可以操作了

2)提权到系统root权限

利用CVE-2016-6664/CVE-2016-5617提取到root。主要利用符号链接攻击提权

查看mysql错误日志文件目录

切换到/tmp目录,因为现在是mysql,对当前目录(/home/attacker)无权限

下载poc.sh 文件

提权成功如下:


实验步骤二
漏洞形成分析


1)CVE-2016-6663 / CVE-2016-5616漏洞形成分析

基于Mysql的数据库允许用户在建表的时候指定存储目录。

示例如下:    

PS:为了跟踪系统调用,以下步骤均在root用户下进行,如果你不跟踪系统调用,在普通用户下亦可操作

新建 /data/diskptable ,给予这个目录 777 权限

然后建表的时候可以通过data directory参数指定存储目录

//PS:之前获取root权限杀死了mysql进程,可能需要重启服务

systemctl restart mysql


mysql -uattacker -pattacker

MariaDB [(none)]> use attacker;

MariaDB [attacker]> CREATE TABLE poctab1 (txt varchar(50)) engine = 'MyISAM' data directory '/data/disktable';

MariaDB [attacker]> commit;

MariaDB [attacker]> quit

执行之后发现 目录权限已经变成mysql了。

低权限(SELECT/CREATE/INSERT权限)的MYSQL账户,在执行表修复过程中,存在执行了不安全的临时文件创建。

为了方便查看,先开启一个系统调用跟踪 ,先用 ps -aux | grep mysql ,找到mysqld的pid,然后使用 strace -p pid -f 跟踪。

再次以attacker进入数据库执行表修复。

退出数据库,来看系统调用跟踪到的数据

用vim 打开 nohup.out文件查找 chmod (vim 打开之后,敲 /chmod ,回车)

(lstat函数类似于stat.但是当命名的文件是一个符号链接时,lstat返回该符号链接的有关信息,而不是由该符号链接引用文件的信息)

第一个系统调用是

我们可以看到,在检验poctab1.MYD表文件权限的时候,也会复制在创建repaired表时的临时文件chmod()权限。因此在



系统调用之间,产生了条件竞争漏洞。

因此如果删除临时表poctab1.TMD,然后通过符号链接在chmod()操作前替换/var/lib/mysql,则能够完全控制MYSQL的data目录权限。

攻击者可以预设poctab1.MYD权限为04777(suid),然后通过有漏洞的chmod()调用有效的复制一个bash shell来执行命令。这里会有一个问题,suid shell将只会保留攻击者的UID,而不是'mysql'用户。因此攻击者需要复制bash shell到mysql用户的表文件,然而mysql表文件又不具有写权限。

可以通过新建一个具有组粘帖位(group sticky bit)的目录来绕过这个限制

新建/data/disktable/目录,并赋予组粘帖位(group sticky bit)

再次新建一个表。

mysql -uattacker -pattacker

CREATE TABLE poctab2 (txt varchar(50)) engine = 'MyISAM' data directory '/data/disktable';

再次查看/data/disktable/下文件权限

我们可以看到poctab2.MYD表已经是'mysql'权限了,但是属于'root'组。这样'root'就能够复制/bin/bash到poctab2.MYD文件了。(PS:如果以上步骤在普通用户attacker下操作, poctab2.MYD会是'mysql'权限,但是属于'attacker'组。这样'attacker'就能够复制/bin/bash到poctab2.MYD文件了。

2)CVE-2016-6664/CVE-2016-5617漏洞形成分析

通常情况下 mysql的错误日志是存储在 /var/log/mysql 或者 /var/lib/mysql目录下

权限是这个样子的:

mysqld_safe通常用于启动MySQL守护进程和创建/重新打开error.log执行某些不安全的文件操作,可能允许攻击者获得root权限。

mysqld_safe中有一个while循环用来监测mysql进程,并在进程失败的情况下执行重启进程。重启过程中,如果发现syslog没有配置记录错误日志文件,则会重新创建error log 文件。

可以看到使用touch创建文件,并且使用chown将文件所有者授权给了运行mysql进程的用户(通常这个用户是mysql),这个操作容易受到受到符号链接攻击。

在上一步中利用CVE-2016-6663我们已经获取到了mysql的权限,可以对mysql的错误日志进行操作,包括删除。和将其替换为指向任意系统文件的符号链接并升级权限。

无需等待 mysql service 重启,只需要通过mysql用户杀死由mysqld_safe创建的mysqld的子进程,就可以触发这个权限升级。

利用这些,当整个mysqld进程被终止,mysqld_safe将会执行while循环,并创建一个属于mysql用户的文件在攻击者指定的位置。(通过符号链接指向),而且还可以升级权限。

这一段C 代码,实现geteuid 函数,并且把 $BACKDOORPATH (也就是/tmp/mysqlrootsh)设置权限为04777 ,也就是设置S_ISUID标志位,然后编译成.so 文件保存到/tmp 目录下

然后把/bin/bash 复制到  /tmp/mysqlrootsh

删除mysql错误日志,并把文件/etc/ld.so.preload链接到错误日志文件

当mysqld_safe执行重新创建错误文件的时候,然后利用mysqld_safe修改文件属主为mysql 用户。再把之前编译的.so 文件路径写到/etc/ld.so.preload 文件里。preloading的库函数将有优先加载的权利。

当geteuid 函数执行的时候,/tmp/mysqlrootsh 的属主属组变成了root,权限就变成了04777。

/tmp/mysqlrootsh文件具有s 位了,也就是说,当该程序执行的时候,就可以具有root 权限,所以我们也就得到了root 权限。

实验步骤三
漏洞修复建议


1)通过各系统发布的升级补丁进行升级

2)临时解决办法

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

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

相关文章

【MATLAB数据处理实用案例详解(18)】——利用自组织特征映射网络实现亚洲足球水平聚类

目录 一、问题描述二、自组织特征映射网络实现亚洲足球水平聚类原理三、算法步骤3.1 定义样本3.2 创建网络3.3 网络训练3.4 测试3.5 显示聚类结果 四、运行结果五、完整代码 一、问题描述 中国男子足球队的比赛成绩一直牵动着广大球迷的心。很多人认定中国队已处于亚洲三流甚至…

SpringBoot 多数据源及事务解决方案

1. 背景 一个主库和N个应用库的数据源&#xff0c;并且会同时操作主库和应用库的数据&#xff0c;需要解决以下两个问题&#xff1a; 如何动态管理多个数据源以及切换&#xff1f; 如何保证多数据源场景下的数据一致性(事务)&#xff1f; 本文主要探讨这两个问题的解决方案…

【C++】——C++基础知识点(C++和C语言的区别)

文章目录 1. 前言2. 命名空间2.1 命名空间定义2.2 命名空间使用 3. C的输入输出4. 缺省参数4.1 缺省参数概念4.2 缺省参数分类 5. 函数重载5.1 函数重载概念5.2 C支持函数重载的原理——名字修饰 6. 引用6.1 引用概念6.2 引用特性6.3 常引用6.4 引用的使用场景6.5 引用和指针的…

OtterCTF

五年前的老题了&#xff0c;但还是值得一做&#xff0c;内存取证yyds! What the password? 取电脑的密码 先看缓存在内存中的注册表的偏移量 volatility_2.6_win64_standalone -f 1.vmem --profileWin7SP1x64 hivelist关注到SAM(账户密码表)和system volatility_2.6_win6…

MRI k空间概念整理

以下内容为MRI期末复习笔记&#xff0c;仅供复习参考使用。 K空间概念 K空间为包含MR数据的阵列&#xff0c;也可定义为原始数据阵列相位编码轴和频率编码轴的交叉点 MR扫描得到的数据为谱空间数据&#xff0c;谱空间数据与空间数据位置无直接对应关系 k空间每一数据点或数据…

数组、链表专题

数组、链表专题 前缀和数组LeetCode 303. 区域和检索 - 数组不可变解题思路代码实现 LeetCode 304. 二维区域和检索 - 矩阵不可变解题思路代码实现 总结 不要纠结&#xff0c;干就完事了&#xff0c;熟练度很重要&#xff01;&#xff01;&#xff01;多练习&#xff0c;多总结…

4726.ACWing.第80场周赛寻找数字

ACWing.第80场周赛寻找数字 题目算法思想代码 题目 算法思想 时间复杂度 相当于01背包的搜索时间复杂度&#xff0c;每个位上要么是 4 要么是 7 &#xff0c;而且题意位数不超过10位&#xff0c;所以dfs可以直接过搜索算法 代码 #include<bits/stdc.h> using namespac…

【LeetCode】235. 二叉搜索树的最近公共祖先

1. 问题 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可…

项目骨架搭建

CSS样式补充 精灵图 CSS精灵图&#xff08;CSS Sprites&#xff09;是一种网页优化技术&#xff0c;通过将多个小图像合并成一个大图像&#xff0c;然后通过CSS的背景定位&#xff08;background-position&#xff09;属性来显示对应的图像部分。这种技术可以减少HTTP请求次数…

【Win11 | SSH】详细教你如何在Windows 11 下完成OpenSSH的安装(保姆级攻略)

文章目录 一、问题描述二、问题尝试解决2.1 ssh的问题2.2 如何手动安装2.3 install 脚本找不到2.4 power shell 开始报错2.5 继续安装ssh 三、输入 ssh 再报错 一、问题描述 最近在测试github的连接时&#xff0c;在终端或命令行窗口中&#xff0c;输入以下命令测试你的 SSH 连…

【五一创作】医院手术室麻醉管理系统概述和功能 SQLServer 2008 R2

医院手术室麻醉管理系统概述 1.系统功能概述 手术麻醉管理系统采用下拉式汉化菜单&#xff0c;界面友好&#xff0c;实用性强&#xff0c;设有与住院、病区、药房等系统的软件接口。 系统主要功能有&#xff1a; 手术管理&#xff1a;提供手术病人检索、手术申请、手术安排…

VSCode配置Arduino

综上所周知&#xff0c;Arduino IDE太不智能了&#xff0c;没有代码提示&#xff0c;不能代码跳转&#xff0c;于是乎找一下vscode有啥插件用 在网上找了些教程&#xff0c;也碰到了奇奇怪怪地坑&#xff0c;于是记录一下能成功配置步骤 准备 1.已安装好Arduino IDE 2.已安装好…

Clion开发STM32之串口封装(HAL库)

前提 在开发STM32过程中&#xff0c;芯片提供的串口引脚一般是不会发生变化的&#xff0c;所以为了方便移植&#xff0c;借助HAL提供的注册回调函数自定义&#xff0c;这边重新进行简要的封装此工程开发是以Clion为开发的IDE,用keil只需将对应的文件进行移植即可.文章末尾附带…

Photoshop如何使用选区之实例演示?

文章目录 0.引言1.利用快速选择工具抠图2.制作网店产品优惠券3.利用选区改变眼睛颜色4.抠取复杂的花束5.制作丁达尔光照效果6.利用选区调整图像局部颜色 0.引言 因科研等多场景需要进行绘图处理&#xff0c;笔者对PS进行了学习&#xff0c;本文通过《Photoshop2021入门教程》及…

STM32F103 系统架构

1、Cortex M3 内核 & 芯片 ARM公司提供内核&#xff08;如Cortex M3&#xff0c;简称CM3&#xff0c;下同&#xff09;授权&#xff0c;完整的MCU还需要很多其他 组件。芯片公司&#xff08;ST、NXP、TI、GD、华大等&#xff09;在得到CM3内核授权后&#xff0c;就可以把C…

Linux网络基础二

一.应用层 我们程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应用层。 二.再谈 "协议" 协议是一种 "约定". socket api的接口, 在读写数据时, 都是按 "字符串" 的方式来发送接收的. 如果我们要传输一些"结构化…

VBA替换中文文献引用出现的et al.和and

问题描述&#xff1a;Endnote是常用的文献管理工具&#xff0c;并提供国标模板Chinese Std GBT7714 (numeric).ens&#xff0c;但Endnote在中英文混排上略欠考虑。Chinese Std GBT7714使用序号的形式&#xff08;******1&#xff09;对文献进行引用&#xff0c;但有时我们需要以…

python毕业设计之django+vue医院医疗救助系统

&#xff08;1&#xff09; 信息发布 当有基金的申请审批通过时&#xff0c;慈善机构信息维护部门应与慈善机构进行对接&#xff0c;保证信息的真实性&#xff0c;信息发布之后患者可以进行相应的基金申请。 &#xff08;2&#xff09; 基金管理 此项功能是保证基金信息的动态刷…

HR员工管理的三重境界:管事、管人、管心

在一个公司里&#xff0c;员工来来往往是常态&#xff0c;虽说我们不能替他们决定&#xff0c;但是一定是与公司的管理者有一定的关系。马云曾经说过&#xff1a;“一个员工离职&#xff0c;不外乎两种原因&#xff0c;一是钱没给到位&#xff1b;二是心里委屈了”。一句话就是…

笔记:计算机网络体系结构(OSI七层模型、TCP/IP五层协议)

计算机网络体系结构 计算机网络是一个复杂的、具有综合性技术的系统&#xff0c;它由计算机系统、通信处理机、通信线路和通信设备、操作系统以及网络协议等组成。为了更好地描述计算机网络结构&#xff0c;使计算机网络系统有条不紊地处理工作&#xff0c;需要定义一种较好的…