md5拓展攻击

news/2024/9/18 21:16:37/文章来源:https://www.cnblogs.com/ethereal258/p/18406762

md5拓展攻击

【工具】hash-ext-attack/img/img_1.png at master · shellfeel/hash-ext-attack · GitHub

【攻击方法例题】https://ctf.org.cn/2019/11/19/哈希长度扩展攻击以及HashPump安装使用和两道题目/

实际中的利用条件如下:

  1. 基于哈希的消息认证码 (MAC)

    • 长度扩展攻击的关键条件之一是在消息认证码 (MAC) 中使用单纯的哈希函数,例如 MD5(secret + message)。在这种情况下,如果攻击者可以获得已知消息和对应的 MAC 值,并且知道消息中某些部分的内容,那么他们就可以通过长度扩展攻击构造新的有效 MAC,而不需要知道原始密钥。
  2. 攻击的前提

    • 攻击者需要知道部分消息以及对应的哈希值(通常是消息加密哈希值或者 MAC 值)。
    • 攻击者能够对已知消息进行长度扩展,并计算出新的有效哈希值或者 MAC。
  3. 攻击原理

    • 在 MD5 和其他类似的哈希函数中,内部状态在处理消息的过程中不断更新。长度扩展攻击的原理是利用这个内部状态的中间值,通过构造一个新消息来继续哈希函数的处理,生成新的合法哈希值或 MAC。

    • 由于哈希函数的输出依赖于先前计算的中间状态,攻击者可以通过附加额外数据和重用中间状态来伪造新的哈希或 MAC。

举例

拓展攻击的玩法是:

  • 已知一组正确的md5($salt,$message),salt->盐 message->明文

  • 知道salt的长度(不知道的可去爆破)

可以通过拓展攻击来让message添加信息,得到一个已知的md5($salt,$message,$data),这是在不知道salt的情况下实现的

形式如:$salt=15;$name="admin";if($COOKIE['md5']===md5($salt,urldecode($name . $pwd))){die ("The flag is ". $flag);}
//已知md5($salt."adminadmin")的值为571580b26c65f306376d4f64e53cb5c7

可能乍一眼不知道为什么要继续做后面的事请,直接传参$pwd=admin&md5=571580b26c65f306376d4f64e53cb5c7就行了

