当前位置:网站首页>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
边栏推荐
- synchronized 实现原理
- form中enctype属性
- DJ音乐管理软件Pioneer DJ rekordbox
- 耳穴诊疗随笔0421
- SYS_ CONNECT_ BY_ Path (column, 'char') combined with start with connect by prior
- Notes on 30 steps of introduction to Internet of things of yangtao electronics STM32 III. Explanation of new cubeide project and setting
- Campus transfer second-hand market source code download
- LINQ Learning Series ----- 1.4 anonymous objects
- DOM学习笔记---遍历页面所有元素节点
- 洋桃电子STM32物联网入门30步笔记四、工程编译和下载
猜你喜欢

项目上传部分

Goland 调试go使用-大白记录

vmware 搭建ES8的常见错误

Yangtao electronic STM32 Internet of things introduction 30 steps notes 1. The difference between Hal library and standard library

Transformer XL: attention language modelsbbeyond a fixed length context paper summary

分布式消息中间件框架选型-数字化架构设计(7)

程序,进程,线程;内存结构图;线程的创建和启动;Thread的常用方法

Asan minimalism

根据字节码获取类的绝对路径

WordPress love navigation theme 1.1.3 simple atmosphere website navigation source code website navigation source code
随机推荐
洋桃电子STM32物联网入门30步笔记三、CubeMX图形化编程、设置开发板上的IO口
flask项目跨域拦截处理以及dbm数据库学习【包头文创网站开发】
DOM 学习之—添加+-按钮
记录:js删除数组中某一项或几项的几种方法
增强现实技术是什么?能用在哪些地方?
Detailed explanation of ansible automatic operation and maintenance (I) installation and deployment, parameter use, list management, configuration file parameters and user level ansible operating envi
Shell script advanced
作文以记之 ~ 二叉树的前序遍历
RPC procedure
洋桃电子STM32物联网入门30步笔记二、CubeIDE下载、安装、汉化、设置
'恶霸' Oracle 又放大招,各大企业连夜删除 JDK。。。
Shell脚本进阶
How browser works
Yangtao electronic STM32 Internet of things introduction 30 steps notes 1. The difference between Hal library and standard library
如何保护开源项目免遭供应链攻击-安全设计(1)
Flink SQL实现流批一体
Misunderstanding of flush () method of OutputStream class
Talk about the basic but not simple stock data
RPC过程
测试你的机器学习流水线