威宁热线

威宁团菜到家

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

[复制链接]
我是小白 发表于 2021-2-21 00:19:37 | 显示全部楼层 |阅读模式
一、md5加密漏洞
比较哈希字符串的时候,php程序把每一个以“0x”开头的哈希值都解释为科学计数法0的多少次方,恒为0
所以如果两个不同的密码经过哈希以后,其哈希值都是以“0e”开头的,那么php将会认为他们相同。
另外md5加密是有几率两个字符串不同,但是加密后的值是相同的情况,这种情况称为哈希碰撞
  1. <?php
  2. $str1 = 's878926199a';
  3. $str2 = 's214587387a';

  4. echo json_encode([
  5.     'md5_str1' => md5($str1),
  6.     'md5_str2' => md5($str2),
  7.     'bool' => md5($str1) == md5($str2)
  8. ]);
复制代码
结果如下,两个值加密后竟然相等
缺点你懂的,如果一个网站的某个用户密码加密后刚好是0e开头的,这个时候黑客过来破解,很容易就攻入了
  1. {
  2.     md5_str1: "0e545993274517709034328855841020",
  3.     md5_str2: "0e848240448830537924465865611904",
  4.     bool: true
  5. }
复制代码
二、is_numeric漏洞
会忽视0x这种十六进制的数
容易引发sql注入操作,暴漏敏感信息
  1. echo json_encode([
  2.     is_numeric(233333),
  3.     is_numeric('233333'),
  4.     is_numeric(0x233333),
  5.     is_numeric('0x233333'),
  6.     is_numeric('233333abc'),
  7. ]);
复制代码
结果如下
16进制数0x61646D696EASII码对应的值是admin
如果我们执行了后面这条命令的话:SELECT * FROM tp_user where username=0x61646D696E,结果不言而喻
  1. [
  2.     true,
  3.     true,
  4.     true,
  5.     false,
  6.     false
  7. ]
复制代码
三、in_array漏洞
in_array中是先将类型转为整形,再进行判断
PHP作为弱类型语言,类型转换的时候,会有很大漏洞
转换的时候,如果将字符串转换为整形,从字符串非整形的地方截止转换,如果无法转换,将会返回0
  1. <?php
  2. var_dump(in_array("2%20and%20%", [0,2,3]));
复制代码
结果如下
  1. bool(true)
复制代码
四、switch漏洞
switch中是先将类型转为整形,再进行判断
PHP作为弱类型语言,类型转换的时候,会有很大漏洞
转换的时候,如果将字符串转换为整形,从字符串非整形的地方截止转换,如果无法转换,将会返回0
  1. <?php
  2. $i ="abc";
  3. switch ($i) {
  4.     case 0:
  5.     case 1:
  6.     case 2:
  7.         echo "i是比3小的数";
  8.         break;
  9.     case 3:
  10.         echo "i等于3";
  11. }
复制代码
结果如下
  1. i是比3小的数
复制代码
五、intval强转漏洞
PHP作为弱类型语言,类型转换的时候,会有很大漏洞
转换的时候,如果将字符串转换为整形,从字符串非整形的地方截止转换,如果无法转换,将会返回0
  1. <?php
  2. var_dump(intval('2')); //2
  3. var_dump(intval('3abcd')); //3
  4. var_dump(intval('abcd')); //0
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表