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

admin 2021年4月3日19:32:07评论20 views字数 1130阅读3分46秒阅读模式

0x01 引言

这是我在阅读80vul期刊中发表的[PCH-009]Security risk of php string offset一文后,根据自己的理解,对PHP offset这一特性,从实际角度出发,写出的分析。原文地址:http://www.80vul.com/webzine_0x06/PSTZine_0x06_0x03.txt

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中正常的“’”转义掉。

转自:http://forum.90sec.org/viewthread.php?tid=3482&extra=page%3D1%26amp%3Borderby%3Ddateline%26amp%3Bfilter%3D2592000

文章来源于lcx.cc:PHP代码审计小技巧,PHP字符串偏移特性的分析

相关推荐: [视频]中国包子演唱会

应该是国内最高水准了。文章来源于lcx.cc:[视频]中国包子演唱会相关推荐: 黑帽引擎对抗搜索引擎打造引擎级黑帽SEO大杀器前端设计篇黑帽引擎对抗搜索引擎打造引擎级黑帽SEO大杀器前端设计篇 混世魔王 (创新 黑产产业) | 2014-03-04 01:16…

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年4月3日19:32:07
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   PHP代码审计小技巧,PHP字符串偏移特性的分析http://cn-sec.com/archives/323275.html

发表评论

匿名网友 填写信息