buuctf web write-up

2021-03-29 07:26

阅读:482

标签:func   文件   page   变化   lis   php   include   lse   https   

warm up (HCTF2018)

漏洞名称:

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

查看源码,source.php,进去看到源码

 "source.php","hint"=>"hint.php"];
            if (! isset($page) || !is_string($page)) {
                echo "you can‘t see it";
                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;
            }
            echo "you can‘t see it";
            return false;
        }
    }

    if (! empty($_REQUEST[‘file‘])
        && is_string($_REQUEST[‘file‘])
        && emmm::checkFile($_REQUEST[‘file‘])
    ) {
        include $_REQUEST[‘file‘];
        exit;
    } else {
        echo "
"; } ?>

分段来看

$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
            if (! isset($page) || !is_string($page)) {
                echo "you can‘t see it";
                return false;
            }
 if (in_array($page, $whitelist)) {
                return true;
            }
    

首先是白名单,提交的page中要是白名单内的。

$_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;
            }

1、是page取?前作为_page再判断是否属于白名单
2、url解密一次
3、再取?前再判断一次

hint.php说在ffffllllaaaagggg.php,穿越目录读取

这里用?两次url编码,就可以绕过urldecode

这便符合了 ? 前面内容在白名单里会返回 true,会被包含,通过目录穿越就会造成任意文件包含漏洞

payload ?file=source.php%253f../../../../../../../../ffffllllaaaagggg

两个source.php就绕过了两个白名单检测。

至于多少个../就一个个试过去

随便注 [强网杯 2019]

技术图片
单引号报错,从这是注入点

技术图片

order by 3报错,最多两列

技术图片
尝试union select ,屏蔽了这些关键词,尝试双写绕过,没有变化。

这是想到堆叠注入。

在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ;
结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。

buuctf web write-up

标签:func   文件   page   变化   lis   php   include   lse   https   

原文地址:https://www.cnblogs.com/vstar-o/p/12609590.html


评论


亲,登录后才可以留言!