MD5 绕过第二式:数组绕过

news2024/11/20 13:31:11

文章目录

  • 参考
  • 环境
  • 强类型比较运算符
  • 雾来
      • 哈希碰撞
      • 目标
  • 王小云院士与白宫密码
      • 王小云院士
      • 两度破译白宫密码
          • 白宫密码
          • 亮剑
          • 十年磨一剑
  • 雾散
      • 曲径通幽
      • Warrning
      • PHP 中的数组与 md5()
      • 尝试绕过
      • PHP8 下的致命错误

参考

项目描述
搜索引擎BingGoogle
AI 大模型文心一言通义千问讯飞星火认知大模型ChatGPT
PHP 手册PHP Manual
wsfgrdghPHP8中字符串与数字的比较更智能
PHP RFC 文档Saner string to number comparisons
超模君两度破译“白宫密码”,让美国政府部门崩溃,却称自己是抱娃敲代码的普通妈妈

环境

项目描述
PHP5.5.05.6.87.0.07.2.57.4.98.0.08.2.9

强类型比较运算符

在 PHP 中,强类型比较运算符 是指对操作数进行比较操作时,不单单只比较 操作数的大小,还比较 操作数所属的数据类型是否相同

与强类型比较符相对的是 弱类型比较运算符,弱类型比较运算符是指 PHP 在进行比较操作时,当操作数的数据类型不同时,PHP 将尝试将 依据一定的规则将操作数的数据类型进行统一

举个栗子

<?php


# 强类型比较运算符
var_dump('4949' == 4949);
//在 PHP8 版本中运行
//'4949Hello' == 4949
//得到的结果将为 false
var_dump('4949Hello' == 4949);

# 弱类型比较运算符
var_dump('4949' === 4949);
var_dump('4949Hello' === 4949);

执行效果

bool(true)
bool(true)
bool(false)
bool(false)

雾来

哈希碰撞

MD5 算法的 哈希输出空间 相对较小,仅有 128 位(仅能容纳 128 位二进制数据),而 输入空间是无限的,这种 输入与输出的不匹配性 导致了哈希碰撞的 可能性。攻击者可以使用 巧妙构造的输入数据,通过精心选择的 碰撞攻击算法,找到 具有相同哈希值的不同输入

目标

在继续讲解前,先来看一段代码。倘若在安全竞赛中你需要绕过一个类似如下 PHP 代码中的判断语句:

<?php


$user_input = "I'm a secret.";
$user_input_1 = "I'm a secret too.";

if ($user_input !== $user_input_1 && md5($user_input) === md5($user_input_1)) {
    print('Win');
}

上述代码 允许用户进行两次输入,在后续的判断语句中,PHP 将采用 强类型比较运算符 判断用户的两次输入是否相同 这两次输入的 MD5 哈希结果 是否相同。这意味着 我们需要寻找到 能够产生哈希碰撞的两个数据。这样的数据当然能够从网络中获取到,但想必我们都希望使用一种更为专业🕶的手段解决这个问题🧙🏻‍♂️。并且,从网络中查找到能够发生哈希碰撞的几个数据来绕过判断语句这一方案仅在 $user_input$user_input_1 均为用户的输入数据时生效,假如 $user_input$user_input_1 中的 任意一个变量的内容由 PHP 程序指定,这一方案即土崩瓦解。

王小云院士与白宫密码

王小云院士

王小云(Xiaoyun Wang)院士 是中国首屈一指的密码学专家,因她在 哈希函数密码分析方面 的贡献而广受赞誉。她是几种流行的密码算法潜在弱点的发现者之一,其中包括对 MD5SHA-0SHA-1 哈希函数的攻击。

两度破译白宫密码

白宫密码

基于 Hash 函数的 MD5SHA-1 是由美国标准技术局(National Institute of Standards and Technology,NIST)颁布的,是 当时国际上公认最先进、应用范围最广的两大重要算法。也正如此,MD5SHA-1 被称为白宫密码。

亮剑

2004 年,王小云院士在密码学大会上宣布 四个国际通用 的哈希算法 MD5HAVAL- 128MD4RIPEMD 已被破解,震惊全球👏。在会上,王小云公布了一种方法,可以更有效地找到哈希函数的两个不同输入,这两个输入会产生相同的哈希值(这一现象被称为哈希冲突)

