[BJDCTF 2020]Mark loves cat

[BJDCTF 2020]Mark loves cat

git源码泄露

dirsearch发现/.git 目录,使用Githack下载源码:

<?php

include 'flag.php';

$yds = "dog";
$is = "cat";
$handsome = 'yds';

foreach($_POST as $x => $y){
    $$x = $y;
}

foreach($_GET as $x => $y){
    $$x = $$y;
}

foreach($_GET as $x => $y){
    if($_GET['flag'] === $x && $x !== 'flag'){
        exit($handsome);
    }
}

if(!isset($_GET['flag']) && !isset($_POST['flag'])){
    exit($yds);
}

if($_POST['flag'] === 'flag'  || $_GET['flag'] === 'flag'){
    exit($is);
}



echo "the flag is: ".$flag;

这里有变量覆盖的漏洞:

  • 先看第一个exit($handsome)
foreach($_GET as $x => $y){
    if($_GET['flag'] === $x && $x !== 'flag'){
        exit($handsome);
    }
}

如果 get型flag参数绝对等于变量名并且变量名等不等于flag则执行 exit($handsome),这里可以用?flag=aaa&aaa=123输出$handsome,但是这个写法会在前面进行变量覆盖的时候让$flag = $aaa进而报错(因为$aaa不存在),因此这里行不通。

  • 再看第二个exit($yds)
if(!isset($_GET['flag']) && !isset($_POST['flag'])){
    exit($yds);
}

如果GET和POST都没有传flag参数,则执行exit($yds)

这里可以传?yds=flag,经过变量覆盖之后就$yds = $flag,从而输出$flag的值。

  • 最后看第三个 exit($is)
if($_POST['flag'] === 'flag'  || $_GET['flag'] === 'flag'){
    exit($is);
}

如果GET或POST有一个或都传了flag参数而且参数值为flag,则执行exit($is)

这里我们可以让GET传$_GET[flag]=flag,则进入了条件语句里面,再传?is=flag,进行变量覆盖使$is = $flag,即可。

[BJDCTF2020]Mark loves cat (两种解法)(变量覆盖漏洞)

暂无评论

发送评论 编辑评论


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