BUUCTF[MRCTF2020]Ez_bypass 1

启动靶场

 发现是一串代码,进行代码分析

<?php
I put something in F12 for you
include 'flag.php';
$flag='MRCTF{xxxxxxxxxxxxxxxxxxxxxxxxx}';
if(isset($_GET['gg'])&&isset($_GET['id'])) {
    $id=$_GET['id'];
    $gg=$_GET['gg'];
    if (md5($id) === md5($gg) && $id !== $gg) {
        echo 'You got the first step';
        if(isset($_POST['passwd'])) {
            $passwd=$_POST['passwd'];
            if (!is_numeric($passwd))//(判断passwd是不是数字)
            {
                 if($passwd==1234567)
                 {
                     echo 'Good Job!';
                     highlight_file('flag.php');
                     die('By Retr_0');
                 }
                 else
                 {
                     echo "can you think twice??";
                 }
            }
            else{
                echo 'You can not get it !';
            }

        }
        else{
            die('only one way to get the flag');
        }
}
    else {
        echo "You are not a real hacker!";
    }
}
else{
    die('Please input first');
}
}Please input first
php>

  1.md5()无法处理数组,所以如果传入的两个参数都是数组,那么md5()函数返回的都是false,false===false成立 

    ?id[]=1&gg[]=2

  2.passwd要用post上传

  3.passwd不全为数字,但传入进去要为1234567

    php弱类型比较

    php==在比较不同类型的数据时,会首先将==两边的数据转化为同一类型,字符型数据与数字型数据进行比较,字符型数据会转化为数据型数据。

    比如1234567a会转化为1234567再进行比较,同时也绕过了is_numeric()函数

    post下传入passwd=1234567a

解法一:

用hackbar

得到flag

解法二:

用burpsuite进行构造(我的burpsuite没有试出来,这里附上成功的图)

 得到flag

posted @ 2021-10-11 21:43  LoYoHo00  阅读(481)  评论(0编辑  收藏  举报
levels of contents