• 练[MRCTF2020]Ez_bypass


    [MRCTF2020]Ez_bypass


    在这里插入图片描述

    掌握知识

    ​ 代码审计,md5函数绕过,is_numeric函数绕过,弱等于的字符串和数字类型绕过

    解题思路

    1. 打开题目链接,发现是代码审计题目,简单的查看了一下代码,主要是需要绕过三个判断,就能包含flag.php文件,拿下flag
    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))
                {
                     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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    1. 前面的知识判断有没有传值,传值就能通过判断,来到第一个判断下,是md5函数的强等于判断,没有强转string类型,可以使用数组进行绕过,即id[]=1&gg[]=2
    if (md5($id) === md5($gg) && $id !== $gg)
    
    • 1
    1. 第二个主要的判断就是is_numeric函数,该函数是判断变量是否是数字,如果是则返回ture,所以想通过下面if语句,需要passwd传入的参数不是全数字就会被当作字符串了
    if (!is_numeric($passwd))
    
    • 1
    1. 上面判断passwd变量不能全数字,下面就必须要是1234567才能通过。但毕竟是弱等于,所以只需要值相同,类型不同也能通过,由于右边是int型,字符串和int类型==比较时,只会把字符串前几位数字部分截取下来,遇到字母就会停止,所以passwd的值为1234567a,a可以使任意字母
    if($passwd==1234567)
    
    • 1
    1. 将上面的内容综合传参,拿下flag

    image-20231004234804418

    关键paylaod

    /?id[]=1&gg[]=2
    passwd=1234567a
    
    • 1
    • 2
  • 相关阅读:
    Day10—Spark SQL基础
    Android 12.0 hal层添加自定义hal模块功能实现
    A3纸内容分2页打在A4纸上
    C语言“我的家谱”程序
    用Python做一个文件夹整理工具
    聊聊JDK19特性之虚拟线程
    基于Python的Django出租车大数据分析系统实现
    NTP 时间同步
    Flutter 精品项目大全之 完整UI组件商城项目(教程含源码)
    【Python 千题 —— 基础篇】菜品的价格
  • 原文地址:https://blog.csdn.net/m0_66225311/article/details/133564130