鹤壁杯-web签到题

题目源码:

 <?php
    highlight_file(__FILE__);
    include "./flag.php";
    include "./result.php";
    if(isset($_GET['aaa']) && strlen($_GET['aaa']) < 20){

        $aaa = preg_replace('/^(.*)level(.*)$/', '${1}<!-- filtered -->${2}', $_GET['aaa']);

        if(preg_match('/pass_the_level_1#/', $aaa)){
            echo "here is level 2";
            
            if (isset($_POST['admin']) and isset($_POST['root_pwd'])) {
                if ($_POST['admin'] == $_POST['root_pwd'])
                    echo '<p>The level 2 can not pass!</p>';
            // START FORM PROCESSING    
                else if (sha1($_POST['admin']) === sha1($_POST['root_pwd'])){
                    echo "here is level 3,do you kown how to overcome it?";
                    if (isset($_POST['level_3'])) {
                        $level_3 = json_decode($_POST['level_3']);
                        
                        if ($level_3->result == $result) {
                            
                            echo "success:".$flag;
                        }
                        else {
                            echo "you never beat me!";
                        }
                    }
                    else{
                        echo "out";
                    }
                }
                else{
                    
                    die("no");
                }
            // perform validations on the form data
            }
            else{
                echo '<p>out!</p>';
            }

        }
        
        else{
            echo 'nonono!';
        }

        echo '<hr>';
    }

?> 

其实就三个点:

  1. 换行符绕过
  2. 数组绕过
  3. 弱类型比较

换行符绕过:%0a
看正则表达式:preg_replace('/^(.*)level(.*)$/', '${1}<!-- filtered -->${2}', $_GET['aaa']);,以^开头,&结尾,表示匹配一行,如果我们使用了换行符,就相当于1.png
实现绕过,然后我们输入?aaa=%0apass_the_level_1%23,绕过第一关,注意#要编码,在url中#有特殊意义,所以要进行编码

sha1数组绕过

2.png如果admin与root_pwd是一个数组,那么返回null

3.png
null==null,所以顺利通过第二关

弱类型比较:
据逺神说,true与任何字符串相比较都是true

4.png
这道题还有一点就是对json字符串的了解程度,json字符串长什么样子,它解码后长什么样子,并且解码后怎么访问它其中的元素。都要有一定的了解,特别要知道它解码后要怎么访问它的元素,这是这道题目结题的关键,我就是不知道json的访问格式,我还以为是什么原生类反序列化(因为我感觉result.php是什么又不知道,然后我还以为->是反序列里面的东西)…什么鬼啊

在这里插入图片描述最后我们传入level_3={“result”:true}即可

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值