暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

01 extract变量覆盖

digo8wx安全 2021-01-05
774


源码:

<?php

 

$flag='test';

extract($_GET);

if(isset($shiyan))

{

$content=trim(file_get_contents($flag));

if($shiyan==$content)

{

echo'ctf{test}';

}

else

{

echo'Oh.no';

}

}

 

?>

 

函数释义:

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

 

函数语法如下:

extract(array,extract_rules,prefix),其中array为必填字段,为规定要使用的一个数组,extract函数示例如下图所示:

代码分析:

  1. url 通过 get 的方式传参,传输的数据以数组的形式被封装在$_GET 中;

  2. extract()函数从数组中将变量导入到当前的符号表,该函数使用数组键名作为变量名,使用数组键值作为变量值;

  3. isset()函数判断是否存在变量$shiyan;

  4. trim()函数移除字符串两侧的空白字符或其他预定义字符     ,这里是移除字符串两侧的空格;

  5. file_get_contents()函数将整个文件读入一个字符串;假如$shiyan的值等于文件的内容$content时,就打印出flag。

解题过程:

extract()会将$shiyan和$flag值进行覆盖,将变量的值设置为空或者不存在的文件就满足$shiyan==$content,得到flag为“test”。

https://localhost:63342/test/1.php?shiyan=&flag=

参考链接:

https://github.com/bowu678/php_bugs

https://crayon-xin.github.io/2018/05/21/extract%E5%8F%98%E9%87%8F%E8%A6%86%E7%9B%96/


写在最后:

希望自己不要再拖延了,笔记整理之后及时发出来。。。。

文章转载自digo8wx安全,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论