• warmup(HCTF 2018)


    为啥想写这道题的wp呢,因为这道题就是照着phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)复现出来的

    题目

    查看源码很容易找到source.php,直接访问

    分析

    题目的意思也很好理解主要是要这三个条件全部满足,就会进行文件包含

    if (! empty($_REQUEST['file'])
            && is_string($_REQUEST['file'])
            && emmm::checkFile($_REQUEST['file'])
        ) {
            include $_REQUEST['file'];
            exit;
        }

    发现了checkFile()这个函数,那我们从这个函数来进行分析

    首先进来发现了白名单

    $whitelist = ["source"=>"source.php","hint"=>"hint.php"];

    还有就是该函数的末尾,如果输入的参数值包含有白名单里的值,就会返回true

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

    那我们先来看下hint.php(因为这个文件可能是隐藏文件)

    http://220.249.52.133:54093/source.php?file=hint.php

     确实是给了提示,接下来我们就要考虑怎样绕过,最后读到ffffllllaaaagggg中的内容

    $_page = mb_substr(
                    $page,
                    0,
                    mb_strpos($page . '?', '?')
                );

    这个都很好理解,其实大概的意思就是先在$page最后追加个?,再返回最后一个?的地址,然后再用mb_substr截断,大概截断的就是传入file参数的内容

    我们可以考虑用双重编码绕过,因为后端会自动解码一次,然后遇到urldecode()函数会再次进行解码,来进行绕过白名单

    payload:

    http://220.249.52.133:54093/source.php?file=hint.php%253f../../../../../../ffffllllaaaagggg

    ps:这里我之前有个疑惑,就是最后再进行包含的时候这个?会有没有影响,其实我大概实践了一下,在进行目录穿越的过程中,文件名+其他字符../../../ 这是没有影响的

     确实是可以返回上一级目录

  • 相关阅读:
    排序与查找
    gdb
    编码风格
    数组
    结构体
    循环语句
    深入理解函数
    分支语句
    简单函数
    解决国内NPM安装依赖速度慢问题
  • 原文地址:https://www.cnblogs.com/zzjdbk/p/13756442.html
Copyright © 2020-2023  润新知