[BJDCTF2020]Mark loves cat-1|源代码泄露|变量覆盖
主要考察了:源代码泄露、变量覆盖
共展示了三种获取flag的方式
1、打开题目查看未发现有效信息,查看源代码信息,发现返回的dog信息,结果如下:


2、使用dirmap进行目录扫描,发现了.git/config,那就想到了源代码泄露的问题,使用githack工具获取源代码信息,但是只获取到了一些js文件和图片,未获取到源代码信息,结果如下:


3、可以看到可以是存在flag.php、index.php文件的,但是githack并未获取到,因此在网上查找了下相关的源码信息,结果如下:
index.php
<?php
$flag = file_get_contents('/flag');
?>
index.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;
4、对源代码进行审计分析,定义了三个变量并对三个变量进行了输出,但是我们想要的是输出flag的值,这里就想到了变量覆盖的问题,源代码中存在多个变量输出的地方,应该是都可以覆盖成flag进行输出,那就从第一个开始进行分析,代码如下:
foreach($_GET as $x => $y){
if($_GET['flag'] === $x && $x !== 'flag'){ //传入的变量为flag value不是flag
exit($handsome);
}
}
我们想要输出flag值就需要$handsome=$flag,这样exit($handsome)才能输出exit($flag),这个条件又要求get方式传递flag值($y)需要能等于传递的参数$X并且不等于flag(这里可以确定一定不是一个参数但是可以确定一个参数是flag),加上$handsome=$flag,所以猜测$x=$handsome(那这里就确定了另外一个参数和flag参数的值),在考虑到刚刚说的:$handsome=$flag,所以这里也确定了handsome参数的值,所以最终的payload应该是:?handsome=flag&flag=handsome。
5、输出payload查看返回信息的源代码发下flag值,结果如下:

6、那分析第二个输出的变量,代码如下:
if(!isset($_GET['flag']) && !isset($_POST['flag'])){
exit($yds);
}
这里要求不存在flag参数,就绕过了上面第一个输出,并且最终输出的是$yds,那我们就需要使$yds=$flag,这里传递参数后会执行下面的代码:
foreach($_GET as $x => $y){
$$x = $$y; //GET型变量重新赋值为当前文件变量中以其值为键名的值
}
查看这个代码,我们最终需要的这个代码形成$yds=$flag,那就是$x=yds,$y=flag,因此这里的fpayload:?yds=flag。
7、输入payload查看返回信息的源代码发下flag值,结果如下:

8、那分析第三个输出的变量,代码如下:
if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){
exit($is);
}
这里传递方式有两种get和post,不同的传参方式可能不太一样,这里就以get方式来说,这里要求我们传递flag参数并且其值也为flag,最终输出的exit($is)我们想要exit($flag),那就需要$is=$flag,这里仍会执行下面这个函数:
foreach($_GET as $x => $y){
$$x = $$y; //GET型变量重新赋值为当前文件变量中以其值为键名的值
}
所以我们就需要传递两个参数:一个flag=flag,一个is=flag,所以payload:is=flag&flag=flag。
9、输入payload查看返回信息的源代码发下flag值,结果如下:

