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提出灵活的应用 ...
随机推荐
- spring 注解注入bean
通过注解方式注入bean,需要在配置类下注入bean 第一步,配置扫描文件夹 首先要在spring.xml中配置需要扫描的配置类 <context:componenet-scan base-pa ...
- 如何在Kubernetes 里添加自定义的 API 对象(一)
环境: golang 1.15 依赖包采用go module 实例:现在往 Kubernetes 添加一个名叫 Network 的 API 资源类型.它的作用是,一旦用户创建一个 Network 对象 ...
- [源码解析] NVIDIA HugeCTR,GPU 版本参数服务器 --(1)
[源码解析] NVIDIA HugeCTR,GPU版本参数服务器 --(1) 目录 [源码解析] NVIDIA HugeCTR,GPU版本参数服务器 --(1) 0x00 摘要 0x01 背景 1.1 ...
- Solution -「COCI 2014-2015 #2」「洛谷 P6406」Norma
\(\mathcal{Description}\) Link. 给定 \(\{a_n\}\),求: \[\sum_{i=1}^n\sum_{j=i}^n(j-i+1)\min_{k=i}^j\ ...
- CentOS7搭建yum源仓库(阿里源)
文章目录 注意:环境要求 1.配置服务器端yum 1.1.安装yum源工具 1.2.配置nginx 1.2.1.配置nginx页面目录 1.3.替换yum源文件 1.4.建立yum源仓库 2.配置客户 ...
- c++ struct enum union加typedef与不加typedef
struct/enum/union加typedef与不加typedef 匿名结构体 struct { int a; int b; } v; // 这里表示定义了一个结构体的变量v,且结构体类型没有名字 ...
- Redis持久化、主从与哨兵架构详解
目录 Redis持久化 RDB快照(snapshot) AOF(append-only file) AOF重写 Redis 4.0 混合持久化 Redis数据备份策略: Redis主从架构 Redis ...
- web开发 小方法1-禁止横向滚动
最近学了学做了个公司的网站 总结了一些小方法 比如取消横向滚动条并禁止的横向滚动 这样就可以吧超出的切掉让网页更和谐 在body 标签 body{ text-align: center; overf ...
- [VSCode] Todo Tree VSCode插件 待办事项树
Todo Tree 一款待办事项插件 我们写程序的时候,难免会遇到一些情况需要标记或者搁置,在写代码的时候会用一些特殊的注释来表示不同的内容,使我们可以快速的定位我们注释的位置. 主要有以下几种: T ...
- 智能脚本工具(Smart scripts)测试应用
如果你是一位网络测试人员,您的工作中是否有出现过以下困扰呢? · 重复机械式的测试有时让你觉得工作是如此的枯燥乏味!· 只增不减的测试用例让你下班越来越晚!· 请求老板招人,人却永远不够用! 但值得庆 ...