[BJDCTF2020]Mark loves cat 1

知识点:.git   变量覆盖

目录

  • 扫描
  • 拿源码
  • 变量覆盖
    • 00x0
    • 00x1
    • 00x2

扫描

用御剑或dirsearch扫可以扫到.git/

拿源码

用githack拿源码。
用的时候可能会遇到扫到php文件,但拿不到php源码的情况,这时可以用git init初始化一下,然后不停的试,总有一次会拿到。
我称之为看脸,如果还有其他方法,望各位大佬告之。

变量覆盖

可以在本地实验



$flag = 'buuctf';

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

foreach($_POST as $x => $y){
    $$x = $y;
    echo "POST:"."
"
; echo "\$x=".$x."
"
; echo "y=".$y."
"
; } echo "
"
; foreach($_GET as $x => $y){ $$x = $$y; echo "GET:"."
"
; echo "\$x=".$x."
"
; echo "\$y=".$y."
"
; } foreach($_GET as $x => $y){ if($_GET['flag'] === $x && $x !== 'flag'){ echo "handsome"."
"
; exit($handsome); } } echo "
"
; if(!isset($_GET['flag']) && !isset($_POST['flag'])){ echo "yds"."
"
; exit($yds);//yds=flag } if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){ echo "is"."
"
; exit($is); } echo "the flag is: ".$flag; ?>

00x0

这个判断是要get中键值为flag的值强等于$x,且$x要不等于flag,有一点可以确定,就是要在这边输出flag,必须要传handsome=flag,这样传进去后变为$handsome=$flag,然后此时:
$_GET[‘flag’] === handsome && handsome !== ‘flag’
其中后面的条件达成,在传一个flag=handsome就行了。

?handsome=flag&flag=handsome

[BJDCTF2020]Mark loves cat 1_第1张图片

00x1

(buuctf为本地设置的flag值)
[BJDCTF2020]Mark loves cat 1_第2张图片

当get中flag和post中的flag都不存在,则输出$yds,我们可以传个get为yds=flag,经过变量覆盖则会变为$yds=$flag

?yds=flag

在这里插入图片描述

00x2

这边要post中flag值强等于flag,或者get中flag值强等于flag。
在这里插入图片描述
post中的flag不能变,因为一动就变为$flag=flag,flag值都被我们搞没了。
[BJDCTF2020]Mark loves cat 1_第3张图片
而get可以搞,传入flag=flag,会变为$flag=$flag,这样if条件就达成了,最后只要把$is=$flag就行了。

?is=flag&flag=flag

[BJDCTF2020]Mark loves cat 1_第4张图片

你可能感兴趣的:(BUUCTF,php,安全)