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

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 06:20:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 06:20:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 06:20:03       58 阅读
  4. Python语言-面向对象

    2024-07-18 06:20:03       69 阅读

热门阅读

  1. Eureka: 分布式系统中的服务发现与注册中心

    2024-07-18 06:20:03       22 阅读
  2. 知识图谱数据模型

    2024-07-18 06:20:03       25 阅读
  3. 服务自旋:Eureka中实现服务的动态注册与注销

    2024-07-18 06:20:03       23 阅读
  4. kafka-client如何打印连接日志

    2024-07-18 06:20:03       26 阅读
  5. 构建Web应用的秘诀:Gradle中的Web应用插件配置

    2024-07-18 06:20:03       22 阅读
  6. php在服务器上部署可视化运维工具详细列表

    2024-07-18 06:20:03       21 阅读
  7. ubuntu 通讯学习笔记

    2024-07-18 06:20:03       15 阅读
  8. Python的安装方法

    2024-07-18 06:20:03       21 阅读
  9. cython加速python代码

    2024-07-18 06:20:03       19 阅读