当前位置:首页 >> 网络通讯 >> 网络安全 >> 内容

PHP代码审计小技巧,PHP字符串偏移特性的分析

时间:2013/4/19 12:09:00 作者:平凡之路 来源:xuhantao.com 浏览:

0x01 引言
 
这是我在阅读80vul期刊中发表的[PCH-009]Security risk of php string offset一文后,涛涛电脑知识网,根据自己的理解,对PHP offset这一特性,从实际角度出发,写出的分析。原文地址:
 
0x02 简述
 
PHP对于字符串数组中存在这样一个特性,当我们并未明确声明一个字符串变量是数组时,便直接给他赋值,例如:$test=’TPCS’。而在代码后面,我们想要把这个字符串变量当做字符串数组来使用时,例如:echo $test[‘hello’],我们会得到什么?我们来看下效果,如下图:
 
 
 




通过上图的实验,可以得知,当不存在相应的key时(hello),php会将这个字符串的偏移值为0的value(T)作为这个key的value。
 
0x03 利用
 
这个特性对我们的攻击有什么帮助呢?
 
现在的php服务,一般都是默认开启魔术引号,如果没有开启,在关键的参数部分,也会进行反斜杠处理。试想一下,www.xuhantao.com,如果某个可控变量通过数组传输。意淫太抽象了,我们还是具体一点,拿出个实例来说一下吧?。
 
假设一个源码中有如下代码:
 
 


 
sql变量是将要执行的sql语句,php默认开启魔术引号,我们来看下正常提交的效果
 
 


 
单引号被反斜杠过滤掉了,下面我们来试下另一种方式的提交,看看效果如何
 


 
 
test已经完全脱离了可恶的单引号限制,现在是天高任鸟飞,SQL任你插啦,嘿嘿。为什么会出现这种情况呢,我们来把一些关键的变量dump出来,看下这种状况是怎么造成的。
 
代码:
 
 




 执行



这两幅图,结合我们之前所说的PHP offset这一特性的话,就很好理解了吧。我们先给xigr[]=’,由于魔术引号的限制,导致xigr[]=\’,在xigr[][uid]进行传值时,由于PHP offset这一特性,导致“\”被传进了变量。这样一来,保护SQL语句不被注入的“\”便成为了我们的帮凶,帮助我们将SQL中正常的“’”转义掉。
 

相关文章
  • 没有相关文章
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
  • 徐汉涛(www.xuhantao.com) © 2024 版权所有 All Rights Reserved.
  • 部分内容来自网络,如有侵权请联系站长尽快处理 站长QQ:965898558(广告及站内业务受理) 网站备案号:蒙ICP备15000590号-1