PHP特性引发安全隐患

独自等待 2017年5月12日01:35:43评论408 views字数 1849阅读6分9秒阅读模式

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
		
输入密码查看隐藏内容

)==$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



from www.waitalone.cn.thanks for it.

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
独自等待
  • 本文由 发表于 2017年5月12日01:35:43
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   PHP特性引发安全隐患http://cn-sec.com/archives/50251.html

发表评论

匿名网友 填写信息