IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> php基于哈希算法出现的强弱比较漏洞 -> 正文阅读

[PHP知识库]php基于哈希算法出现的强弱比较漏洞

前言

文章同步于我的个人博客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

在这里插入图片描述

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-04-26 11:23:28  更:2022-04-26 11:24:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 7:33:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码