概要
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版本信息
之后启动Mysql服务器
root@debian:~# service mysql start
查看mysql的进程信息
我们可以看到mysqld_safe的wrapper(封装)脚本是root权限执行的,而主要的mysqld进程确实mysql用户权限执行的。
我们看看该脚本
通过手册我们可以得知--malloc-lib=LIB 选项可以加载一个so文件,如果攻击者可以注入路径信息到配置文件,就可以在MYSQL服务重启的时候,执行任意代码。
从2003开始,默认通过SELECT * INFO OUTFILE '/var/lib/mysql/my.cnf'是不能覆写文件的,但是我们可以利用mysql logging(MySQL )功能绕过outfile/dumpfile重写文件的保护,攻击者需要 SELECT/FILE 权限 。
依赖于mysql的版本,相应的配置文件也不同
比如mysql5.5
我们通过覆写/etc/my.cnf注入malloc_lib=路径选项,命令如下:
注意:修改配置文件后,会导致mysql重启的时候失败。
注入后的my.cnf文件包含:
[mysqld]
malloc_lib=/tmp/mysql_exploit_lib.so
mysqld_safe也载入配置文件从mysql的data目录,(/var/lib/mysql/my.cnf),这个功能从mysql 5.7移除,不再加载,所以即使mysql用户没有权限修改/etc/my.cnf,也可以通过下面的文件来加载
/var/lib/mysql/my.cnf
/var/lib/mysql/.my.cnf
即使没有dba权限,也可以通过触发器来覆写文件
触发器写入成功后,刷新的时候会载入,比如通过执行一个insert语句来刷新
INSERT INTO `active_table` VALUES('xyz');
POC
下载POC脚本
对CVE-2016-6662的简单测试
1.修改my.cnf的权限,让mysql用户可写
2.通过mysql logging 覆写文件
3.放置后门程序
gcc-Wall-fPIC-shared-omysql_hookandroot_lib.c.somysql_hookandroot_lib.c.c-ldl
4.重启触发反弹
修复办法:
0day漏洞,目前尚无补丁,请持续关注安全客最新报道!
临时修复建议:关闭mysql用户file权限 (2016/09/12 23:03 更新)
原文参考:
http://legalhackers.com/advisories/MySQL-Exploit-Remote-Root-Code-Execution-Privesc-CVE-2016-6662.html
(责任编辑:宋编辑)