page contents

这些常见的PHP漏洞,如果你不知道,就别说自己是个攻城狮

比较哈希字符串的时候,php程序把每一个以“0x”开头的哈希值都解释为科学计数法0的多少次方,恒为0

image


一、md5加密漏洞

比较哈希字符串的时候,php程序把每一个以“0x”开头的哈希值都解释为科学计数法0的多少次方,恒为0

所以如果两个不同的密码经过哈希以后,其哈希值都是以“0e”开头的,那么php将会认为他们相同。

另外md5加密是有几率两个字符串不同,但是加密后的值是相同的情况,这种情况称为哈希碰撞

<?php
$str1 = 's878926199a';
$str2 = 's214587387a';
 
echo json_encode([
 'md5_str1' => md5($str1),
 'md5_str2' => md5($str2),
 'bool' => md5($str1) == md5($str2)
]);

结果如下,两个值加密后竟然相等

缺点你懂的,如果一个网站的某个用户密码加密后刚好是0e开头的,这个时候黑客过来破解,很容易就攻入了

{
 md5_str1: "0e545993274517709034328855841020",
 md5_str2: "0e848240448830537924465865611904",
 bool: true
}


二、is_numeric漏洞

会忽视0x这种十六进制的数

容易引发sql注入操作,暴漏敏感信息

echo json_encode([
 is_numeric(233333),
 is_numeric('233333'),
 is_numeric(0x233333),
 is_numeric('0x233333'),
 is_numeric('233333abc'),
]);

结果如下

16进制数0x61646D696EASII码对应的值是admin

如果我们执行了后面这条命令的话:SELECT * FROM tp_user where username=0x61646D696E,结果不言而喻

[
 true,
 true,
 true,
 false,
 false
]


三、in_array漏洞

in_array中是先将类型转为整形,再进行判断

PHP作为弱类型语言,类型转换的时候,会有很大漏洞

转换的时候,如果将字符串转换为整形,从字符串非整形的地方截止转换,如果无法转换,将会返回0

<?php
var_dump(in_array("2%20and%20%", [0,2,3]));

结果如下

bool(true)


四、switch漏洞

switch中是先将类型转为整形,再进行判断

PHP作为弱类型语言,类型转换的时候,会有很大漏洞

转换的时候,如果将字符串转换为整形,从字符串非整形的地方截止转换,如果无法转换,将会返回0

<?php
$i ="abc";
switch ($i) {
 case 0:
 case 1:
 case 2:
 echo "i是比3小的数";
 break;
 case 3:
 echo "i等于3";
}

结果如下

i是比3小的数


五、intval强转漏洞

PHP作为弱类型语言,类型转换的时候,会有很大漏洞

转换的时候,如果将字符串转换为整形,从字符串非整形的地方截止转换,如果无法转换,将会返回0

<?php
var_dump(intval('2')); //2
var_dump(intval('3abcd')); //3
var_dump(intval('abcd')); //0


image

原文:https://blog.csdn.net/weixin_41635750/article/details/109822456?utm_medium=distribute.pc_feed.none-task-blog-cf-2.nonecase&depth_1-utm_source=distribute.pc_feed.none-task-blog-cf-2.nonecase

  • 发表于 2021-01-22 15:47
  • 阅读 ( 660 )
  • 分类:PHP开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1135 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1474 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章