主要考察了:源代码泄露、变量覆盖

共展示了三种获取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|源代码泄露|变量覆盖的更多相关文章

  1. [BJDCTF2020]Mark loves cat && [BJDCTF 2nd]简单注入 && [BJDCTF2020]The mystery of ip

    [BJDCTF2020]Mark loves cat 源码泄露 使用GitHack.py下载源码 下载之后对源代码进行审计 flag.php代码为: <?php $flag = file_get ...

  2. 刷题[BJDCTF2020]Mark loves cat

    解题思路 打开网页,发现是一个博客,基本寻找博客挂载信息,源码等无果后,扫描后台.发现.git泄露 .git泄露 发现.git泄露后,使用Git Extract这款工具,可自动将源码clone到本地 ...

  3. [原题复现+审计][BJDCTF2020]Mark loves cat($$导致的变量覆盖问题)

    简介  原题复现:https://gitee.com/xiaohua1998/BJDCTF2020_January  考察知识点:$$导致的变量覆盖问题  线上平台:https://buuoj.cn( ...

  4. [BJDCTF2020]Mark loves cat

    0x00 知识点 GitHack读取源码 $$会导致变量覆盖漏洞 0x01解题 dirsearch扫描一下,发现/.git目录,用githack获取一下源码. <?php include 'fl ...

  5. SVN源代码泄露

    1. 联想b2b站SVN源代码泄露 开启Firefox,输入:b2b.thinkworldshop.com.cn/.svn/entries Webserver返回如下信息:

  6. SVN/GIT源代码泄露

    造成SVN源代码漏洞的主要原因是管理员操作不规范.在使用SVN管理本地代码过程中,会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息.但一些网站管理员在发布代码时,不愿意使用‘导出’功能 ...

  7. 【阿里聚安全·安全周刊】苹果证实 iOS 源代码泄露|英国黑客赢下官司

    本周的七个关键词:iOS 源代码泄露  丨 阿里软件供应链安全大赛  丨  个人数据安全  丨  Android P  丨  黑客赢下官司  丨  备忘录泄露美国安全局机密  丨  机器学习系统 -1 ...

  8. HackingTeam重磅炸弹: 估值超1000万美金带有军火交易性质的木马病毒以及远控源代码泄露

    [简单介绍] 经常使用网名: 猪头三 出生日期: 1981.XX.XX 个人站点: http://www.x86asm.com QQ交流: 643439947 编程生涯: 2001年~至今[共14年] ...

  9. PHP代码审计笔记--变量覆盖漏洞

    变量覆盖指的是用我们自定义的参数值替换程序原有的变量值,一般变量覆盖漏洞需要结合程序的其它功能来实现完整的攻击. 经常导致变量覆盖漏洞场景有:$$,extract()函数,parse_str()函数, ...

随机推荐

  1. 什么是HBase?终于有人讲明白了

    一.初识HBase HBase 是一个面向列式存储的分布式数据库,其设计思想来源于 Google 的 BigTable 论文.HBase 底层存储基于 HDFS 实现,集群的管理基于 ZooKeepe ...

  2. springboot引入mybatis遇到的坑

      前边分享了springboot项目的创建及springboot项目的默认配置文件等,想温习的小伙伴可移步至文章末尾阅读,感谢.今天来分享下springboot引入mybatis框架的步骤,有小伙伴 ...

  3. Amazon 消息订阅对接

    亚马逊的api 谁用谁知道...... 除了坑还是坑 头疼一周整出来,分享给铁汁们 amazon 的订阅思维,我只能说外国人脑回路有点长 下面就讲讲具体流程步骤: 第一步: 参照官方教程:设置通知(A ...

  4. Python参数传递中的 args, kwargs

    概念 真正的Python参数传递语法是*和**,其被称为 被称为打包和解包参数.*args和**kwargs只是大家默认的一种形式.也可以写成*keys和**kkeys等其他形式.二者都是为了在不知道 ...

  5. ABAP CDS - Annotations 注解

    Syntax ... annotation[.annotation1[.annotation2]][:value]  ... Effect Annotation that can be specifi ...

  6. 浪姐打分看不够?用几行Python代码模拟评委打分

    大家好鸭~我是小熊猫比赛大家都看过吧,每次是不是都对比赛成绩充满期待.特别是浪姐的打分看的简直欲罢不能- 今天就用Python来模拟评委打分,这个案例很短也很简单,很适合新手跟小白练习. 在某次十佳歌 ...

  7. 10分钟实现dotnet程序在linux下的自动部署

    背景 一直以来,程序署都是非常麻烦且无聊的事情,在公司一般都会有 devops 方案,整个 cicd 过程涉及的工具还是挺多的,搭建起来比较麻烦.那么对于一些自己的小型项目,又不想搭建一套这样的环境, ...

  8. 阿里云有奖体验:如何通过ECS挂载NAS文件系统

    实验简介 本实验提供CentOS系统ECS一台和NAS文件服务. NAS基于POSIX文件接口,天然适配原生操作系统,提供共享访问,同时保证数据一致性和锁互斥.它提供了简单的可扩展文件存储以供与ECS ...

  9. Issues in multiparty dialogues(科普性质)

    多人对话过程中存在的问题: 1)对于双方对话:存在明显的Speaker和Listener/addressee.但对于多人会话:就存在很多种情况.Clark[6]给出了对listener的分类

  10. 本地使用 Docker Compose 与 Nestjs 快速构建基于 Dapr 的 Redis 发布/订阅分布式应用

    Dapr(分布式应用程序运行时)介绍 Dapr 是一个可移植的.事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的.无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言 ...