理论上,为了找到能够产生哈希碰撞的另一数据,可能需要尝试的次数接近 280 次方💥。但是,王小云的方法大大减少了这个数字,虽然仍然需要巨大的计算量,但这个方法确实暴露了MD5 的潜在弱点。

美国对于王小云的研究大为震撼,却故作镇定的认为新研究出的 SHA-1 加密算法绝不可能被攻破😈。然而仅在两个月后,SHA-1 便被王小云成功破解。原本在密码界还是一张白纸的中国,一下子成了密码学界不可忽视的新星✨。

十年磨一剑

在现代社会中,短视和即时回报的诱惑无处不在。然而,真正的突破和伟大的成就往往源于深入钻研、持续的努力和对目标的坚韧不拔。王小云成功破译 宫密码正是这样一个令人震撼的例证💖。

密码学的求学道路,王小云走了十年。那十年,当许多人追求短期的荣誉、金钱和地位🎲,王小云却选择了 一条不同的道路,她选择了对自己的研究领域保持深厚的热情和对解决问题的决心。

雾散

曲径通幽

使用王小云院士提供的 MD5 破解方案,可以在 数个小时内(依计算机配置而定)完成 MD5 的破解。但实际上,在我们这个例子中,还无需使用到这一方案。

Warrning

Warrning 是 PHP 中的一种 异常类型,常产生于一些需要 提醒开发者异常的存在但又没有必要立即停止程序的情况 中。

PHP 中的数组与 md5()

PHP 中的 md5() 函数允许你使用 数组 作为该函数的参数,md5() 函数对于 任何数组 都将返回 NULL。对此,请参考如下示例:

<?php


$result = md5([1, 2, 3]);
$result_1 = md5(['Hello', ' ', 'Wrold']);
$result_2 = md5(['One' => 'Hello', 'Two' => ' ', 'Three' => 'World']);

var_dump($result);
var_dump($result_1);
var_dump($result_2);

执行效果

上述示例代码中向 md5() 函数传递了 三个不同的数组,在 md5() 函数的处理下,它们都无例外的转化为了 NULL

Warning: md5() expects parameter 1 to be string, array given in C:\test.php on line 4

Warning: md5() expects parameter 1 to be string, array given in C:\test.php on line 5

Warning: md5() expects parameter 1 to be string, array given in C:\test.php on line 6
NULL
NULL
NULL
PHP Warning:  md5() expects parameter 1 to be string, array given in C:\test.php on line 4
PHP Warning:  md5() expects parameter 1 to be string, array given in C:\test.php on line 5
PHP Warning:  md5() expects parameter 1 to be string, array given in C:\test.php on line 6

尝试绕过

回到我们最初探讨的问题上来:

<?php


$user_input = "I'm a secret.";
$user_input_1 = "I'm a secret too.";

if ($user_input !== $user_input_1 && md5($user_input) === md5($user_input_1)) {
    print('Win');
}

想必各位此时已经对上述代码中的判断语句的绕过方式已经有了方案,即将 $user_input$user_input_2 这两个变量赋值为 两个不相等的数组 即可。

对此,我们做出了下述调整:

<?php


$user_input = ['One' => 'Hello', 'Two' => ' ', 'Three' => 'World'];
$user_input_1 = [1, 2, 3];

if ($user_input !== $user_input_1 && md5($user_input) === md5($user_input_1)) {
    print('Win');
}

执行结果

能够观察到,我们已经绕过了 MD5 函数的限制,成功执行了 if 语句包含的代码。

PHP Warning:  md5() expects parameter 1 to be string, array given in C:\test.php on line 7
PHP Warning:  md5() expects parameter 1 to be string, array given in C:\test.php on line 7

Warning: md5() expects parameter 1 to be string, array given in C:\test.php on line 7

Warning: md5() expects parameter 1 to be string, array given in C:\test.php on line 7
Win

PHP8 下的致命错误

不同于其他版本(PHP8 以下版本),PHP8 不允许在 md5() 函数中使用数组。倘若您在 md5() 函数中使用数组,PHP 将抛出 Fatal Error 异常,程序将立即终止。

对于我们刚刚找到的绕过方案:

<?php


$user_input = ['One' => 'Hello', 'Two' => ' ', 'Three' => 'World'];
$user_input_1 = [1, 2, 3];

