解题思路

打开网页,发现是一个博客,基本寻找博客挂载信息,源码等无果后,扫描后台。发现.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. play ball小游戏-Alpha版本发布说明

    Alpha版本发布说明 一.功能介绍 本团队所做的微信小程序是一款小球经碰撞后最终到达目的位置通关的休闲益智类游戏.Alpha版本具有的功能大体如下: 1. 闯关模式 多达12关普通竖屏关卡.4关特殊 ...

  2. Java GUI 图书管理系统

    01 概述 一款功能强大的图书馆管理系统,功能齐全,小白/大学生项目实训,学习的不二之选. 02 技术 此系统使用 java awt 实现.java.awt是一个软件包,包含用于创建用户界面和绘制图形 ...

  3. RPC的实现的三种方式

    package com.bjsxt.service; import java.rmi.Remote; import java.rmi.RemoteException; /*** * 创建需要发布的服务 ...

  4. Javascript基本数据认识

    1.Js的组成 2.Js的三种引入 行内式 <input type="button" value="来嘛来嘛" onclick="alert(' ...

  5. 08.简单学习redis哨兵主备切换和选举算法

    一.选举的授权 每次一个哨兵要做主备切换,首先需要quorum数量的哨兵认为odown,然后选举出一个哨兵来做切换,这个哨兵还得得到majority哨兵的授权,才能正式执行切换 如果quorum &l ...

  6. 《spring源码解读》 - IoC 之解析 import 标签

    在上一文中我们分析了注册 BeanDefinition 的过程,在其中我们了解到在解析跟节点和子节点时分两种情况,对于默认名称空间的标签我们通过 DefaultBeanDefinitionDocume ...

  7. android 数据绑定(6)自定义绑定方法、双向数据绑定

    1.官方文档 https://developer.android.com/topic/libraries/data-binding/binding-adapters https://developer ...

  8. ract-native常用命令

    1.新建项目:react-native init AwesomeProject 2.运动项目 cd AwesomeProject react-native run-ios 3.添加第三方插件: yar ...

  9. Fitness - 05.11

    倒计时234天 从本周开始改变运动模式 跑步换到每周二.四.六进行. 每周一.三.五增加瑜伽的练习,周日山地车骑行~~~~ 久违的瑜伽课,瑜伽老师居然是男的,第一次看到这么柔软的男生~! 平时感觉不到 ...

  10. MyBatis开发重点知识

    1.1为什么需要ORM框架? 传统的JDBC编程存在的弊端: ü 工作量大,操作数据库至少要5步: ü 业务代码和技术代码耦合: ü 连接资源手动关闭,带来了隐患: MyBatis前身是iBatis, ...