CVE-2018-12613phpMyAdmin 后台文件包含漏洞分析
一、 漏洞背景
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
三、 漏洞分析
测试发现漏洞的入口在index.php 54-63行,我们可以看到if区间一共有五个判断:
1. 是否存在target参数
2. target参数是否为字符串
3. 值不能以index开头
4. 值不能出现在$target_blacklist内
5. Core类的checkPageValidity方法判断
如果通过判断则包含参数所指定的文件,存在文件包含隐患。前三个判断比较通俗易懂,重要的是后面两个判断,调用第四个判断函数,数组中有两个参数。
$target_blacklist中的数组为import.php 和 export.php,只要target的值不是这两个就可以,然后进入第五个判断。
首先找到Core类的checkPageValidity函数,在文件libraries/classes/Core.php文件中。
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
$goto_whilelist定义了些可以被包含的文件名(省略了一部分)
第二个if直接跳过我们来看第三个if区间,如果$page如果等于$goto_whilelist的某个值则return真。phpmyadmin的开发团队考虑的很全面,想到了会存在target的值后面再跟参数的情况,于是有了第三个判断:
$_page为 以?分割然后取出前面的字符串再判断值是否存在于$goto_whilelist某个数组中。这个判断的作用是,如果target值带有参数的情况下,phpmyadmin也能正确的包含文件。
正因为phpmyadmin团队考虑的太全面了,才会出现此漏洞。
后面又将$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中提到
前面5个if都符合后会包含$_REQUEST['target'],target值会被解析成db_sql.php%3f/../../test.txt,因为php会把前面db_sql.php%3f当成目录,所以要多加一个../来跳出此目录,执行后面语句。
四、 漏洞复现
在这里我们利用包含session文件的方式来复现文件包含漏洞。首先进入VulnSpy 在线 phpMyAdmin 环境地址,点击 Start to Hack ,跳转到VSPlate。然后点击正在处于running状态演示地址项目,进行实验环境为phpmyadmin-4.8.1的文件包含漏洞复现。
点击进入演示地址,帐户密码未root/toor。
然后点击SQL,执行select语句:
select '<?php phpinfo();exit;?>',执行成功如下
PHP会序列化参数传递的值,并且保存在本地的session文件中。此时,F12查看当前phpmyadmin的cookie,并记录。
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,执行成功复现文件包含漏洞和命令执行。
此外,还有2种getshell的方法,第一个是上传sql文件,然后包含mysql的sql文件,第二个是开启general_log来完成getshell。不过这两种思路都有些繁琐,利用有一定的局限性,所以仅以Phithon师傅在知识星球【代码审计】中提供的session文件包含来验证次命令执行漏洞。
五、 修复建议
在漏洞发布不久,该漏洞已经被修复,漏洞存在于版本号小于4.8.2的所有历史版本中,通过git changelog查看官方如何修复漏洞的。查看补丁源码,参考URL:https://github.com/phpmyadmin/phpmyadmin/commit/d1360f46cef76c5182116eb2b8fdbab1b20e687a
发现修复手法简单粗暴,直接在checkPageValidity中多加了一个参数$include。当$include=true时,仅执行第一次判断$page的合法性,我们的payload也就没有办法进入到urldecode的步骤了
CVE-2018-12613phpMyAdmin 后台文件包含漏洞分析的更多相关文章
- cve-2018-12613-PhpMyadmin后台文件包含漏洞
前言 刚开始复现这个漏洞的时候是在自己的本机上然后跟着大佬的复现步骤可是没有预期的结果最后看了另一篇文章 当时整个人都麻了 首先何为phpMyAdmin 根据官方的说明phpMy ...
- Elasticsearch 核心插件Kibana 本地文件包含漏洞分析(CVE-2018-17246)
不久前Elasticsearch发布了最新安全公告, Elasticsearch Kibana 6.4.3之前版本和5.6.13之前版本中的Console插件存在严重的本地文件包含漏洞可导致拒绝服务攻 ...
- phpmyadmin任意文件包含漏洞分析(含演示)
0x01 漏洞描述 phpmyadmin是一款应用非常广泛的mysql数据库管理软件,基于PHP开发. 最新的CVE-2014-8959公告中,提到该程序多个版本存在任意文件包含漏洞,影响版本如下: ...
- [CVE-2014-8959] phpmyadmin任意文件包含漏洞分析
0x01 漏洞描述 phpmyadmin是一款应用非常广泛的mysql数据库管理软件,基于PHP开发. 最新的CVE-2014-8959公告中,提到该程序多个版本存在任意文件包含漏洞,影响版本如下: ...
- thinkphp 5.x~3.x 文件包含漏洞分析
漏洞描述: ThinkPHP在加载模版解析变量时存在变量覆盖的问题,且没有对 $cacheFile 进行相应的消毒处理,导致模板文件的路径可以被覆盖,从而导致任意文件包含漏洞的发生. 主要还是变量覆盖 ...
- [WEB安全]phpMyadmin后台任意文件包含漏洞分析(CVE-2018-12613)
0x00 简介 影响版本:4.8.0--4.8.1 本次实验采用版本:4.8.1 0x01 效果展示 payload: http://your-ip:8080/index.php?target=db_ ...
- phpMyadmin(CVE-2018-12613)后台任意文件包含漏洞分析
前言 影响版本:4.8.0--4.8.1 本次复现使用4.8.1 点击下载 复现平台为vulhub.此漏洞复现平台如何安装使用不在赘述.请自行百度. 漏洞复现 漏洞环境启动成功. 访问该漏洞地 ...
- Tomcat AJP 文件包含漏洞复现(CVE-2020-1938)
漏洞原理 Tomcat配置了两个Connecto,它们分别是HTTP和AJP. HTTP默认端口为8080,处理http请求:AJP默认端口8009,用于处理 AJP 协议的请求. AJP比http更 ...
- ThinkCMF框架任意内容包含漏洞分析复现(写入shell+文件包哈)
ThinkCMF框架任意内容包含漏洞分析复现 0x00 简介 ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3.2.3构建.ThinkCMF提出灵活的应用 ...
随机推荐
- 广播接收者案例_ip拨号器
(1)定义一个类继承BroadCastReceiver public class OutGoingCallReceiver extends BroadcastReceiver { //当接收到外拨电话 ...
- PHP中的一些常用函数收集
<?php //===============================时间日期=============================== //y返回年最后两位,Y年四位数,m月份数字 ...
- 通过Python自带模块SimpleHTTPServer快速共享服务的配置文件
简介 SimpleHTTPServer是Python 2自带的一个模块,是Python的Web服务器,简单小巧,快速启动. 它在Python 3已经合并到http.server模块中. SimpleH ...
- iOS WKWebView 使用笔记
首先添加Webkit框架
- onclick="func()"和 onclick = "return func()"区别
onclick="func()" 表示只会执行 func , 但是不会传回 func 中之回传值onclick = "return func()" 则是 执行 ...
- 用代码创建并实例化在storyboard中声明的ViewController
我们的项目最早是基于storyboard开发的,所以一开始所有的ViewController都通过storyboard创建,并通过segue连接跳转 但是今天其中一个controller的view,我 ...
- Firewalld防火墙——基础认知
Firewalld防火墙 1.Firewalld概述 2.firewalld与iptables 的区别 3.firewalld区域的概念 4.firewalld数据处理流程 5.firewalld检查 ...
- typora与picgo搭配gitee的图床使用
关于基础配置,参考下面4篇文章 https://segmentfault.com/a/1190000039358062 https://blog.csdn.net/qq_42827680/articl ...
- spring boot 配置静态路径
一 前言 最近有个项目,需要上传一个zip文件(zip文件就是一堆的html压缩组成)的压缩文件,然后后端解压出来,用户可以预览上传好的文件. 查看资料,spring boot对静态文件,可以通过配 ...
- 《从零开始, 开发一个 Web Office 套件》系列博客目录
这是一个系列博客, 最终目的是要做一个基于HTML Canvas 的, 类似于微软 Office 的 Web Office 套件, 包括: 文档, 表格, 幻灯片... 等等. 对应的Github r ...