PHP中的变量覆盖漏洞-------以后有什么新知识就往这里面补充了

参考自:https://www.cnblogs.com/xhds/p/12587249.html#_label1

讲真,本来不想总结来着。以为自己对变量覆盖已经掌握了,,我靠结果第一个例题,就给我试了几分钟。这不对劲啊,
还是整理下来吧,加深加深印象

1.extract()变量覆盖

extract()函数,从数组中将变量导入当前的符号表。
该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在 当前符号表中创建对应得一个变量。

注意点:

  1. 你传入 ?name=adam 之后,在PHP中是 $name=adam 。这个看似easy。但是我刚刚就是犯了这个错误,没有弄细致。前面有 $ ,后面没有 $
  2. 上面一点也就解释了很多情况下我们传入session变量的时候是 _SESSION[name]=admin
  3. 一个新思路,可以使它判定的两个都为空,也就相等,就对了

例题来一个

<?php //本地复现的话,就在同文件夹下,建一个 flag.php 就好。
$flag='flag.php';
extract($_GET);  
if(isset($ceshi)){
    
    
    $content=trim(file_get_contents($flag));//trim是去掉两侧的空白字符
    if($ceshi==$content){
    
    
        echo'flag{xxxxxxx}';
    }
else{
    
    
     echo'Oh.no';
}
}
?>

假如我们传入 ?ceshi=$content ,,PHP中是 $ceshi=$content ,符合要求,应该echo一下,但是。。。*了。我也这么做的啊,我也觉得这样做对啊,但是就是不对啊,,,算了看人家怎么写的吧,,,≡(▔﹏▔)≡。。

博客给的payload竟然是 这个 ?ceshi=&flag=
这样再程序中会有两个为空的变量而$flag=空 则覆盖了上面的$flag中的值 这样进行判断 都是空的所以为真则得到flag…。。。
也是啊,他没有包含 require flag.php 。这个flag=flag.php是假的,,,也就echo
在这里插入图片描述

好吧,,也不失为一个 不错的思路啊。让两个都为空,就可以相等了,

2.PHP动态变量覆盖

例题:BUUCTF:[BJDCTF2020]Mark loves cat (两种解法)(变量覆盖漏洞)

3.parse_str()变量覆盖

在这里插入图片描述
在这里插入图片描述抖一个机灵。猜测可能会在上传session数组中用到,正常会把get传参中的键名为session给过滤地死死地,人后让我们用这个 parse_str()。来进行session数组里面的变量覆盖,
在这里插入图片描述
正常传入的话,和get地传入一样的, 前面有$,后面没有$

<?php
parse_str("name=xiaohua&age=22");
echo $name."<br>";
echo $age;
?>
//xiaohua
//22

例题来一个

<?php
error_reporting(0);
require "flag.php";
if (empty($_GET['id'])) {
    
    
   show_source(__FILE__);
   die();
} else {
    
    
    $a = "www.xiaohua.com";
    $id = $_GET['id'];
    @parse_str($id);  //
 if ($a[0] != 'QNKCDZO' && md5($a[0]) == md5('QNKCDZO')) {
    
    //这个就是那个0e地md5么
       echo $flag;
  } else {
    
    
      exit("no no");
  }
}
highlight_file(__FILE__);
?>
?>

我想地使md5碰撞,

?id[]={
    
    "a":"s878926199a"}这样传参,但是不对,,

我又一次犯了以前的错误了,传入字符串和数组弄混了,,

博客给的payload

?id=a[0]=s878926199a 

在这里插入图片描述

它这样传入id。代码里面是比较a[0]嘛,那就直接传入a[0]呀。这样传入,直接a[0]等于后面的字符串 。
再回头看,他的if判定只和 a[0]还有a[0]的md5有关系,和id没有关系啊,,,

这个的传参有点说法,可以看看

特殊的变量覆盖,一定要看!!!

在这里插入图片描述

好吧,不对的,后面的 a[0]=bbbb也是和prase_str有关系的。因为我去掉prase_str之后,就不行了,,
网上没有讲这个的,就记住把, parse_str特有的东西,也能够把后面的东西给变量覆盖了,

那么那么多了会怎么样呢??

会这样!

在这里插入图片描述
我真不知道数量多了能怎么样。刚刚尝试过了,和这个一样只有前两个能够变量覆盖,其他后面的不行,可以看看文章。里面有实验

嗯对头。

4和5水得很,可以不看

4.import_request_variables()变量覆盖

在这里插入图片描述

在这里插入图片描述
好家伙,这个更加直接,粗暴,,

5.PHP全局变量覆盖

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Zero_Adam/article/details/113837771