解题思路

打开网页,发现是一个博客,基本寻找博客挂载信息,源码等无果后,扫描后台。发现.git泄露

.git泄露

发现.git泄露后,使用Git Extract这款工具,可自动将源码clone到本地

发现flag.php和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;

进行代码审计,共有三个结束条件,此时思路是构造其中一个结束条件,使其满足if中的内容。最后exit($flag),输出flag内容

第一个if

if($_GET['flag'] === $x && $x !== 'flag'){
exit($handsome);

判断get传过来键为flag的值是否等于flag,如果不等于,结束输出$handsome

第二个if

if(!isset($_GET['flag']) && !isset($_POST['flag'])){
exit($yds);
}

判断get和post都没有传输键为flag的内容,则结束输出$yds

第三个if

if($_POST['flag'] === 'flag'  || $_GET['flag'] === 'flag'){
exit($is);
}

判断get和post都传输了键值都为flag的内容,则结束输出$is

解题

选取一个结束条件,这里选第二个if。

结束的参数为yds,所以这里我们get传入yds的键,值为flag

那么经过foreach后,$yds=$flag。即打到变量覆盖,yds的值覆盖为flag的内容,获取flag

总结思路

核心思路:

  • 发现存在.git泄露
  • 发现存在经典的foreach 和 $$ 变量覆盖漏洞
  • 通过变量覆盖获取flag

知识点

  • .git泄露
  • 变量覆盖

刷题[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 ...

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

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

  3. [BJDCTF2020]Mark loves cat

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

  4. [BJDCTF2020]Mark loves cat-1|源代码泄露|变量覆盖

    主要考察了:源代码泄露.变量覆盖 共展示了三种获取flag的方式 1.打开题目查看未发现有效信息,查看源代码信息,发现返回的dog信息,结果如下: 2.使用dirmap进行目录扫描,发现了.git/c ...

  5. 【刷题记录】BZOJ-USACO

    接下来要滚去bzoj刷usaco的题目辣=v=在博客记录一下刷题情况,以及存一存代码咯.加油! 1.[bzoj1597][Usaco2008 Mar]土地购买 #include<cstdio&g ...

  6. NOIp2018停课刷题记录

    Preface 老叶说了高中停课但是初中不停的消息后我就为争取民主献出一份力量 其实就是和老师申请了下让我们HW的三个人听课结果真停了 那么还是珍惜这次机会好好提升下自己吧不然就\(AFO\)了 Li ...

  7. 好像leeceode题目我的博客太长了,需要重新建立一个. leecode刷题第二个

    376. Wiggle Subsequence               自己没想出来,看了别人的分析. 主要是要分析出升序降序只跟临近的2个决定.虽然直觉上不是这样. 455. 分发饼干     ...

  8. 刷题记录:[CISCN 2019 初赛]Love Math

    目录 刷题记录:[CISCN 2019 初赛]Love Math 思路一 思路二 总结 刷题记录:[CISCN 2019 初赛]Love Math 题目复现链接:https://buuoj.cn/ch ...

  9. 刷题记录:[De1ctf] shell shell shell

    目录 刷题记录:[De1ctf] shell shell shell 一.知识点 1.源码泄露 2.正则表达式不完善导致sql注入 3.soapclient反序列化->ssrf 4.扫描内网 5 ...

随机推荐

  1. ceph 开启mgr balancer

    参考链接: mgr balancer模式探索及配置方法1 mgr balancer模式探索及配置方法2 1.ceph mgr module enable balancer [root@controll ...

  2. rabbit rpm地址

    rabbitmq 官方源: https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/ erlang 清华源(包含erlang所有版本): https:/ ...

  3. Linux下启动、关闭SVN服务

    1.命令:ps -ef|grep svnserve,查看SVN是否允许,执行如下: 2.命令:svnserve -d -r /home/svn,启动SVN,/home/svn是SVN安装路径,执行如下 ...

  4. Clayff力场(转载)

    本文转载自:http://blog.sina.com.cn/s/blog_b48a7ac30102w4km.html 注意:lammps中并没有完整的clayff势函数,需要将一下三者结合使用. an ...

  5. 使用Seq搭建免费的日志服务

    Seq简介 Seq是老外开发的一个针对.NET平台非常友好的日志服务.支持容器部署,提供一个单用户免费的开发版本. 官网:https://datalust.co/seq 使用文档:https://do ...

  6. 微信支付宝个人免签约即时到帐接口开发附demo

    支付界面: 扫码支付界面: 付成功后可以跳转到你程序指定的地址! demo: http://likeyunba.com/WeChat-Pay/

  7. Selenium中核心属性以及方法

    一.操作定位元素 selenium提供了定位元素的API,这些方法都被定义在webDriver类中,需要以find开头, 例如:find_Element_by_id('')

  8. Vue.js 实战教程(附demo)

    在实战之前,你需要对vuejs的基础语法有一定的了解,可以通过以下几个途径进行学习: vue.js官方文档:https://cn.vuejs.org/v2/guide/index.html vue.j ...

  9. Kubernetes K8S之资源控制器Daemonset详解

    Kubernetes的资源控制器Daemonset详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2C/ ...

  10. 整理最全的Android开发工程师面试题,面试题详解。java、Android程序员

    1.    请描述下Activity的生命周期. 必调用的三个方法:onCreate()--> onStart() --> onResume(),用AAA表示 (1)父Activity启动 ...