目录:
参考自:https://www.cnblogs.com/xhds/p/12587249.html#_label1
讲真,本来不想总结来着。以为自己对变量覆盖已经掌握了,,我靠结果第一个例题,就给我试了几分钟。这不对劲啊,
还是整理下来吧,加深加深印象
1.extract()变量覆盖
extract()函数,从数组中将变量导入当前的符号表。
该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在 当前符号表中创建对应得一个变量。
注意点:
- 你传入 ?name=adam 之后,在PHP中是 $name=adam 。这个看似easy。但是我刚刚就是犯了这个错误,没有弄细致。前面有 $ ,后面没有 $ 。
- 上面一点也就解释了很多情况下我们传入session变量的时候是 _SESSION[name]=admin 。
- 一个新思路,可以使它判定的两个都为空,也就相等,就对了
例题来一个
<?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()变量覆盖
好家伙,这个更加直接,粗暴,,