freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

CVE-2018-12613phpMyAdmin 后台文件包含漏洞分析
2019-07-08 16:16:46

一、    漏洞背景

phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径,尤其要处理大量资料的汇入及汇出更为方便。其中一个更大的优势在于由于phpMyAdmin跟其他PHP程式一样在网页服务器上执行,但是您可以在任何地方使用这些程式产生的HTML页面,也就是于远端管理MySQL数据库,方便的建立、修改、删除数据库及资料表。也可借由phpMyAdmin建立常用的php语法,方便编写网页时所需要的sql语法正确性。

ChaMd5安全团队披露了他们发现的一个phpMyAdmin文件包含漏洞,并且演示了如何将本地文件包含升级至远程命令执行。随后,phpmyadmin在最新版本修复了这个严重级别的漏洞。

二、    漏洞描述

攻击者利用发现在服务器上包含(查看和潜在执行)文件的漏洞。该漏洞来自一部分代码,其中页面在phpMyAdmin中被重定向和加载,以及对白名单页面进行不正确的测试。

攻击者必须经过身份验证,但在这些情况下除外:

$ cfg ['AllowArbitraryServer'] = true:攻击者可以指定他/她已经控制的任何主机,并在phpMyAdmin上执行任意代码;

$ cfg ['ServerDefault'] = 0:这会绕过登录并在没有任何身份验证的情况下运行易受攻击的代码。

影响版本:phpMyAdmin 4.8.0和4.8.1

三、    漏洞分析

 图片.png

测试发现漏洞的入口在index.php 54-63行,我们可以看到if区间一共有五个判断:

1. 是否存在target参数

2. target参数是否为字符串

3. 值不能以index开头

4. 值不能出现在$target_blacklist内

5. Core类的checkPageValidity方法判断

如果通过判断则包含参数所指定的文件,存在文件包含隐患。前三个判断比较通俗易懂,重要的是后面两个判断,调用第四个判断函数,数组中有两个参数。

 图片.png

$target_blacklist中的数组为import.php 和 export.php,只要target的值不是这两个就可以,然后进入第五个判断。

首先找到Core类的checkPageValidity函数,在文件libraries/classes/Core.php文件中。

 图片.png

checkPageValidity函数里又是五个判断:

1. $whitelist为空则引用静态声明的$goto_whitelist

2. 如果$page没有被定义过或者$page不为字符串则return false

3. $page存在$whitelist中的某个值则返回true

4. $_page存在$whitelist中的某个值则返回true

5. 经过urldecode函数解码后的$_page存在$whitelist中的某个值则返回true

首先index.php调用checkPageValidity参数时并没有传第二个参数所以会进入此参数的第一个if区间,我们来看一下$goto_whilelist

 图片.png

$goto_whilelist定义了些可以被包含的文件名(省略了一部分)

第二个if直接跳过我们来看第三个if区间,如果$page如果等于$goto_whilelist的某个值则return真。phpmyadmin的开发团队考虑的很全面,想到了会存在target的值后面再跟参数的情况,于是有了第三个判断:

 图片.png

$_page为 以?分割然后取出前面的字符串再判断值是否存在于$goto_whilelist某个数组中。这个判断的作用是,如果target值带有参数的情况下,phpmyadmin也能正确的包含文件。

正因为phpmyadmin团队考虑的太全面了,才会出现此漏洞。

 图片.png

后面又将$page参数用urlencode解码再进行以?分割取出前面的值做判断。

那么传入target=db_sql.php%253f/../../test.txt,txt内容为//%253f是?号的二此url编码,urlcode将$page解码后是db_sql.php?/../../test.php 。再以?分割取出来前面的字符串为index.php,$whitelist中有index.php所以会进入最后一个if区间return true

index.php中提到

 图片.png

前面5个if都符合后会包含$_REQUEST['target'],target值会被解析成db_sql.php%3f/../../test.txt,因为php会把前面db_sql.php%3f当成目录,所以要多加一个../来跳出此目录,执行后面语句。

 图片.png

四、    漏洞复现

在这里我们利用包含session文件的方式来复现文件包含漏洞。首先进入VulnSpy 在线 phpMyAdmin 环境地址,点击 Start to Hack ,跳转到VSPlate。然后点击正在处于running状态演示地址项目,进行实验环境为phpmyadmin-4.8.1的文件包含漏洞复现。

 图片.png

点击进入演示地址,帐户密码未root/toor。

 图片.png图片.png

然后点击SQL,执行select语句:    

select '<?php phpinfo();exit;?>',执行成功如下

 图片.png

PHP会序列化参数传递的值,并且保存在本地的session文件中。此时,F12查看当前phpmyadmin的cookie,并记录。

 图片.png

Macos的session保存目录为/var/tmp/,Linux的session保存目录为/var/lib/php/sessions,这样当前对应的SESSION文件为/var/lib/php/sessions/sess_你的SESSION ID。当前为:var/lib/php/sessions/sess_8e7caa4u1m3gdhrij0g3thfllbqfsrqf

然后在当前URL中包含次session文件:

http://4c69a765fd110c8271e6e2174576855a.vsplate.me/index.php?target=db_sql.php%253f/../../../../../../../../var/lib/php/sessions/sess_8e7caa4u1m3gdhrij0g3thfllbqfsrqf,执行成功复现文件包含漏洞和命令执行。

 图片.png

此外,还有2种getshell的方法,第一个是上传sql文件,然后包含mysql的sql文件,第二个是开启general_log来完成getshell。不过这两种思路都有些繁琐,利用有一定的局限性,所以仅以Phithon师傅在知识星球【代码审计】中提供的session文件包含来验证次命令执行漏洞。

五、    修复建议

在漏洞发布不久,该漏洞已经被修复,漏洞存在于版本号小于4.8.2的所有历史版本中,通过git changelog查看官方如何修复漏洞的。查看补丁源码,参考URL:https://github.com/phpmyadmin/phpmyadmin/commit/d1360f46cef76c5182116eb2b8fdbab1b20e687a

 图片.png

发现修复手法简单粗暴,直接在checkPageValidity中多加了一个参数$include。当$include=true时,仅执行第一次判断$page的合法性,我们的payload也就没有办法进入到urldecode的步骤了


关注我们

Tide安全团队正式成立于2019年1月,是以互联网攻防技术研究为目标的安全团队,目前聚集了十多位专业的安全攻防技术研究人员,专注于网络攻防、Web安全、移动终端、安全开发、IoT/物联网/工控安全等方向。

想了解更多Tide安全团队,请关注团队官网: http://www.TideSec.net 或关注公众号:

1551433162_5c78fdca9fae9.jpg

# CVE-2018-12613phpMyAdmin
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者