php基于哈希算法出现的强弱比较漏洞

2023-11-06

前言

文章同步于我的个人博客https://quan9i.top/phpcompare
在看一些ctf简单题时发现大多用到了=====这些,因此对其进行总结学习,希望下一次看到的时候可以直接解决,知识汇总如下,希望对正在学习的师傅们有所帮助

哈希算法

哈希算法的定义如下

哈希算法(Hash)又称摘要算法(Digest),它的作用是:对任意一组输入数据进行计算,得到一个固定长度的
输出摘要。 哈希算法最重要的特点就是: 相同的输入一定得到相同的输出; 不同的输入大概率得到不同的输出。

常用的哈希算法有:

算法			输出长度(位)	输出长度(字节)
MD5				128 bits		16 bytes
SHA-1			160 bits		20 bytes
RipeMD-160		160 bits		20 bytes
SHA-256			256 bits		32 bytes
SHA-512			512 bits		64 bytes

php与哈希算法

有一种哈希算法加密后得出的特殊形式是0e+xxx(数字)的组合。而php在处理这种字符时,统一将其视为0,测试如下
在这里插入图片描述
在这里插入图片描述
之所以出现这种情况,是因为php中科学计数法的表示方法是与此类似的,举个栗子,十的十次方用php来表示的话就是1e10二×十的十次方就是2e10,测试如下
在这里插入图片描述
此时我们再看0exxx这种,那么php就会将它视为是科学计数法,从而以0×10的xxx次方来进行计算,此时的话我们就可以看出,无论它怎么算都是0,因此就出现两者值相等的情况

php弱比较

php弱比较指的是==这种,两个==的时候它的计算方法是先将其转换成同种类型,再进行计算,也就相当于此时它是只比较值的,因此也就出现了php弱比较漏洞,我们也因此实现了绕过

0X01

<?php
if($_POST['a']!=$_POST['b']&& md5($_POST['a'])==md5($_POST['b'])){
	die("success!");
}
else
{
	echo"hacker";
}
show_source(__FILE__);
?>

可以看出条件是要求两者不相等但md5值需要相当,我们知道md5是哈希算法的一种,因此此时我们就想到了用0e这种方法来进行绕过,因此我们就需要找出几个字符串,让它进行md5加密后为0e这种的,在学习过其他师傅的笔记后,得知下面几个字符串经md5加密后为0e格式

aabg7XSs
aabC9RqS
s878926199a
QNKCDZO
240610708

测试结果如下
在这里插入图片描述
因此这里的话我们就可以用这几个来实现绕过
在这里插入图片描述

0X02

<?php
$flag='flag{quan9i is best}';
if ($_GET['name']!=$_GET['pwd']){
    if (md5($_GET['name'])==md5($_GET['pwd'])){
        echo $flag;
    }
}
?>

可以看到是先比较用户名和密码是否值相同,不同时再将连两者分别进行md5加密,再进行弱比较,本来是没有什么问题的,但是这里用了md5加密,md5加密的话我们就会想到0e,此时再用那些经过md5加密后变为0e格式的,即可实现绕过
在这里插入图片描述

php强比较

<?php
if($_POST['a']!==$_POST['b']&& md5($_POST['a'])===md5($_POST['b'])){
	die("success!");
}
?>

强比较指的是===,此时不仅检测值,而且检测是否为同一类型,因此就无法用上面的方法来进行绕过了
,这里绕过的话需要用到数组,,我们知道php中md5函数要求的我们放在里面的应该是string类型的,那这里我们放入一个数组的话,它既不会报错,也不会解析它的值,这时候两者都报出了相同的错误,那是不是就构成了相等,我们的数组在echo时输出都为array,经过md5加密后全为null,因此可以进行绕过,测试如下
在这里插入图片描述
,因此我们这里构造构造如下payload即可绕过

a[]=1&b[]=2

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php基于哈希算法出现的强弱比较漏洞 的相关文章

  • Pytorch 基础之张量索引

    本次将介绍一下 Tensor 张量常用的索引与切片的方法 1 index 索引 index 索引值表示相应维度值的对应索引 a torch rand 4 3 28 28 print a 0 shape 返回维度一的第 0 索引 tensor
  • jfinal-admin 后台框架永久开源

    jfinal admin 是什么 jfinal admin是一个基于jfinal的后台管理开发框架 能帮助你使用很少的时间和代码量开发出功能完备的管理后台 最新代码请切换到 develop 分支 集组织机构管理 用户管理 角色管理 菜单管理
  • C语言【判断一个整数是否为素数】

    include
  • U-Boot命令大全(功能参数及用法)

    本文转载至 http www cnblogs com farsight2011 p 3301126 html U Boot上电启动后 按任意键可以退出自动启动状态 进入命令行 U Boot 2010 03 Sep 25 2011 16 18

随机推荐