当前位置:网站首页>php基于哈希算法出现的强弱比较漏洞
php基于哈希算法出现的强弱比较漏洞
2022-04-23 08:18:00 【quan9i】
前言
文章同步于我的个人博客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
版权声明
本文为[quan9i]所创,转载请带上原文链接,感谢
https://blog.csdn.net/Reme_mber/article/details/124235010
边栏推荐
- Failed to convert a NumPy array to a Tensor(Unsupported Object type int)
- npm安装yarn
- 对li类数组对象随机添加特性,并进行排序
- Queue (C language / linked list)
- PDF with watermark
- 洋桃電子STM32物聯網入門30步筆記一、HAL庫和標准庫的區別
- 5.6 comprehensive case - RTU-
- There are some problems when using numeric type to query string type fields in MySQL
- Anonymous type (c Guide Basics)
- 程序,进程,线程;内存结构图;线程的创建和启动;Thread的常用方法
猜你喜欢
My heart's broken! A woman's circle of friends envied others for paying wages on time and was fired. Even her colleagues who liked her were fired together
Shell script advanced
程序,进程,线程;内存结构图;线程的创建和启动;Thread的常用方法
IDEA导入commons-logging-1.2.jar包
[learning] audio and video development from scratch (9) -- nuplayer
Redis Desktop Manager for Mac(Redis可视化工具)
HAL库的RCC简介
Failed to convert a NumPy array to a Tensor(Unsupported Object type int)
'bully' Oracle enlarged its move again, and major enterprises deleted JDK overnight...
ansible自動化運維詳解(一)ansible的安裝部署、參數使用、清單管理、配置文件參數及用戶級ansible操作環境構建
随机推荐
测试你的机器学习流水线
Yangtao electronic STM32 Internet of things entry 30 step notes II. Cube ide download, installation, sinicization and setting
Large amount of data submitted by form post
Green apple film and television system source code film and television aggregation film and television navigation film and television on demand website source code
Noyer électronique stm32 Introduction à l'Internet des objets 30 étapes notes I. différences entre la Bibliothèque Hal et la Bibliothèque standard
WordPress love navigation theme 1.1.3 simple atmosphere website navigation source code website navigation source code
K210学习笔记(二) K210与STM32进行串口通信
LINQ Learning Series ----- 1.4 anonymous objects
[learning] audio and video development from scratch (9) -- nuplayer
匿名类型(C# 指南 基础知识)
Record: JS several methods to delete one or more items in the array
跨域配置报错: When allowCredentials is true, allowedOrigins cannot contain the special value “*“
QFileDialog select multiple files or folders
增强现实技术是什么?能用在哪些地方?
excle加水印
Idea: export Yapi interface using easyyapi plug-in
00后最关注的职业:公务员排第二,第一是?
对OutputStream类的flush()方法的误解
How browser works
虚拟线上展会-线上vr展馆实现24h沉浸式看展