但是题目是限制了不许pwdadmin 【原题目】[[Hashpump实现哈希长度扩展攻击 | 极客大挑战]RCEME-CSDN博客](https://blog.csdn.net/JBlock/article/details/78448143)

已知信息:

​ 1.name=admin&pwd!=admin

​ 2.salt长度为15

​ 3.已有md5($salt."adminadmin")的值为571580b26c65f306376d4f64e53cb5c7

构造如下:

请输入已知明文:adminadmin
请输入已知hash: 571580b26c65f306376d4f64e53cb5c7
请输入扩展字符: 随便填填
请输入密钥长度:15

basectf

方便本地测试的版本↓

<?php
header('Content-type:text/html;charset=utf-8');
highlight_file('test.php');$random="12345admin";$flag='flag{hash extend}';echo '<br />';echo md5($random);//9dc9d5ed5031367d42543763423c24ee
echo '<br />';$name = $_REQUEST['name'] ;// check if name ends with 'admin'
if (substr($name, -5) !== 'admin') {
die('不是管理员也来凑热闹?');
}$md5 = $_REQUEST['md5'];
if (md5($random . $name) !== $md5) {
die('伪造? NO NO NO!');
}echo "看样子你真的很懂 MD5";
echo $flag;

已知:

​ 1.name的后5位要是admin

​ 2.md5($random)=9dc9d5ed5031367d42543763423c24ee

一开始我是头痛怎么没有已知的明文,只有一个salt的md5值,重新回忆一下:

  • 已知一组正确的md5($salt,$message),salt->盐 message->明文

  • 知道salt的长度(不知道的可去爆破)

如果说如果明文的值是没有,能继续满足拓展攻击条件吗?

尝试如下:(注意,name要用get方法,传参新明文url编码,get方法自带urldecode)

​ 明文不填东西。扩展字符填入admin,因为要满足后5位是admin的需求.已知密钥长度是10

请输入已知明文:
请输入已知hash: 9dc9d5ed5031367d42543763423c24ee
请输入扩展字符: admin
请输入密钥长度:10
2024-08-26 11:32:21.342 | INFO     | common.HashExtAttack:run:65 - 已知明文:b''
2024-08-26 11:32:21.342 | INFO     | common.HashExtAttack:run:66 - 已知hash:b'9dc9d5ed5031367d42543763423c24ee'
2024-08-26 11:32:21.342 | INFO     | common.HashExtAttack:run:68 - 新明文:b'\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x00\x00\x00\x00\x00\x00\x00admin'
2024-08-26 11:32:21.342 | INFO     | common.HashExtAttack:run:69 - 新明文(url编码):%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00P%00%00%00%00%00%00%00admin
2024-08-26 11:32:21.342 | INFO     | common.HashExtAttack:run:71 - 新hash:3c4e988bbedaed5459b17c94f3a62aba

成功执行

image-20240826114253325

总结

拓展攻击只知道salt的md5值,salt的长度,也能进行拓展攻击

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA+VUE实现动态表单配置

功能描述: 资产管理系统中,在资产分类中,给同一种类型的资产配置定制化的表单项,并实现不同类型显示不同的数据,如图所示:数据库设计部分: 1.表单项表CREATE TABLE `dct_smp`.`t_asset_product_definitions` (`id` bigint NOT NULL,`product_id` bigint NOT NULL COMMEN…

vue 可选链操作符(?.)报错

一直用的好好的这个运算符,换了个项目,用不了了 首先交代一下,vue版本是2.6.11,node版本是v14.17.4 ,vue-template-compiler也是2.6.11 首先哈,我们升级一下vue到2.7.xx版本npm i vue@2.7.0 vue-template-compiler@2.7.0然后安装这个插件npm install @babel/plugin-propo…

互信息

参考 互信息是信息论中用以评价两个随机变量之间的依赖程度的一个度量。 相关概念:信息量:是对某个事件发生或者变量出现的概率的度量,一个事件发生的概率越低,这个事件包含的信息量越大,这跟我们直观上的认知也是吻合的,越稀奇新闻包含的信息量越大,因为这种新闻出现的…

UEFI原理与编程(一)

第一章 UEFI概述(Unified Extensible Firmware Interface 统一的可扩展固件接口) 常见缩写及描述:缩略词 全名 描述UEFI Unified Extensible Firmware Interface 统一的可扩展固件接口BS Boot Services 启动服务RT Runtime Service 运行时服务BIOS Basic Input Output System …

SparkSQL练习:对学生选课成绩进行分析计算

题目内容: 对学生选课成绩进行分析计算题目要求: (1)该系总共有多少学生; (2)该系共开设来多少门课程; (3)每个学生的总成绩多少; (4)每门课程选修的同学人数; (5)每位同学选修的课程门数; (6)该系DataBase课程共有多少人选修; (7)每位同学平均成绩;数据…

面试-JS基础知识-原型和原型链

JS本身是基于原型来继承的语言。 问题引出:如何判断一个变量是不是数组? 手写一个简易的jQuery,考虑插件和扩展性 class的原型本质,怎么理解?知识点class和继承 类型判断 instanceof 原型和原型链class class相当于一个模版,可以用来构建(constructor)东西。 class Stu…

作业9.2:论文查重

这个作业属于哪个课程 班级链接这个作业要求在哪里 作业要求链接这个作业的目标 设计论文查重算法;学会 Git 版本控制。Github 链接:博客正文首行 github 链接 目录一、整体设计开发环境整体设计项目结构二、模块接口的设计与实现核心的类与方法类与函数的调用关系核心算法三…

搭建企业内部的大语言模型系统

大纲开源大语言模型 大语言模型管理 私有大语言模型服务部署方案开源大语言模型 担心安全与隐私?可私有部署的开源大模型商业大模型,不支持私有部署ChatGPT Claude Google Gemini 百度问心一言开源大模型,支持私有部署Mistral Meta Llama ChatGLM 阿里通义千问常用开源大模型…

115. 不同的子序列(leetcode)

https://leetcode.cn/problems/distinct-subsequences/submissions/563375885/ 这题比较有难度,具体不太好想到,需要以是否选择s[i]来划分子集这位描述的很清楚,不做过多赘述 class Solution {public int numDistinct(String s, String t) {// f[i][j]表示s中前i个字符中选择,有…

0.1+0.2 != 0.3 (Java为例)

1. 小数的二进制表示 以10.625为例。整数部分进行除2取余的操作,10的二进制为1010。小数部分进行乘2取整操作,直到小数部分为0或达到需要的精度:0.625*2=1.25 取整数1,小数部分0.25继续计算 0.25*2=0.5 取整数0,小数部分0.5继续计算 0.5*2=1.0 取整数1,小数部分为0,停止…

信创领域认证,来自工信部人才交流中心的PostgreSQL培训班

在国家大力发展信创软件和数据库行业的背景下,PostgreSQL 具有多方面的优势和机遇,具体体现在以下几个方面: 1. 技术优势契合信创需求: PostgreSQL 数据库是一个功能强大、性能稳定、可扩展性强的开源对象关系数据库系统,支持多种数据类型(如数组、JSON、XML 等),方便存储…

Salesforce职业规划:原厂,甲方,乙方,从业者应该如何选择?

Salesforce生态系统蓬勃发展,对不同角色的需求量不断增加。需求方包括使用Salesforce的最终用户(甲方)、实施Salesforce的咨询公司、为Salesforce创建应用程序的AppExchange公司(或ISV),当然还有Salesforce原厂。 Salesforce最终用户(甲方) 2020年,Salesforce的客户数…