在官方的文档有这么一端说明:

Note a difference between 5.2 and 5.3 versions

echo (int)strcmp('pending',array());
will output -1 in PHP 5.2.16 (probably in all versions prior 5.3)
but will output 0 in PHP 5.3.3

Of course, you never need to use array as a parameter in string comparisions.

大概意思就是5.3的之前和之后版本在使用strcmp比较数组和字符串时候的差异。

在5.3的版本之后使用这个函数比较会返回0,太令人迷恋了。。。

<?php
#$a='Hello world!';
$password=$_GET['password'];
#$a=True;
#echo gettype($a);
if(strcmp('Firebroo',$password)){
    echo 'NO!';
}else{
    echo 'YES!';
}
#echo ord('a');
?>

这样一段代码,原本的意图是输入Firebroo才能获得权限,但是在5.3版本之后捏,You just need input an array ,like this(?password[]=1)

看图

跳过了验证

跳过了验证,少年,上吧。。

[原文地址]

各种吐槽:

1#

Mujj (脚踩安全狗 拳打肾虚猿) | 2014-03-13 15:18

给你点个赞哦

2#

昵称 (</textarea>'"><script src) | 2014-03-13 15:23

牛逼

3#

newbie0086 | 2014-03-13 16:47

给你点个赞

4#

xiaoL (http://www.xlixli.net) | 2014-03-13 17:12

怒赞!

5#

寂寞的瘦子 (搬砖去了,努力学好Python,等我回来~) | 2014-03-13 17:28

@xiaoL 唉,你复活了?

6#

疯狗 (你在乌云这么叼,你家人知道么?) | 2014-03-13 17:35

@寂寞的瘦子 这些个点滴都是通用漏洞的基石啊 :)

7#

xiaoL (http://www.xlixli.net) | 2014-03-13 17:49

@寂寞的瘦子 差不多该复活了

最近可好- -

8#

tnt1200 (%0a%0a%0a%0a) | 2014-03-13 18:03

mark支持!

9#

/fd (/proc) ?() | 2014-03-13 18:24

php本身就是個奇葩

10#

寂寞的瘦子 (搬砖去了,努力学好Python,等我回来~) | 2014-03-13 18:54

@疯狗 造福百姓~~

11#

高斯 | 2014-03-13 21:04

12#

A11riseforme | 2014-03-13 21:27

我很早以前翻译过有关这个的这篇文章,原文地址戳我:Unauthorized Access: Bypassing PHP strcmp(),翻译地址戳我:越权访问,绕过PHP strcmp()函数

13#

Knight | 2014-03-13 21:30

连我都知道该return false;

14#

whirlwind (息壤最大代理商,北京/香港不限内容云服务器,五线BGP/10兆独享/4千兆硬防,备案/可信,QQ493633628,海外服务器请联系Mujj-------------------------------------------------------无损音乐网 http://wusunyinyue.cn----------------------月色仍如昔,江上有归帆!-----------------------------) | 2014-03-13 21:33

strcmp(61529519452809720693702583126814, 61529519452809720000000000000000) => 0

strcmp("foo", array()) => NULL + PHP Warning

这两个提示了。。

15#

Xser233 | 2014-03-15 16:49

毫不留情的赞!

16#

Coner ([马甲?]) | 2014-03-26 14:53

这个东西可以拿来过验证码,但也要是特定的写法才行,验证码都过了,就可以爆破了

17#

Mody | 2014-03-26 16:29

mark了

18#

My5t3ry | 2014-03-26 17:42

mark

留言评论(旧系统):

酒逍遥 @ 2014-03-14 16:18:13

php 的 0 null false 空字符串 非严格比较的时候是相等的... 很多漏洞都是它引起的.. 严格来讲 我觉得 if 判断 只有 false 是真的假 0 null 空字符串 应该都返回真.

本站回复:

╮(╯_╰)╭

justfor @ 2014-03-20 11:35:11

很少地方的验证会利用这个函数把........

本站回复:

╮(╯_╰)╭