加载中…
正文 字体大小:

PHP   extract()函数导致的变量覆盖漏洞

(2016-09-02 20:24:09)
标签:

杂谈

分类: 编程语言
首先介绍一下extract()函数的作用. 

extract() 函数从数组中将变量导入到当前的符号表。

该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。



下面来看一段php代码

PHP <wbr> <wbr> <wbr>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。
参数还有很多, 大家自己去发现吧~

0

阅读 评论 收藏 转载 喜欢 打印举报
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有