phpMyAdmin远程执行代码缝隙安全公告

颁布功夫 2018-07-03

缝隙编号和级别


CVE-2018-12613  厂商自评:高危  CVSS分值:官方未评定


影响领域


受影响的系统版本:


phpMyAdmin 4.8.0
phpMyAdmin 4.8.1


缝隙概述


phpMyAdmin 是一个以PHP为基�。。。。。。�,,,,,, ,以Web-Base方式架构在网站主机上的MySQL的数据库治理工具,,,,,,, ,让治理者可用Web接口治理MySQL数据库。。。。。。


在phpMyAdmin 4.8.x版本中,,,,,,, ,法式没有严格节造用户的输入,,,,,,, ,攻击者能够利用双沉编码绕过法式的白名单限度,,,,,,, ,造成文件蕴含缝隙。。。。。。


此缝隙使经过身份验证的远程攻击者可能在服务器上执行肆意PHP代码。。。。。。


phpMyAdmin的国内数据统计图如下:


 8827太阳集团(Macau)股份有限公司-Official website


缝隙分析


在/index.php


8827太阳集团(Macau)股份有限公司-Official website

 

这里的target 能够直接传值输入。。。。。。我们能够传入一个本地文件蹊径去让其蕴含,,,,,,, ,就会造成LFI缝隙。。。。。。


首先,,,,,,, ,我们满足4个前提:


1.传入的target 必要是一个字符串。。。。。。
2.不能以/index/ 开头。。。。。。

3.不能在$target_blacklist数组内。。。。。。


 8827太阳集团(Macau)股份有限公司-Official website


4.满足checkPageValidity函数要求。。。。。。


跟踪一下checkPageValidity函数


在/libraries/classes/Core.php


 8827太阳集团(Macau)股份有限公司-Official website


该函数内,,,,,,, ,有三处返回ture的处所,,,,,,, ,只有有肆意一处返回ture就能够。。。。。。观察这三处,,,,,,, ,有一个共同点,,,,,,, ,都是必要$page在$whitelist数组中内才会返回true。。。。。。


 8827太阳集团(Macau)股份有限公司-Official website


我们先看第一个返回true的处所。。。。。。


 8827太阳集团(Macau)股份有限公司-Official website


这里的$page在in_array之前没有经过任何的建饰,,,,,,, ,直接就与$whitelist作比力。。。。。。没有法子绕过,,,,,,, ,传入的target值只能为白名单里的文件名才行。。。。。。很显著,,,,,,, ,第一个并不能利用。。。。。。


再来看第二个


 8827太阳集团(Macau)股份有限公司-Official website


先介绍下这些函数的作用:


mb_strpos()函数的意思是查找字符串在另一个字符串中初次出现的地位。。。。。。


mb_substr()函数的意思是:


string mb_substr ( string $str, int $start [, int $length = NULL [, string $encoding = mb_internal_encoding()]] )

从$str字符串中,,,,,,, ,提取从$start地位起头,,,,,,, ,长度为$length的字符串。。。。。。


能够看出,,,,,,, ,第二个能够返回ture,,,,,,, ,我们利用db_sql.php?/../../体式就能够达到主张,,,,,,, ,绕过白名单限度。。。。。。那是不是这样就能够造成缝隙了呢????????


如果我们用db_sql.php?/../../../aaa.txt来绕过白名单限度进行蕴含文件。。。。。。


 8827太阳集团(Macau)股份有限公司-Official website


那这里就是 include ‘db_sql.php?/../../../aaa.txt’。。。。。。


这种体式并不能跨蹊径蕴含,,,,,,, ,由于php法式把????????号后面的器材当成是传入db_sql.php文件的参数。。。。。。


再来看第三个:


 8827太阳集团(Macau)股份有限公司-Official website


第三个和第二个对比多出了个urldecode()函数。。。。。。


而问题刚好出在了这个urldecode()函数。。。。。。


我们能够利用双沉编码绕过,,,,,,, ,将?经过两次编码%253f就能够绕过白名单验证。。。。。。


原因是:


%253f 传入时,,,,,,, ,首先会被自动解码一次,,,,,,, ,造成%3f。。。。。。而后urldecode()再解码一次,,,,,,, ,就造成了 ?。。。。。。 成功绕过了白名单限度。。。。。。


这种情况下include的蕴含情况就是这样的,,,,,,, ,也就能够肆意蕴含本地文件了。。。。。。


include  db_sql.php%3f/../../../aaa.txt。。。。。。


缝隙利用


齐全的exp:


GET /index.php?target=sql.php%3f/../../etc/passwd


tips:


1、%3f 将被解码并成为?。。。。。。

2、Core::checkPageValidity剥离所有内容?并sql.php在白名单内找到:查抄被绕过!
3、index.php运行include 'sql.php?/../../etc/passwd',,,,,,, ,PHP的魔术来转换蹊径 ../etc/passwd,,,,,,, ,而不查抄目录是否sql.php?存在。。。。。。最后,,,,,,, ,它蕴含../etc/passwd成功。。。。。。


要写这个缝隙,,,,,,, ,能够枚举文件蹊径,,,,,,, ,如:


/etc/passwd

../../etc/passwd
../windows/win.ini

../../windows/win.ini


一旦你找到了..你必要预先设置的数量 ,,,,,,, ,你能够将你的php有效载荷注入到接见日志中,,,,,,, ,或者运行一个查问SELECT ‘<?php phpinfo();?>',,,,,,, ,sql.php并蕴含你自己的会话文件(例如/var/lib/php5/sess_<PHPSESSID>),,,,,,, ,它蕴含你的SQL查问,,,,,,, ,以执行肆意PHP代码。。。。。。


建复建议


目前官方已建复该缝隙,,,,,,, ,颁布了最新版本4.8.2,,,,,,, ,可从官网下载最新版本。。。。。。


下载链接:https://www.phpmyadmin.net/news/2018/6/21/security-fix-phpmyadmin-482-released/。。。。。。


参考链接


https://www.phpmyadmin.net/security/PMASA-2018-4/
https://www.securityfocus.com/bid/104532
https://nvd.nist.gov/vuln/detail/CVE-2018-12613