if ($user_input !== $user_input_1 && md5($user_input) === md5($user_input_1)) {
    print('Win');
}

在 PHP 中将得到如下结果:

PHP Fatal error:  Uncaught TypeError: md5(): Argument #1 ($string) must be of type string, array given in C:\test.php:7
Stack trace:
#0 C:\test.php(7): md5(Array)
#1 {main}
  thrown in C:\test.php on line 7

Fatal error: Uncaught TypeError: md5(): Argument #1 ($string) must be of type string, array given in C:\test.php:7
Stack trace:
#0 C:\test.php(7): md5(Array)
#1 {main}
  thrown in C:\test.php on line 7

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1046284.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

正点原子lwIP学习笔记——Jperf测试网速

1. Jperf与iperf简介 iperf是命令行形式的网络性能测试工具&#xff1b;而Jperf就是在iperf的基础上进行UI开发&#xff0c;搭建了界面的图形化网络性能测试工具。 是用来测试TCP/UDP的带宽、延迟抖动和数据包丢失等功能&#xff01; iperf -c server -ip -p server-port -i 1…

解决GC毛刺问题——转转搜索推荐服务JDK17升级实践

解决GC毛刺问题——转转搜索推荐服务JDK17升级实践 1 升级背景2 JDK17简介2.1 新语法简介2.2 新GC算法简介 3 升级过程3.1 升级步骤3.2 遇到问题及解决方法 4 升级效果4.1 整体耗时对比4.2 分节点耗时对比4.3 GC停顿时长对比4.4 堆空间占用对比 5 总结 1 升级背景 随着转转业务…

HTTPS协议概述

HTTPS&#xff08;Hypertext Transfer Protocol over Secure Socket Layer&#xff0c;基于安全套接字层的超文本传输协议&#xff09;&#xff0c;是以安全为目标的HTTP通道&#xff0c;简单讲是HTTP的安全版。即HTTP下加入SSL层&#xff0c;HTTPS的安全基础是SSL&#xff0c;…

C语言入门Day_26 结构体

目录 前言&#xff1a; 1.结构体的定义 2.结构体的使用 3.易错点 4.思维导图 前言&#xff1a; 变量只能表示单一的属性&#xff0c;比如用int去表示一个年龄&#xff0c;用float去表示一个身高或一个体重&#xff0c;一个字符串/字符数组去表示一个性别或一个名字。 …

2023年腾讯云服务器优惠活动整理汇总

腾讯云是腾讯集团倾力打造的云计算品牌&#xff0c;为了吸引更多的用户&#xff0c;腾讯云经常会推出各种各样的优惠活动。本文将为大家整理汇总一些腾讯云服务器的优惠活动&#xff0c;希望能够帮助到需要购买腾讯云服务器的用户。 一、腾讯云服务器优惠券 腾讯云优惠券是腾讯…

创建型设计模式——工厂模式

摘要 本博文主要介绍软件设计模式中工厂模式&#xff0c;其中工厂设计模式的扩展为简单工厂(Simple Factory)、工厂方法(Factory Method)、抽象工厂(Abstract Factory)三种。 一、简单工厂(Simple Factory) 主要分析设计模式 - 简单工厂(Simple Factory)&#xff0c;它把实例…

腾讯大牛耗时1个月整理的“JVM学习笔记“深入底层,面面俱到!

为什么要学习JVM&#xff1f; 1、 程序调优2、 排查程序运行问题3、 掌握了程序执行的根本和原理4、 规避写代码时候的一些错误5、 应付面试6、 掌握了其他语言的通用机制 怎么有效的学习JVM&#xff1f; 以上了解了学习JVM的种种好处&#xff0c;但是怎么有效的学习JVM呢&a…

029-从零搭建微服务-消息队列(一)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff08;后端&#xff09;&#xff1a;mingyue: &#x1f389; 基于 Spring Boot、Spring Cloud & Alibaba 的分布式微服务架构基础服务中心 源…

1992-2021年省市县经过矫正的夜间灯光数据(GNLD、VIIRS)

1992-2021年省市县经过矫正的夜间灯光数据&#xff08;GNLD、VIIRS&#xff09; 1、时间&#xff1a;1992-2021年3月&#xff0c;其中1992-2013年为年度数据&#xff0c;2013-2021年3月为月度数据 2、来源&#xff1a;1992-2013年来源于DMSP、2013-2021年3月来自VIIRS 3、范…

