常见的 php 漏洞

编程知识 行业动态 更新时间:2024-06-13 00:22:42

目录

一、md5加密漏洞

二、is_numeric漏洞

三、in_array漏洞

四、switch漏洞

五、intval强转漏洞


一、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

更多推荐

常见的 php 漏洞

本文发布于:2023-04-03 02:23:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/51ed1ceea844f2167348ef84028b1c17.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:漏洞   常见   php

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!