关于METINFO5.3漏洞引发的变量覆盖漏洞

一.$$引起的变量覆盖漏洞,

1、Include 调用了flag.php文件(调用文件还可以有require_once()或者require());
2、$_200,$_403 定义两个参数,以及参数值。
3、判断访问页面的方法是否为post方法和有没有参数flag。
4、再接着两个foreach函数遍历数组函数,然后再将获取到的数组键名作为变量,数组中的键值作为变量的值。
5、还有一个if判断语句,判断用post方法传输的数据是不是和$flag的值相同,如果相同,输出flag。
6、最后输出$_200的内容。

我们可以看到第一个foreach遍历中,

foreach ($_GET as $key => $value)
$$key = $$value

这里出现了$$key = $$value,传入的键值$会当做变量,例如,我们传入_200=flag,经过处理后变成$_200=$flag,则$_200的值被覆盖为$flag的值。

第二个foreach遍历,

foreach ($_POST as $key => $value)
    $$key = $value;

出现了$$key = $value;如post方法传入flag=abc,则处理后变成$flag=abc。这样就造成将我们需要获取的flag的值给覆盖掉了。

所以如果在CTF中获得flag,我们需要先将$flag的值覆盖$_200或$_403的值,然后输出$_200或$_403。

二,Extract()函数引起的变量覆盖漏洞

该函数使用键名当做变量名,键值当做变量值,如果有相同的变量名,则默认覆盖原有的变量值。

1、文件将get方法传输进来的值通过extrace()函数处理。
2、通过两个if语句分别判断是否存在gift变量,和变量gift的值和变量content的值是否相等。变量content的值是通过读取变量test的值获取到的。如果两个变量相等输出flag。如果不相等,输出错误。

$GET[‘test’]=’a’,处理后$test=a,覆盖了原来的空,即$test="",此时只需$gift=a,可以实现$gift=$content;成功拿到flag。

三,Parse_str()函数引起的变量覆盖漏洞

parse_str() 函数用于把查询字符串解析到变量中,如果没有array 参数,则由该函数设置的变量将覆盖已存在的同名变量。 极度不建议 在没有 array参数的情况下使用此函数,并且在 PHP 7.2 中将废弃不设置参数的行为。此函数没有返回值
<?php

       error_reporting(0);

       if (empty($_GET[‘id‘]))
      {
            show_source(__FILE__);
            die();
      }
      else
     {
            include (‘flag.php’);
            $a = “www.OPENCTF.com
            $id = $_GET[‘id‘];
            @parse_str($id);
            if ($a[0] != ‘QNKCDZO’ && md5($a[0]) == md5(‘QNKCDZO’))
           {
                 echo $flag;
           }
           else
           {
                 exit(‘其实很简单其实并不难!’);
           }

       }

?>
 

[email protected]_str($id)把查询字符串解析到变量中,没有使用array选项,若有同名变量,将原来的覆盖。我们可以用?id=a[0]将原来的$a的值给覆盖掉。

2.$a[0] != ‘QNKCDZO‘ && md5($a[0]) == md5(‘QNKCDZO‘)判断$a[0]的值不是QNKCDZO并且$a[0]的MD5值要和QNKCDZO的MD5值相同。

因为主要介绍变量覆盖,所以接下来的解题方法就不说了。核心思路就是用?id=a[0]=********覆盖$a的值满足后续要求。

学习自:https://www.cnblogs.com/bmjoker/p/9025351.html

原文地址:https://www.cnblogs.com/danku/p/10817346.html

时间: 2024-07-29 23:19:16

关于METINFO5.3漏洞引发的变量覆盖漏洞的相关文章

【代码审计】变量覆盖漏洞详解

一.漏洞介绍 变量覆盖指的是用我们自定义的参数值替换程序原有的变量值,一般变量覆盖漏洞需要结合程序的其它功能来实现完整的攻击 二.漏洞函数 变量覆盖漏洞大多数由函数使用不当导致,经常引发变量覆盖漏洞的函数有:extract(),parse_str()和import_request_variables() 1.extract() 目前最常见的就是这个函数,使用频率最高,导致的漏洞也最多  extract(array,extract_rules,prefix)  参数 描述 array 必需.规定要

php之变量覆盖漏洞讲解

