phpMyAdmin远程执行代码缝隙安全公告
颁布功夫 2018-07-03缝隙编号和级别
影响领域
受影响的系统版本:
phpMyAdmin 4.8.1
缝隙概述
phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库治理工具,让治理者可用Web接口治理MySQL数据库。
在phpMyAdmin 4.8.x版本中,法式没有严格节造用户的输入,攻击者能够利用双沉编码绕过法式的白名单限度,造成文件蕴含缝隙。
此缝隙使经过身份验证的远程攻击者可能在服务器上执行肆意PHP代码。
phpMyAdmin的国内数据统计图如下:
缝隙分析
在/index.php
这里的target 能够直接传值输入。我们能够传入一个本地文件蹊径去让其蕴含,就会造成LFI缝隙。
首先,我们满足4个前提:
2.不能以/index/ 开头。
3.不能在$target_blacklist数组内。
跟踪一下checkPageValidity函数
在/libraries/classes/Core.php
该函数内,有三处返回ture的处所,只有有肆意一处返回ture就能够。观察这三处,有一个共同点,都是必要$page在$whitelist数组中内才会返回true。
我们先看第一个返回true的处所。

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

先介绍下这些函数的作用:
mb_strpos()函数的意思是查找字符串在另一个字符串中初次出现的地位。
mb_substr()函数的意思是:
从$str字符串中,提取从$start地位起头,长度为$length的字符串。
能够看出,第二个能够返回ture,我们利用db_sql.php?/../../体式就能够达到主张,绕过白名单限度。那是不是这样就能够造成缝隙了呢?
如果我们用db_sql.php?/../../../aaa.txt来绕过白名单限度进行蕴含文件。

那这里就是 include ‘db_sql.php?/../../../aaa.txt’。
这种体式并不能跨蹊径蕴含,由于php法式把?号后面的器材当成是传入db_sql.php文件的参数。
再来看第三个:

第三个和第二个对比多出了个urldecode()函数。
而问题刚好出在了这个urldecode()函数。
原因是:
%253f 传入时,首先会被自动解码一次,造成%3f。而后urldecode()再解码一次,就造成了 ?。 成功绕过了白名单限度。
这种情况下include的蕴含情况就是这样的,也就能够肆意蕴含本地文件了。
缝隙利用
齐全的exp:
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
建复建议
目前官方已建复该缝隙,颁布了最新版本4.8.2,可从官网下载最新版本。
参考链接
https://www.securityfocus.com/bid/104532
https://nvd.nist.gov/vuln/detail/CVE-2018-12613


京公网安备11010802024551号