当前位置:首页 > CTF > BUU > 正文内容

BUUCTF_web_第一题: [HCTF 2018]WarmUp

七星4年前 (2021-01-21)BUU1610


第一题: [HCTF 2018]WarmUp

f12, 注释里有个文件, 访问, 成功获得审计代码.

审计代码里有个hint.php,

打开, 成功获得ffffllllaaaagggg,,没啥用

接着审代码.逐行阅读

highlight_file(__FILE__);当前文件代码高亮显示(没啥用,只是给你了代码)

class emmm{}定义了一个emmm

empty() 检测变量是否为空,

is_string()检测是否为字符串

上面两个函数,直接无视了, 直接看第三个函数,

emmm::checkFile()调用了emmm类里面的checkFile函数做了检查, 只有这个函数的返回值为turn, 才会执include $_REQUEST['file'];

看看这个checkFile()函数.

首先需要传入$page, 也就是之前的$_REQUEST['file']

然后一上来先定义了一个$whitelist的数组(白名单),

$whitelist = ["source"=>"source.php","hint"=>"hint.php"];

source的值是source.php, hint的值是hint.php

接着,一个一个看下面的if条件判断

if (! isset($page) || !is_string($page)) {echo "you can't see it";

return false;}

没啥用, 铁定不执行if, 跳过

if (in_array($page$whitelist)) {return true;}

只要我们传入的文件名在$whitelist里面, 就直接返回true, 但并不是我们想要的. 因为只传入source.phphint.php是得不到flag.所以接着往下看

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

先看mb_strpos($page '?''?')

他干了这么一个事: 首先在$page变量后面添加一个'?',

然后开始在$page.'?'中查找第一个'?'出现的位置,并将该位置返回.

这句总体就干这么一件事:

$page变量中截取0到第一个问号之间的部分,赋值给$_page

接着

if (in_array($_page$whitelist)) {return true;

}

判断$_page是否在白名单中.

$_page urldecode($page);

然后把$page进行url解码, 并赋值给$_page

$_page mb_substr(                $_page,                0,                mb_strpos($_page '?''?')            );            if (in_array($_page$whitelist)) {                return true;            }            echo "you can't see it";            return false;

然后这一段和上面一样,

$_page变量中截取0到第一个问号之间的部分,赋值给$_page

判断$_page是否在白名单中.

所以,我们传入的文件名就只能是source.phphint.php.

所以我们能构造的payload只能是下面形式:

http://xxx.node3.buuoj.cn/source.php?file=source.php?(payload)

http://xxx.node3.buuoj.cn/source.php?file=hint.php?(payload)

因为传入的文件不能改, 就只能用本地文件包含了.包含哪个文件呢?

之前的hint.php有提到ffffllllaaaagggg,那就试试

http://xxx.node3.buuoj.cn/source.php?file=source.php?ffffllllaaaagggg

发现路径不对, 好办, 在文件前面加一堆/..就好了:

http://61122dbd-b2b3-4026-a29a-c9282f3cbf13.node3.buuoj.cn/source.php?file=source.php?../../../../../../ffffllllaaaagggg

这是include的一个特性, 如果定义了像../路径, 就会在父路径下寻找文件,所以只要/..足够多, 就能找到ffff....ggg这个文件.


转载请声名出处|qixingbit.com

相关文章

BUUCTF_web_第二题:[强网杯 2019]随便注

BUUCTF_web_第二题:[强网杯 2019]随便注

第二题: [强网杯 2019]随便注 测试一下, 1'# 返回正常, 发现是字符注入,尝试show一下database: 1';show databases;%23 发现出结果了:...

 BUUCTF_web_第三题:[极客大挑战 2019]EasySQL

BUUCTF_web_第三题:[极客大挑战 2019]EasySQL

第三题: [极客大挑战 2019]EasySQL 常规SQL注入, 没啥说的, 好多种解法, 既然是登录, 这里就写一个万能用户: 1' or 1=1# 密码随便填, 就能getflag...

BUUCTF_web_第四题:[极客大挑战 2019]Havefun

BUUCTF_web_第四题:[极客大挑战 2019]Havefun

开局一直猫, flag全靠f12:<!--˂!----˃$cat=$_GET['cat'];echo $cat;if($cat=='dog'){    echo 'Syc{c...

BUUCTF_web_第六题:[ACTF2020 新生赛]Include

BUUCTF_web_第六题:[ACTF2020 新生赛]Include

发现是一道include的题, 啥提示也没有,点一下给个tips, 获取到一个?file=flag.php很自然想到了include可以把文件base64再读取文件:/?file=php:/...

BUUCTF_web_第七题:[极客大挑战 2019]Secret File

BUUCTF_web_第七题:[极客大挑战 2019]Secret File

f12, 获得Archive_room.php访问, 嗯, 他说什么什么快没看清, 不要紧, 我们可以让他慢下来开burpsuite, 抓取回显包, 得到secr3t.php访问,成功获得源码high...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。