2.php变量覆盖

1.题目
1
2
3
4
5
6
7
8
9
10
11
12
$flag='xxxxxxxx';
extract($_GET);
if(isset($liwu)) {
$content=trim(file_get_contents($flag));
if($liwu==$content) {
echo'flag{xxxxxxxxxxx}';
}
else {
echo 'please try other operation.';
}
}
?>
2.过程

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

$_GET 变量用于收集来自 method=”get” 的表单中的值,(array[键名] => 键值)。

但$flag显然是一串字符,不是正确的文件路径。处理结果似乎为空值;

查找知,trim(NULL)=空值;trim(空值)似乎也为空值:

image-20201126174749578

所以要求liwu等于空值,?liwu即可。

默认为空值

flag{s0metimes^its-useful};

3.知识点
  • extract():从数组中将变量导入到当前的符号表该函数使用数组键名作为变量名,使用数组键值作为变量值。会将已有变量覆盖;
  • isset()检测变量是否已设置并且非NULL;
  • file_get_contents:根据文件路劲去读取文件内容,若路径错误则返回值为空;
  • trim():移除字符串两侧的字符,
作者

inanb

发布于

2020-11-26

更新于

2021-08-23

许可协议


:D 一言句子获取中...