[第五空间 2021]WebFTP、[HCTF 2018]Warmup

目录

[第五空间 2021]WebFTP

​[SWPUCTF 2021 新生赛]Do_you_know_http

[NCTF 2018]签到题

[HNCTF 2022 Week1]What is Web

[HNCTF 2022 Week1]Interesting_http

[HCTF 2018]Warmup


[第五空间 2021]WebFTP

使用dirsearch扫描,发现有git泄露

使用GitHack克隆目录,但提示为空仓库

python2 GitHack.py http://node4.anna.nssctf.cn:28914/?m=login&a=in/.git

还有其他目录,在phpinfo.php中发现flag

[SWPUCTF 2021 新生赛]Do_you_know_http

打开环境提示说,请使用“WLLM”浏览器!

bp抓包修改UA头为WLLM,发包后提示只能本地访问 id为183.224.81.105

添加X-Forwarded-For:127.0.0.1,回显可看到地址已经变为本地

发包得flag

[NCTF 2018]签到题

抓包发到重发器,回显后发现flag。

[HNCTF 2022 Week1]What is Web

跟上题一样,bp抓包发到重发器,回显后发现flag(base64解码)。

[HNCTF 2022 Week1]Interesting_http

打开环境 提示 POST 发包,参数名为 want

使用HackBar  POST传参want,提示有flag

令want=flag,提示不是 admin 用户

bp抓包将cookie中的user改为admin

改了之后又提示 不是本地,添加xff(X-Forwarded-For:127.0.0.1)回显得到flag。

[HCTF 2018]Warmup

[HCTF 2018]WarmUp(代码审不好,看大佬wp)

打开环境只有一个表情包,查看源代码发现source.php

访问source.php,得到代码

代码审计:

<?php
    highlight_file(__FILE__);        // 引入当前文件

class emmm
{
    public static function checkFile(&$page)
    {
        // 定义一个白名单,包含允许访问的文件名"source.php"和"hint.php"
        $whitelist = ["source"=>"source.php","hint"=>"hint.php"];

//定义了一个名为emmm的类,在该类中有一个静态方法checkFile用于检查要包含的文件是否在白名单中,白名单是一个关联数组$whitelist,其中包含了允许包含的文件的键值对。

        // 如果没有设置$page变量或者$page不是字符串,则返回错误信息
        if (! isset($page) || !is_string($page)) {
            echo "you can't see it";
            return false;
        }

        // 如果$page在白名单中,则返回true
        if (in_array($page, $whitelist)) {
            return true;
        }

        // 截取$page字符串,直到第一个问号的位置
        $_page = mb_substr(
            $page,
            0,
            mb_strpos($page . '?', '?')
        );
        // 如果截取后的$_page在白名单中,则返回true
        if (in_array($_page, $whitelist)) {
            return true;
        }

        // 对$page进行URL解码
        $_page = urldecode($page);

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

        // 如果截取后的$_page在白名单中,则返回true
        if (in_array($_page, $whitelist)) {
            return true;
        }

        // 如果都不满足条件,则返回错误信息
        echo "you can't see it";
        return false;
    }
}

符号点 '.' 是 PHP 中的字符串连接运算符,它用于将两个字符串连接在一起,形成一个更长的字符串。

它将 $page 变量的值和一个问号字符 '?' 连接在一起,形成一个新的字符串,在这个新的字符串中查找问号是否存在,那么很明显肯定能找到。

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

//先使用mb_strpos函数找到$page中第一个问号的位置,然后使用mb_substr函数将问号之前的部分作为$_page进行处理。

 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\" />";
    }  

//检查$_REQUEST['file']是否存在且为字符串类型,并调用emmm::checkFile方法进行检查。如果返回值为true,则通过include语句包含$_REQUEST['file']指定的文件并终止程序执行,否则输出一个图片标签。

始终在source.php页面下进行的传参操作,目的是利用include函数将flag文件包含出来

尝试访问hint.php,提示flag在ffffllllaaaagggg中。

source.php?file=hint.php

//php代码的判断过程:

传入file=hint.php,首先检查'hint.php'是否是一个字符串,它是字符串,条件通过;

检查'hint.php'是否在白名单中(白名单包括hint.php和source.php),在,继续执行后面的代码;

对'hint.php'执行mb_substr函数,但是函数内一个参数是来自另一个函数mb_strpos的返回值,因此我们先看mb_strpos函数,使用.进行字符连接,即连接了一个问号字符 '?',得到hint.php?

然后查找'?'在字符串'hint.php?'中第一次出现的位置,从0开始算,返回8,即length=8

接下来执行mb_substr函数,即 mb_substr('hint.php',0,8)

从字符串中的第一个字符处开始,返回8个字符,还是返回hint.php;

然后对返回的内容进行url解码,重复执行上面的检查和截取操作。

构造payload,得到flag。

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

//因为当前的source.php一般是在html目录下,往上是www,var,然后到根目录。
flag一般就放在根目录下面,这里还有一个hint.php?/或source.php?/,因此需要返回四层才能到根目录。
即 hint.php?/var/www/html/ffffllllaaaagggg 

  • 13
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值