解题思路

打开网页,发现是一个博客,基本寻找博客挂载信息,源码等无果后,扫描后台。发现.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. python 判断文件和文件夹是否存在、创建文件夹

    原文链接:https://www.cnblogs.com/hushaojun/p/4533241.html >>> import os >>> os.path.ex ...

  2. springSecurity初识-练气初期

    1.写在前面 Spring Security是一个框架,提供针对常见攻击的身份验证,授权和保护.通过对命令式和反应式应用程序的一流支持,它是保护基于Spring的应用程序的事实标准. Spring S ...

  3. 技术揭秘:华为云DLI背后的核心计算引擎

    摘要:介绍隐藏在华为云数据湖探索服务背后的核心计算引擎Spark,玩转DLI,,轻松完成大数据的分析处理. 本文主要给大家介绍隐藏在华为云数据湖探索服务(后文简称DLI)背后的核心计算引擎——Spar ...

  4. Java通过反射加载的类,变量无法注入

    //之前都是直接newInstance的到obj,类中的变量无法被注入//Object obj = aClass.newInstance(); //改成如下方式的到bean,变量就能顺利被注入 ,其他 ...

  5. [易霖博YCTF]Web WriteUp

    中午队里师傅发到群里的比赛,借来队里师傅账号和队里其他师傅一起做了一下,ak了web,师傅们tql.学到挺多东西,总结一下. rce_nopar 进入题目给出源码: <?php if(isset ...

  6. Mybatis实例增删改查(二)

    创建实体类: package com.test.mybatis.bean; public class Employee { private Integer id; private String las ...

  7. 跟着尚硅谷系统学习Docker-【day04】

    day04-20200716   p18.docker容器数据卷   docker容器中的数据,做持久化. 容器关闭以后容器内的数据就没有了. 保存到数据库或者服务器宿主机里面.   作用:容器间可以 ...

  8. Zabbix 5.0切换中文语言小结

    最近测试Zabbix 5.0,去修改语言时发现不能选择"Chinese(zh_CN)",这个选项在下拉框中是灰色的(无法选择).提示"You are not able t ...

  9. Agumaster 增加雪球网爬虫

  10. Git——从安装到连接GitHub

    安装Git Windows平台上很轻松的,直接点击地址Git下载进行下载,之后基本就是下一步,安装成功. 在所需要操作的项目下右键,点击"Git Bash Here"弹出Git命令 ...