加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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

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

杂谈

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

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

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



下面来看一段php代码

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

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

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

新浪公司 版权所有