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

BUUCTF_web_第一题: [HCTF 2018]WarmUp

七星3个月前 (01-21)BUU273


第一题: [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_第五题:[SUCTF 2019]EasySQL

BUUCTF_web_第五题:[SUCTF 2019]EasySQL

[SUCTF 2019]EasySQL打开题目,发现一个搜索框,尝试发现是堆叠注入,先查一下数据库:1;show databases;得到:Array ( [0] => 1 )Array ( [...

BUUCTF_web_第13题:[RoarCTF 2019]Easy Calc

BUUCTF_web_第13题:[RoarCTF 2019]Easy Calc

打开题, 发现是个计算器,传入表达式,计算结果,乍一看没啥问题然后祖传的f12, 首先看到的就是一个祖传的注释:<!--I've set up WAF to ensure security.--...

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

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

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

BUUCTF_web_第15题:[极客大挑战 2019]PHP_序列化详解

BUUCTF_web_第15题:[极客大挑战 2019]PHP_序列化详解

打开题目, 有个猫, 先云吸个猫再说. 然后提到了备份网站. 既然是备份那自然想到的是www.rar或者zip之类的, 再不行就爆破一下路径也就出来了, 这个题是www.zip, 直接访问,...

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

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

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

BUUCTF_web_第九题:[GXYCTF2019]Ping Ping Ping

BUUCTF_web_第九题:[GXYCTF2019]Ping Ping Ping

是个ping, 传入/?ip=127.0.0.1看看命令执行, 立刻想到||管道符:/?ip=127.0.0.1||ls不行, 那就封号;/?ip=127.0.0.1;ls成功获得两个文件名flag....

发表评论

访客

看不清,换一张

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