mysql my malloc_【技术分享】CVE-2016-6662-MySQL ‘malloc_lib’变量重写命令执行分析

本文详细分析了MySQL中的CVE-2016-6662漏洞,该漏洞允许攻击者通过控制'malloc_lib'变量实现远程代码执行或权限提升。通过设置全局变量、利用隐藏配置文件或触发器文件,攻击者可以篡改my.cnf,控制mysqld_safe进程。修复措施包括限制malloc_lib的路径,但文章指出MySQL对此处理不当,缺乏与发行版的沟通。
摘要由CSDN通过智能技术生成

84554

引用

【漏洞预警】Mysql代码执行漏洞,可本地提权(含exp,9/13 01点更新)

【技术分享】CVE-2016-6662:Mysql远程代码执行/权限提升技术分析正式版(9/13 10:47更新)

前言

今天有个关于MySQL的漏洞被披露出来,编号CVE-2016-6662。该漏洞主要涉及到 mysqld_safe 脚本中在加速/处理内存时会采用 “malloc_lib”变量作为辨别标记选择性加载(preload方式)比如tcmalloc之类的malloc库。不幸的的是这个变量可以被my.cnf所控制,导致my.cnf一旦被攻击者在mysql客户端篡改的话可以直接导致mysqld_safe所调用的mysqld进程执行权被控制。

技术分析

具体的攻击思路前言部分基本已经表述出来,这里不再重述。笔者来看看漏洞作者在【1】中做了3种攻击方式。作者的思路基本是围绕着如何用这几种技巧写入 my.cnf 被mysqld_safe调用执行这个中心攻防点来进行。

我们先看看最简单的第1种方法

1)采用 set global general_log 来绕过已存在文件(即my.cnf)

a)设置 my.cnf 为 mysql 用户所在权限的基础上

# ll /etc/my.cnf

-rw-r–r– 1 mysql mysql 380 Sep 12 23:18 /etc/my.cnf

注:默认权限是root,但是不排除mysql集群使用时每个my.cnf是mysql组可读写;

b)开始攻击,各位直接看图吧

注: 这里使用root登录,普通用户默认是没更改全局变量general_log_file 的权限

mysql>  set global general_log_file = '/etc/my.cnf';

ERROR 1227 (42000): Access denied; you need the SUPER privilege for this operation

84554

攻击成功后的my.cnf

84554

2)使用隐藏的/var/lib/mysql/.my.cnf 和 /var/lib/mysql/my.cnf

这部分讲起来其实意义不大,就是历史原因造成这部分mysql数据目录下的my.cnf和.my.cnf。最糟糕的是这部分还是mysql用户组可以读写的目录。所以我们又能控制到my.cnf了。

写入的方法有两种,一种还是方法一的变量,另一个是常见 INTO OUTFILE 文件注入技巧。

3)作者考虑下了上面2种方式都是需要root/admin 组的权限,那换个带文件操作权限的普通用户呢?

作者在假设攻击者还有文件权限的情况下使用写入触发器文件的方式来“提权”(注意是提权)执行这个触发器。

CREATE DEFINER=`root`@`localhost` TRIGGER appendToConf

AFTER INSERT

ON `active_table` FOR EACH ROW

BEGIN

DECLARE void varchar(550);

set global general_log_file='/var/lib/mysql/my.cnf';

set global general_log = on;

select "

[mysqld]

malloc_lib='/var/lib/mysql/mysql_hookandroot_lib.so'

" INTO void;

set global general_log = off;

END;

接下来就等这个这个触发器在表被flushed的时候被触发了(说真的,笔者没实践这个步骤),比如:

INSERT INTO `active_table` VALUES('xyz');

这样我们就可以提权回到了步骤一。

最后,关于PoC或相关的信息您可以直接访问【1】获得。作者其实在后面的so也提供一个很好的回写技巧,由于preload可以优先mysqld进程加载my.cnf,所以它就能修复my.cnf里的内容。

总结

这个漏洞的危害建立在一个你至少需要普通用户的基础上,危害程度得因人而异,不注意安全的可能使用的mysql是一大堆弱口令的root用户;注意安全的基本都是普通mysql用户;集群上启动MySQL进程的用户也是个需要考虑的;至于web注入点使用这个功能个人觉得可能就比较窄了。

MySQL的修复【2】选择的是对malloc_lib的路径进行限制 /usr/lib, /usr/lib64, /usr/lib/i386-linux-gnu, or /usr/lib/x86_64-linux-gnu;

最后,笔者认为MySQL对于这样一个漏洞的处理是一个不太负责任的处理,也没见进入“禁运期”和各大发行版进行沟通。这点是需要官方进行考虑和改进的。

参考

引用

【漏洞预警】Mysql代码执行漏洞,可本地提权(含exp,9/13 01点更新)

【技术分享】CVE-2016-6662:Mysql远程代码执行/权限提升技术分析正式版(9/13 10:47更新)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值