返回
10
0

极客大挑战2023-web-easy_php

iiice,2026-04-19 01:05
Plaintext
<?php header('Content-type:text/html;charset=utf-8'); error_reporting(0); highlight_file(__FILE__); include_once('flag.php'); if(isset($_GET['syc'])&&preg_match('/^Welcome to GEEK 2023!$/i', $_GET['syc']) && $_GET['syc'] !== 'Welcome to GEEK 2023!') { if (intval($_GET['lover']) < 2023 && intval($_GET['lover'] + 1) > 2024) { if (isset($_POST['qw']) && $_POST['yxx']) { $array1 = (string)$_POST['qw']; $array2 = (string)$_POST['yxx']; if (sha1($array1) === sha1($array2)) { if (isset($_POST['SYC_GEEK.2023'])&&($_POST['SYC_GEEK.2023']="Happy to see you!")) { echo $flag; } else { echo "再绕最后一步吧"; } } else { echo "好哩,快拿到flag啦"; } } else { echo "这里绕不过去,QW可不答应了哈"; } } else { echo "嘿嘿嘿,你别急啊"; } }else { echo "不会吧不会吧,不会第一步就卡住了吧,yxx会瞧不起你的!"; } ?>

该题一个有4个条件,全部满足才可以拿到flag:

1.syc通过正则表达式要严格等于字符串,但是后面又不能等于这个字符串,所以再次思考preg_match中是不区分大小写的,但是后边的判断区分大小写,所以我们通过传入大写的字符串绕过这个条件。

2.lover要小于2023,又要加1后大于2024,这里用到了php语言字符转换时的特点,intval匹配该字符的整形,所以我们通过科学计数法来绕过,2e9在转换后因为是0e所以是0小于2023,但是在后面加1后会转换成2乘10的几次方自然会大于2024,绕过该条件。

3.qw和yss利用php数组的特性简单绕过。

4.SYC_GEEK.2023只要等于Happy to see you!就可以满足判断,但是直接传入的话会成为$_POST['SYC_GEEK_2023'],所以要利用[把前面的_变成让php可以识别的方式。

暂无回复。你的想法是什么?


bottom-logo1
bottom-logo2captionbottom-logo3
GeeSec
商务合作
bottom-logo4