[BJDCTF2020]Mark loves cat

非常好看的前端。可以从链接中看到有get传参message,但是尝试了几个值页面并没有变化。另外还注意到当前文件是index.html,而不是php文件。抓包看一下请求格式,没有发现。突然看到响应最后有个dog,题目叫做Mark loves cat,难道说需要让回显是cat?

目录扫描一下试试,没有发现。没思路了,直接看答案...

啥玩意?存在git泄露,我这dirsearch恐怕是假的,看来以后还是得用kali里面的。

使用scrabble获取泄露的文件,直接得到index.php。

git泄露知识见git泄露(一篇文章就够了)-CSDN博客

php 复制代码
<?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;

$$x表示什么?下面这些代码是什么意思?

foreach(_POST as x => $y){

x = $y;

}

foreach(_GET as x => $y){

x = y;

}

$$x表示以x为变量名的变量,即一个可变变量。数组中x => $y表示键和值,因此第一部分代码的意思是根据POST的数组,将每一个键设置成一个变量,变量值设置为键值,

假如POST: flag = a , 则$flag = 'a'

第二部分代码的意思是设置两个可变变量,分别以GET数组中的键和值为变量名,

假如GET: flag = a , 则flag = a

foreach(_GET as x => $y){

if(_GET\['flag'\] === x && $x !== 'flag'){

exit($handsome);

}

}

假如_GET\['a'\]='b',由于'a' !== 'flag',那么_GET'flag'不能等于'a'
if(!isset(_GET\['flag'\]) \&\& !isset(_POST'flag')){

exit($yds);

}

if(_POST\['flag'\] === 'flag' \|\| _GET'flag' === 'flag'){

exit($is);

}

必须通过GET或POST传参flag,且值不能等于flag

但是怎么读取flag呢?可以看到代码中include 'flag.php'但是怎么读取该文件?利用echo "the flag is: ".flag;吗?这个语句会解析flag变量,难道flag.php中是有$flag的?这样的话我们必须保证不能在创建变量的时候丢失该变量值。

POST方式肯定不行,用GET方式尝试:

假如GET:?a=flag&flag=a

就会先创建变量a = flag,然后flag = a,好像是可以的。试试看,输出yds,失败了。哦对,是因为_GET\['flag'\]==='a'\&\&'a'!=='flag',说明不能通过这样传递的方式获得flag。那可不可以用 **?flag=flag** 呢,输出cat,失败了。哦对,是因为_GET'flag' === 'flag'。好两个炸弹全踩过了,再来一种方法就解决了。但是除了直接赋值和传递赋值没有什么其他办法了...欸不对,这边用的是强比较,?a=flag&flag=a中把a换成是其他类型数据可以吗?尝试一下数字 ?0=flag&flag=0

成功啦!!!!!

总结一下:以后目录扫描得直接用kali里面的dirsearch,虽然速度慢点但是不会出错。另外就是很多题中找不到线索的题目都有源码泄露,因此熟练掌握源码泄露知识很重要。还有就是弱比较可以绕过,同样强比较也能绕过!因此下次看见强比较就要想到利用不同类型数据绕过。

相关推荐
曲幽5 天前
你的REST接口还在“过度投喂”数据吗?——FastAPI + GraphQL实战避坑指南
python·fastapi·web·graphql·route·cors·rest·strawberry
带刺的坐椅7 天前
Spring Boot → Solon 注解迁移实战指南:一张对照表说清楚
java·springboot·web·solon
曲幽11 天前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict
曲幽12 天前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
llz_11217 天前
web-第四次课后作业
前端·spring boot·web
天山@12319 天前
电商系统Web渗透测试实战学习笔记
web·电商系统
xcLeigh19 天前
鸿蒙平台 KeePass 密码管理器适配实战:从 Windows 到 鸿蒙PC 的 Electron 迁移指南
windows·electron·web·harmonyos·加密算法·keepass
一拳一个娘娘腔20 天前
【第五期】漏洞攻防-逻辑篇:越权与支付漏洞 —— 为什么改个参数就能“0元购”?
安全·web安全·web
持敬chijing20 天前
Web渗透之前后端漏洞-文件下载漏洞
sql·web安全·网络安全·网络攻击模型·web
飞天狗11121 天前
零基础JavaWeb入门——第2课:让网页“活”起来 —— JSP是什么?
java·开发语言·前端·后端·web