spring AOP源码阅读分析

理论知识 AOP是面向切面编程&#xff08;Aspect Oriented Programming&#xff09;的意思。定义一些切点(pointcut),然后可以在切点织入一些通知(advice)&#xff0c;对切点方法进行代理增强&#xff0c;与核心业务逻辑分离开来&#xff0c;以提高系统的可维护性、可扩展性和重…

网工内推 | 网络工程师,软考证书优先,六险一金,包吃

01 科力信息 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1、负责蚌埠项目的设备安装及调试&#xff1b; 2、对边界网络运行中的监控、故障排除、问题处理。 任职要求&#xff1a; 1、2年及以上网络相关工作经验&#xff0c;有交通管理网络运维经验优先&#xff1b…

【移动端测试工具】Appium自动化测试工具安装与配置

文章目录 一、JAVA环境配置检查是否已安装java jdk 二、android SDK安装1.下载android sdk压缩包2.解压压缩包3.安装SDK Manager4.sdk环境变量配置5.验证sdk是否安装成功 三、node JS安装1.下载node.js安装包2.安装node.js3.环境配置4.测试完成验证5.安装淘宝镜像并检验是否安装…

Android MeasureSpec测量规格

文章目录 Android MeasureSpec测量规格概述MeasureSpec组成常用APIMeasureSpec源码分析getChildMeasureSpec源码分析总结 Android MeasureSpec测量规格 概述 MeasureSpec指View的测量规格&#xff0c;MeasureSpec是View的一个静态内部类。 View的MeasureSpec是根据自身的布局…

SoloX:Android和iOS性能数据的实时采集工具

SoloX&#xff1a;Android和iOS性能数据的实时采集工具 github地址&#xff1a;https://github.com/smart-test-ti/SoloX 最新版本&#xff1a;V2.7.6 一、SoloX简介 SoloX是开源的Android/iOS性能数据的实时采集工具&#xff0c;目前主要功能特点&#xff1a; 无需ROOT/越狱…

Java调用操作系统命令的输出乱码问题解决

本篇解决的问题 使用Java 的Runtime调用操作系统的命令&#xff0c;出现异常时使用getErrorStream()获取错误信息的字节流&#xff0c;转换该字节流为字符串显示时&#xff0c;出现乱码。 Java调用操作系统命令 这里以Windows 操作系统为例&#xff0c; 调用cd 命令切换路径…

SAP 销售订单审批状态参数设置

定义权限码 BS52 Spro->控制->内部订单->订单主数据->状态管理->定义状态管理授权码 创建状态参数文件 BS02 SPRO->销售与分销->销售->销售凭证->定义并分配状态参数文件->定义状态参数文件 1)命名&#xff0c;描述 设置对象类型&#xff1a;销…

记录一个iOS UITableView 正在刷新的时候修改数据源导致的崩溃

首先看一下崩溃堆栈信息 由于tableview 调用layoutsubViews 执行到代理方法 -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 由于是崩溃在系统方法里面的&#xff0c;我们无法直接看到是因为调用哪个方法导致的崩溃 后来…

秦时明月沧海手游礼包码,秦时明月沧海兑换码

在玩《秦时明月沧海》手游时&#xff0c;你可能会遭到礼包码的诱惑。如果你还没找到可用的兑换码&#xff0c;这里有一些可供使用的礼包码&#xff0c;赶快领取吧&#xff01; 关注【娱乐天梯】&#xff0c;获取内部福利号 1. 礼包码&#xff1a;QIN0809 包含&#xff1a;金镒…

面试打底稿⑤ 项目一的第一部分

简历原文 抽查部分 项目描述 该项目旨在服务广州地区的快递物流&#xff0c;实现了下单、快递员取派件、订单转运单、线路规划、网点设置等功能。 责任描述 登录系统优化&#xff0c;双token三验证模式实现设置token状态、提高登录安全性的效果 模拟问答 1.能简单介绍一下…

2023-9-27 JZ18 删除链表的结点

题目链接&#xff1a; 删除链表的结点 import java.util.*;/** public class ListNode {* int val;* ListNode next null;* public ListNode(int val) {* this.val val;* }* }*/public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请…