CTF-Web习题:[BJDCTF2020]Mark Loves cat

题目链接:Mark Loves cat

解题思路

访问靶机网站后得到如下页面:
在这里插入图片描述
先浏览网页,发现最下面有一个"dog"字样,此时翻看源码并没有什么发现
在这里插入图片描述
那就例行进行目录扫描,源码泄露扫描,用dirsearch目录扫描工具扫描网页目录:python3 dirserach.py -u [url]

发现/.git 源码,考虑是,git源码泄露问题
在这里插入图片描述

在kali中利用githacker工具拉取.git源码到result文件夹中:githacker --url [url] --output-folder [文件夹名]
在这里插入图片描述

得到flag.php和index.php文件

打开index.php,发现导入了flag.php文件
在这里插入图片描述

打开flag.php,发现flag变量被函数赋值,证明这里的flag变量就是我们要找的flag,那就会想有没有办法获取到这个值
在这里插入图片描述

审阅index.php文件,其中if判断有点多,我们审阅关键字段,发现有echo $flag,尝试跨过i判断利用echo直接输出flag的值无果。

发现前面还有$$,是典型的变量覆盖漏洞,阅读源码可知,只要用get方法传入yds=flag,即可利用exit()函数覆盖yds变量输出flag。

在这里插入图片描述

知识补充

php语法:

  • 可变变量(可导致变量覆盖漏洞)
$cat = "miao";
$$cat = "hahaha";
echo $miao;//输出hahaha
  • $_GET:与$_POST类似,是php中的超全局变量,用于接收HTTP中GET方法传过来的参数数组
  • foreach
foreach($_GET as $x => $y){
	$$x = $$y;
}
//遍历HTTP的GET方法传过来的参数数组,key赋值给x,value赋值给y,大括号内是循环体
//例如传过来a=flag,则有$a = $flag,即将变量flag的值赋值给变量a
  • exit()函数
exit($a);//打印变量a的值,中断程序并退出
  • isset()函数
//用于检测变量是否被赋值且非null
$a = 1;
isset($a);//true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值