一、md5 加密漏洞
- 比较哈希字符串的时候,php 程序把每一个以“0x”开头的哈希值都解释为科学计数法 0 的多少次方,恒为 0
- 所以如果两个不同的密码经过哈希以后,其哈希值都是以“0e”开头的,那么 php 将会认为他们相同。
- 另外 md5 加密是有几率两个字符串不同,但是加密后的值是相同的情况,这种情况称为哈希碰撞
1 |
|
结果如下,两个值加密后竟然相等
缺点你懂的,如果一个网站的某个用户密码加密后刚好是 0e 开头的,这个时候黑客过来破解,很容易就攻入了
1 | { |
二、is_numeric 漏洞
会忽视 0x 这种十六进制的数
容易引发 sql 注入操作,暴漏敏感信息
1 | echo json_encode([ |
结果如下
16 进制数 0x61646D696EASII 码对应的值是 admin
如果我们执行了后面这条命令的话:SELECT * FROM tp_user where username=0x61646D696E,结果不言而喻
1 |
|
三、in_array 漏洞
in_array 中是先将类型转为整形,再进行判断
PHP 作为弱类型语言,类型转换的时候,会有很大漏洞
转换的时候,如果将字符串转换为整形,从字符串非整形的地方截止转换,如果无法转换,将会返回 0
1 |
|
结果如下
1 | bool(true) |
四、switch 漏洞
switch 中是先将类型转为整形,再进行判断
PHP 作为弱类型语言,类型转换的时候,会有很大漏洞
转换的时候,如果将字符串转换为整形,从字符串非整形的地方截止转换,如果无法转换,将会返回 0
1 |
|
结果如下
i 是比 3 小的数
五、intval 强转漏洞
PHP 作为弱类型语言,类型转换的时候,会有很大漏洞
转换的时候,如果将字符串转换为整形,从字符串非整形的地方截止转换,如果无法转换,将会返回 0
1 |
|