[代码审计][HCTF 2018]WarmUp与CVE-2018-12613

文章目录

  • 前言
  • WP
  • CVE-2018-12613

前言

在request请求当中就会被url解码一次,这就是接下来为什么会需要两次编码绕过

WP

打开靶机看到一个滑稽图片,审查元素发现有个source.php
[代码审计][HCTF 2018]WarmUp与CVE-2018-12613_第1张图片
访问发现需要我们进行代码审计,下面对代码进行分析

    highlight_file(__FILE__); 
    class emmm  
    {
        public static function checkFile(&$page)
        {
            $whitelist = ["source"=>"source.php","hint"=>"hint.php"];//声明一个白名单数组
            if (! isset($page) || !is_string($page)) {//若$page变量不存在或page中值非字符串
                echo "you can't see it";
                return false;//返回false
            }

            if (in_array($page, $whitelist)) {//$page变量存在于$whitelist数组中
                return true;//返回true(我们后面会对其进行绕过)
            }

            $_page = mb_substr(//该代码表示要截取$page'?'前部分,若无则截取整个$page
                $page,
                0,
                mb_strpos($page.'?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;//返回true(我们后面会对其进行绕过)
            }

            $_page = urldecode($page);//url解码$page
            $_page = mb_substr(
                $_page,
                0,
                mb_strpos($_page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;//返回true(这里必须返回了,不然就是false)
            }
            echo "you can't see it";
            return false;
        }
    }

若以上四个if语句均未返回值,则返回false

再看最下面的执行,要求一个if语句要求传入的file变量:

  • 非空
  • 类型为字符串
  • 能够通过checkFile()函数校验
  • 同时满足以上三个要求即可包含file中的文件,否则打印滑稽表情

因此我们可以构造payload:
http://***:***/source.php?file=source.php%253f../../../../../ffffllllaaaagggg

CVE-2018-12613

本来想自己写的但是发现网上别人写的很清楚就不污染SEO环境了
phpmyadmin4.8.1远程文件包含漏洞(CVE-2018-12613)

你可能感兴趣的:(安全学习,#,PHP代码审计,#,Web)