正在阅读:

PHP特性引发安全隐患

5,946

PHP脚本属于弱类型的脚本,在字符串的处理上参考了多项标准:如IEEE 754 ,但是在设计上和实现上出入,往往就会引发安全隐患。

case 1 字符串"=="下类型强转隐患:

从一个例子说起:

php缺陷1

240610708 和 QNKCDZO md5值类型相似,但并不相同,在"=="相等操作符的运算下,结果返回了true. 出入意料!

那在php中这段操作是如何进行的:

类似0e462097431906509019562988736854 这种形式 0e[0-9].*的字符串会被PHP解析器默认解析为 numerical strings类型。

在"=="表达式进行字符串比较时,首先会判断类型,如果属于numerical strings 则先强转转换为数字。

0e462097431906509019562988736854 =0x10【462097431906509019562988736854】次方 =0

0e83040045199349405802421990339 =0x10【83040045199349405802421990339】次方 =0

最终显示上面的结果。

产生的隐患:

1.某些用户的密码可能会形同虚设

用户采用类似240610708 这样能够md5之后形成0e[0-9].*的hash串的密码时,

同时网站的帐号体系也是以md5的形式存储,

在login 登录验证时,采用:

$result=query("'select password from user_tables where username='+$_POST[name]+'limit 0,1'");
if (md5($_POST[password])==$result)
echo "success";

类似判断机制条件下:

攻击者可利用任意 QNKCDZO 这样能md5之后产生0e[0-9].*的密码就可以登录用户的帐号。

2.导致网站逻辑设计出错

当网站的交易记录产生了ID=0e462097431906509019562988这种 0e[0-9].*形式时,

攻击者可伪造任意 0e[0-9].*的形式绕过为ID的判断对记录数据进行篡改删除等操作。

类似的形式还有"603E-4234" == "272E-3063"

3.扩展

通过php的这个特性可以检测一些网站的帐号加密体系。

例1:

先注册密码为240610708的用户A。

然后用密码QNKCDZO尝试登录用户A。

倘若成功登录,则证明此网站采用了不完备的加密体制md5一次加密。

例2:

先注册密码为0E33455555的用户A。

然后用密码0E234230570345尝试登录用户A。

倘若成功登录,则证明此网站采用了明文进行存储密码!

就比如说是某某云平台网站:)

case 2 strcmp多变性输出:

查看php的手册

int strcmp ( string $str1 , string $str2 )

Return Values

Returns < 0 if str1 is less than str2; > 0 if str1 is greater than str2, and 0 if they are equal.

当输入的两个值为不是字符串时就会产生不预期的返回值:

strcmp("5", 5) => 0
strcmp("15", 0xf) => 0
strcmp(61529519452809720693702583126814, 61529519452809720000000000000000) => 0
strcmp(NULL, false) => 0
strcmp(NULL, "") => 0
strcmp(NULL, 0) => -1
strcmp(false, -1) => -2
strcmp("15", NULL) => 2
strcmp(NULL, "foo") => -3
strcmp("foo", NULL) => 3
strcmp("foo", false) => 3
strcmp("foo", 0) => 1
strcmp("foo", 5) => 1
strcmp("foo", array()) => NULL + PHP Warning
strcmp("foo", new stdClass) => NULL + PHP Warning
strcmp(function(){}, "") => NULL + PHP Warning

最为导致安全隐患的为:

php缺陷2

在新版本的php 中则会返回NULL:

结合 PHP foreach $a in $$b 数组替换的变量漏洞就会绕过代码的逻辑。

原文地址:http://blog.levsonsafe.com/?p=20

目前有:2条访客评论,博主回复2

  1. 三流火
    2015-07-26 15:08

    hackinglab 的那道“MD5真的需要碰撞么”题 就是从这里来的

  2. test
    2015-08-16 14:04

    哈哈,case2标题写错了,是strcmp不是strcpy

留下脚印,证明你来过。

*

*

流汗坏笑撇嘴大兵流泪发呆抠鼻吓到偷笑得意呲牙亲亲疑问调皮可爱白眼难过愤怒惊讶鼓掌