extract()函数
extract() 函数从数组中将变量导入到当前的符号表。该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。该函数返回成功设置的变量数目。
实例
将键值 “Cat”、”Dog” 和 “Horse” 赋值给变量 $a
、$b
和 $c
:
1 |
|
运行结果为:
1 | $a = Cat; $b = Dog; $c = Horse |
更多extract函数细节请参考->链接
extract()变量覆盖1
题目源码:
1 |
|
URL 通过 get 的方式传参,传输的数据以数组的形式被封装在$_GET 中;extract()函数从数组中将变量导入到当前的符号表,该函数使用数组键名作为变量名,使用数组键值作为变量值;isset()函数判断是否存在变量$shiyan
;trim()函数移除字符串两侧的空白字符或其他预定义字符 ,这里是移除字符串两侧的空格;file_get_contents()函数将整个文件读入一个字符串;假如$shiyan
的值等于文件的内容($content
)时,就打印出flag
解题方法:
GET请求: ?flag=&gift=
extract()会将$flag
和$shiyan
的值覆盖了,将变量的值设置为空或者不存在的文件就满足$shiyan== $content
。
extract()变量覆盖2
题目源码:
1 | if ($_SERVER["REQUEST_METHOD"] == “POST”) { |
这次要使用POST的方法提交数据,extract($_POST)会将POST的数据中的键名和键值转换为相应的变量名和变量值,此时利用extract()函数覆盖$pass
和$thepassword_123
的值,使$pass == $thepassword_123
即可得到flag
所以只要以POST的方法提交pass=&thepassword_123=
即可。