1.变量没有初始化的问题(1): wooyun连接1:[link href="WooYun: PHPCMS V9 member表内容随意修改漏洞"]tenzy[/link] $updateinfo['password'] = $newpassword;里面的数组没有初始化类似这样的赋值,我们在挖洞的时候搜索类似updateinfo这样的关键字看看 是否初始化,如果没有...且register_global=On支持 可以提交 updateinfo[amount]这样的数组随意修改自己的

变量 覆盖漏洞----$$

变量覆盖漏洞经常引发变量覆盖漏洞的函数有:extract(),parsestr()和importrequestvariables()和$$(可变变量) $$可变变量引起的变量覆盖漏洞一.我们先来查看源代码进行分析1.Include 调用了flag.php文件2.$_200,$403 定义两个参数,以及参数值.3.接着是两个判断语句,判断访问页面的方法是否为post方法和有没有参数flag.4.再接着两个foreach函数遍历数组函数,这里就是把我们用get方法传输的数据当做数组进行遍历,并将遍历

7. 由一道ctf学习变量覆盖漏洞

0×00 背景 近期在研究学习变量覆盖漏洞的问题,于是就把之前学习的和近期看到的CTF题目中有关变量覆盖的题目结合下进一步研究. 通常将可以用自定义的参数值替换原有变量值的情况称为变量覆盖漏洞.经常导致变量覆盖漏洞场景有:$$使用不当,extract()函数使用不当,parse_str()函数使用不当,import_request_variables()使用不当,开启了全局变量注册等. 本篇收集了几个CTF中的题目作为例子,对$$,extract(),parse_str()的问题进行总结. 0×

变量覆盖漏洞----extract()函数

Extract()函数引起的变量覆盖漏洞 该函数使用数组键名作为变量名,使用数组键值作为变量值.但是当变量中有同名的元素时,该函数默认将原有的值给覆盖掉.这就造成了变量覆盖漏洞. 一.我们来查看一串代码:1.文件将get方法传输进来的值通过extrace()函数处理.2.通过两个if语句分别判断是否存在gift变量,和变量gift的值和变量content的值是否相等.变量content的值是通过读取变量test的值获取到的.如果两个变量相等输出flag.如果不相等,输出错误. 二.但是我们并不知

变量覆盖漏洞学习及在webshell中的运用

一.发生条件: 函数使用不当($$.extract().parse_str().import_request_variables()等) 开启全局变量 二.基础了解: 1.$$定义 $$代表可变变量,就是说,一个变量的变量名可以动态的设置和使用. 举个简单例子: 变量a被定义成了字符串hello 而变量$a被定于成了字符串world! 但同时$a本身也是个变量 $$a就可以代表两个含义$($a)和$(hello) 两个变量 此时输出的结果如图: 2.extract()定义 extract()可以

齐博CMS变量覆盖漏洞exp

 漏洞的具体分析在 http://security.alibaba.com/blog/blog.htm?spm=0.0.0.0.AooULy&id=13,下面公布一下我写的漏洞利用以及exp. 利用步骤如下: (1)首先访问/member下面的"评论管理"功能,抓包 (2)在http request中构造一个attachment,如下: POST /qibo/member/comment.php?job=yz&yz=0 HTTP/1.1 Host: 127.0.0.

CTF-代码审计(1)——parse_str()变量覆盖

题目连接:http://222.18.158.226:7000/iscc.php 考点:parse_str()变量覆盖 代码: PHP知识点: 1.parse_url() 参照网址:https://www.php.net/manual/zh/function.parse-url.php 2.$_SERVER[] 参考网址:https://php.net/manual/zh/reserved.variables.server.php 3.parse_str() 参考网址:http://www.w3

php代码审计之变量覆盖

变量覆盖一般由这四个函数引起 <?php $b=3; $a = array('b' => '1' ); extract($a,EXTR_OVERWRITE); print_r($b); //extract 有三种形式可能导致变量覆盖,第一种是第二个参数为EXTR_OVERWRITE,他表示如果有冲突,覆盖原有的变量.第二种情况是只传入第一个参数,默认为EXTR_OVERWRITE模式,第三种是第二个参数为EXTR_IF_EXISTS,他表示在当前符号表中已有同名变量时,覆盖它们的值,其他的都不