[BJDCTF2020]Mark loves cat 1

本文介绍了如何通过扫描网站目录找到隐藏的.git文件,使用githack获取源码。在遇到无法直接获取PHP源码的情况下,通过初始化git并尝试不同参数来解决。同时,讲解了PHP中的变量覆盖技巧,包括GET和POST参数的利用,以达到特定条件输出目标变量的值。文章提供了具体的操作步骤和示例代码,帮助读者理解这一安全漏洞利用过程。
摘要由CSDN通过智能技术生成
知识点:.git   变量覆盖

扫描

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

拿源码

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

变量覆盖

可以在本地实验

<?php

$flag = 'buuctf';

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

foreach($_POST as $x => $y){
    $$x = $y;
    echo "POST:"."<br>";
    echo "\$x=".$x."<br>";
    echo "y=".$y."<br>";

}
echo "<br>";
foreach($_GET as $x => $y){
    $$x = $$y;
    echo "GET:"."<br>";
    echo "\$x=".$x."<br>";
    echo "\$y=".$y."<br>";
}
foreach($_GET as $x => $y){
    if($_GET['flag'] === $x && $x !== 'flag'){
        echo "handsome"."<br>";
        exit($handsome);
    }
}
echo "<br>";
if(!isset($_GET['flag']) && !isset($_POST['flag'])){
    echo "yds"."<br>";
    exit($yds);//yds=flag
}
if($_POST['flag'] === 'flag'  || $_GET['flag'] === 'flag'){
    echo "is"."<br>";
    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

在这里插入图片描述

00x1

(buuctf为本地设置的flag值)
在这里插入图片描述

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

?yds=flag

在这里插入图片描述

00x2

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

?is=flag&flag=flag

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值