在官方的文档有这么一端说明:
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
留言评论(旧系统):