PHP脚本属于弱类型的脚本,在字符串的处理上参考了多项标准:如IEEE 754 ,但是在设计上和实现上出入,往往就会引发安全隐患。
case 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 中则会返回NULL:
结合 PHP foreach $a in $$b 数组替换的变量漏洞就会绕过代码的逻辑。
原文地址:http://blog.levsonsafe.com/?p=20
from www.waitalone.cn.thanks for it.
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论