php中有两种比较的符号 == 与 ===
=== (强相等)在进行比较的时候,会先判断两种字符串的类型是否相等,再比较
== 在进行比较的时候,会先将字符串类型转化成相同,再比较
在弱相等 == 中,如果一个数值和字符串进行比较的时候,会将字符串转换成数值字符串的开始部分决定了它的值,如果该字符串以合法的数值开始,则使用该数值,否则其值为0
如 "admin"==0
"1admin"==1
“admin1”==0
"0e123456"=="0e456789"
MD5在强相等 === 中因为无法加密数组,遇到数组时就只能返回NULL
在preg_match中遇到NULL是总是返回true
== 可以使用 md5编译后以0e开头的字符串绕过、数组绕过
=== 可以用数组绕过,如传入 ?a[]=1&b[]=1会使得 md5($a)===md5($b)
(md5加密不了数组,且输出都一样)
参考文章:PHP md5 相等绕过 - Ainsliaea - 博客园 (cnblogs.com)
MD5以0e为开头的一些字符串(适用于==)
以0e开头且md5后仍为0e开头
0e215962017
0E291242476940776845150308577824
md5以后为0e开头
- QNKCDZO
0e830400451993494058024219903391
- 240610708
0e462097431906509019562988736854
- s878926199a
0e545993274517709034328855841020
- s155964671a
0e342768416822451524974117254469
- s214587387a
0e848240448830537924465865611904
- s878926199a
0e545993274517709034328855841020
- s1091221200a
0e940624217856561557816327384675
sha1之后以0e开头
- aaroZmOk
0e66507019969427134894567494305185566735
- aaK1STfY
0e76658526655756207688271159624026011393
- aaO8zKZF
0e89257456677279068558073954252716165668
- aa3OFF9m
0e36977786278517984959260394024281014729
- 0e1290633704
0e19985187802402577070739524195726831799
- 10932435112
0e07766915004133176347055865026311692244
sha1之后以0e开头
- aaroZmOk
0e66507019969427134894567494305185566735
- aaK1STfY
0e76658526655756207688271159624026011393
- aaO8zKZF
0e89257456677279068558073954252716165668
- aa3OFF9m
0e36977786278517984959260394024281014729
- 0e1290633704
0e19985187802402577070739524195726831799
- 10932435112
0e07766915004133176347055865026311692244