PHP代码审计

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

该函数使用数组键名作为变量名,使用数组键值作为变量值。但是当变量中有同名的元素时,该函数默认将原有的值给覆盖掉。这就造成了变量覆盖漏洞。

例:

<?php
$a = 1;    //原变量值为1
$b = array('a' => '3');
extract($b);    //经过extract()函数对$b处理后
echo $a;    //输出结果为3
?>

实战题

"extract($_GET);
if(isset($a))
{
$content=trim(file_get_contents($flag));//file_get_contents—将整个文件读入一个字符串
if($a==$content)                             //trim—去除字符串首尾处的空白字符(或者其他字符)
{ echo'flag{**********}'; }
else
{ echo'这不是flag啊'; }
}"

题目使用了extract($_GET)接收了GET请求中的数据,并将键名和键值转换为变量名和变量的值,然后再进行两个if 的条件判断,所以可以使用GET提交参数和值,利用extract()对变量进行覆盖,从而满足各个条件。

?a=&content=
或者可以利用file_get_contents()可以读取只读流:php://input构造Payload
上一篇:scrapy shell 使用案例


下一篇:PHP extract 函数的使用