[BJDCTF2020]Mark loves cat-1|源代码泄露|变量覆盖的更多相关文章
- [BJDCTF2020]Mark loves cat && [BJDCTF 2nd]简单注入 && [BJDCTF2020]The mystery of ip
[BJDCTF2020]Mark loves cat 源码泄露 使用GitHack.py下载源码 下载之后对源代码进行审计 flag.php代码为: <?php $flag = file_get ...
- 刷题[BJDCTF2020]Mark loves cat
解题思路 打开网页,发现是一个博客,基本寻找博客挂载信息,源码等无果后,扫描后台.发现.git泄露 .git泄露 发现.git泄露后,使用Git Extract这款工具,可自动将源码clone到本地 ...
- [原题复现+审计][BJDCTF2020]Mark loves cat($$导致的变量覆盖问题)
简介 原题复现:https://gitee.com/xiaohua1998/BJDCTF2020_January 考察知识点:$$导致的变量覆盖问题 线上平台:https://buuoj.cn( ...
- [BJDCTF2020]Mark loves cat
0x00 知识点 GitHack读取源码 $$会导致变量覆盖漏洞 0x01解题 dirsearch扫描一下,发现/.git目录,用githack获取一下源码. <?php include 'fl ...
- SVN源代码泄露
1. 联想b2b站SVN源代码泄露 开启Firefox,输入:b2b.thinkworldshop.com.cn/.svn/entries Webserver返回如下信息:
- SVN/GIT源代码泄露
造成SVN源代码漏洞的主要原因是管理员操作不规范.在使用SVN管理本地代码过程中,会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息.但一些网站管理员在发布代码时,不愿意使用‘导出’功能 ...
- 【阿里聚安全·安全周刊】苹果证实 iOS 源代码泄露|英国黑客赢下官司
本周的七个关键词:iOS 源代码泄露 丨 阿里软件供应链安全大赛 丨 个人数据安全 丨 Android P 丨 黑客赢下官司 丨 备忘录泄露美国安全局机密 丨 机器学习系统 -1 ...
- HackingTeam重磅炸弹: 估值超1000万美金带有军火交易性质的木马病毒以及远控源代码泄露
[简单介绍] 经常使用网名: 猪头三 出生日期: 1981.XX.XX 个人站点: http://www.x86asm.com QQ交流: 643439947 编程生涯: 2001年~至今[共14年] ...
- PHP代码审计笔记--变量覆盖漏洞
变量覆盖指的是用我们自定义的参数值替换程序原有的变量值,一般变量覆盖漏洞需要结合程序的其它功能来实现完整的攻击. 经常导致变量覆盖漏洞场景有:$$,extract()函数,parse_str()函数, ...
随机推荐
- Java包机制和JavaDoc
目录 包机制 JavaDoc 视频课程 包机制 包的本质就是文件夹 为了更好的组织类, Java提供了包机制, 用于区别类名的命名空间, 使项目看起来更加整洁 一般公司庸域名倒置作为包名 为了能够使用 ...
- Hive参数与性能企业级调优
Hive作为大数据平台举足轻重的框架,以其稳定性和简单易用性也成为当前构建企业级数据仓库时使用最多的框架之一. 但是如果我们只局限于会使用Hive,而不考虑性能问题,就难搭建出一个完美的数仓,所以Hi ...
- STM32时钟系统配置程序源码深入分析
一.分析程序的目的 最近我在移植实时系统是遇到了一些问题,所以决定深入了解系统时钟的配置过程,当然想要学好stm32的小伙伴也有必要学习好时钟系统的配置,所以我将学习的过程再次记录,有写得不好的地方, ...
- 【抬杠.NET】如何进行IL代码的开发(续)
背景 之前写了一篇文 [抬杠.NET]如何进行IL代码的开发 介绍了几种IL代码的开发方式. 创建IL项目 C#项目混合编译IL 使用InlineIL.Fody 使用DynamicMethod(ILG ...
- 定制.NET 6.0的依赖注入
大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进. 在本章中,我们将学习ASP.NET Core的依赖项注入(DI)以及如何自定义它. ...
- 技术分享 | 一步一步学测试平台开发-Vue restful请求
本文节选自霍格沃兹测试学院内部教材 一般在构建应用时需要访问后端的 API 接口获取后端数据并展示.做这件事的方法有很多种(比如 axios,vue-resource,fetch-jsonp),使用 ...
- 基于MybatisPlus代码生成器(2.0新版本)
一.模块简介 1.功能亮点 实时读取库表结构元数据信息,比如表名.字段名.字段类型.注释等,选中修改后的表,点击一键生成,代码成即可提现出表结构的变化. 单表快速转化restful风格的API接口并对 ...
- php 二维数组转换一维数组
$result = array_reduce($res, function ($result, $value) { return array_merge($result, array_values($ ...
- 使用cmd命令行执行MySQL数据库
说明 用命令提示符来操作一些简单的数据库,便捷又快速,随便记录一下,以后没事就自己来看看! 哈哈哈! 打开/关闭mysql服务 net start mysql net stop mysql 连接mys ...
- vue按需引入第三方ui插件优化
components.js import { fullScreenContainer, borderBox12, scrollBoard, loading, borderBox10, borderBo ...