来源:自学PHP网 时间:2015-04-17 11:59 作者: 阅读:次
[导读] 0x01 引言这是我在阅读80vul期刊中发表的[PCH-009]Security risk of php string offset一文后,根据自己的理解,对PHP offset这一特性,从实际角度出发,写出的分析。原文地址:http://www.2cto.com/Arti....
0x01 引言
这是我在阅读80vul期刊中发表的[PCH-009]Security risk of php string offset一文后,根据自己的理解,对PHP offset这一特性,从实际角度出发,写出的分析。原文地址:http://www.2cto.com/Article/201202/119105.html 0x02 简述 PHP对于字符串数组中存在这样一个特性,当我们并未明确声明一个字符串变量是数组时,便直接给他赋值,例如:$test=’TPCS’。而在代码后面,我们想要把这个字符串变量当做字符串数组来使用时,例如:echo $test[‘hello’],我们会得到什么?我们来看下效果,如下图: 通过上图的实验,可以得知,当不存在相应的key时(hello),php会将这个字符串的偏移值为0的value(T)作为这个key的value。 0x03 利用 这个特性对我们的攻击有什么帮助呢? 现在的php服务,一般都是默认开启魔术引号,如果没有开启,在关键的参数部分,也会进行反斜杠处理。试想一下,如果某个可控变量通过数组传输。意淫太抽象了,我们还是具体一点,拿出个实例来说一下吧?。 假设一个源码中有如下代码: sql变量是将要执行的sql语句,php默认开启魔术引号,我们来看下正常提交的效果 单引号被反斜杠过滤掉了,下面我们来试下另一种方式的提交,看看效果如何 test已经完全脱离了可恶的单引号限制,现在是天高任鸟飞,SQL任你插啦,嘿嘿。为什么会出现这种情况呢,我们来把一些关键的变量dump出来,看下这种状况是怎么造成的。 代码: 执行 这两幅图,结合我们之前所说的PHP offset这一特性的话,就很好理解了吧。我们先给xigr[]=’,由于魔术引号的限制,导致xigr[]=\’,在xigr[][uid]进行传值时,由于PHP offset这一特性,导致“\”被传进了变量。这样一来,保护SQL语句不被注入的“\”便成为了我们的帮凶,帮助我们将SQL中正常的“’”转义掉。 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com