您的位置:首页 > 健康 > 美食 > [第五空间 2021]WebFTP、[HCTF 2018]Warmup

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

2024/10/6 18:31:14 来源:https://blog.csdn.net/2401_82985722/article/details/139396477  浏览:    关键词:[第五空间 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,得到代码

代码审计:

<?phphighlight_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在白名单中,则返回trueif (in_array($page, $whitelist)) {return true;}// 截取$page字符串,直到第一个问号的位置$_page = mb_substr($page,0,mb_strpos($page . '?', '?'));// 如果截取后的$_page在白名单中,则返回trueif (in_array($_page, $whitelist)) {return true;}// 对$page进行URL解码$_page = urldecode($page);$_page = mb_substr($_page,0,mb_strpos($_page . '?', '?'));// 如果截取后的$_page在白名单中,则返回trueif (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 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com