PHP extract()函数导致的变量覆盖漏洞
标签:
杂谈 |
分类: 编程语言 |
首先介绍一下extract()函数的作用.
extract() 函数从数组中将变量导入到当前的符号表。
该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。
http://s16/mw690/006p45s2zy74xoZOclFef&690 extract()函数导致的变量覆盖漏洞" TITLE="PHP extract()函数导致的变量覆盖漏洞" />
在第三行, 运用了extract()函数,
将GET方式获得的变量导入到当前的符号表中.
然后判断$attempt与$combination两个变量的内容是否相等.
$combination变量储存的是test.txt的内容. 但是我们并不能查看test.txt,
所以并不知道该怎么去设置$attempt的值.
但是, 由于extract()函数的不足之处,
导致这段代码存在一个变量覆盖漏洞.
只要我们这样构造url
/?attempt=&filename=
那么, 我们可以发现,
$attempt变量和$combination变量的内容都会被设置成空字符串.
这样, Line 6 的判断就成立了,
我们就能成功地拿到password.txt的内容.
那么在使用函数extract()的时候, 如何防止这种漏洞呢
可以在使用的时候加上参数EXTR_SKIP
这个参数表示如果有冲突,不覆盖已有的变量
或者还有EXTR_PREFIX_SAME - 如果有冲突,在变量名前加上前缀 prefix。
参数还有很多, 大家自己去发现吧~
前一篇:C 代码共享
后一篇:HTML 工具jekyll的使用

加载中…