hash长度拓展攻击

news/2025/2/28 1:17:10/文章来源:https://www.cnblogs.com/abigmalon/p/18563784
  • 因为hash生成机制,我们可以人为在明文中加入冗余数据,使得加密链多出一节(可控),使得当我们知道倒数第二节的数据时可以控制最终的md5值

  • 如同MD5算法那般分组后与向量运算的流程被统称为Merkle–Damgård结构。
    而同样使用此结构的HASH算法还有:SHA1、SHA2等

以md5算法为例子(其他的暂时不会)

MD5长度拓展攻击

引入

参考文章:浅谈HASH长度拓展攻击 - Yunen的博客 - 博客园
用一个简单例子引入

<?php
include "flag.php";
$secretKey = 'xxxxxx';       #xxx为未知内容,但长度已知为6。
$v1 = $_GET['str'];
$sign = $_GET['sign'];
$token = md5($secretKey.$v1);
if($v1 === 'test') {die($token);             #token=2df51a84abc64a28740d6d2ae8cd7b16
} else {if($token === $sign) {die($flag);}
}
?>

分析:

$token变量的值 = $secretKey+$v1(可控)的md5值
当$v1的值为test时,token为2df51a84abc64a28740d6d2ae8cd7b16
当$token = $sign(可控)时给出$flag

在这一例子中,我们知道当$v1为test时,md5($secretKey.$v1)的值,那么我们就可以利用md5长度拓展攻击构造出已知最终md5值的($secretKey.$v1)

要搞懂md5长度拓展攻击,首先要知道md5摘抄算法的原理

md5摘抄算法原理

借一张图:image

来源:https://xz.aliyun.com/t/2563?time__1311=n4%2Bxni0%3DG%3Di%3D0QLW405DKfSxmOv8sDBie%2FmoD

接下来细嗦一下md5算法的过程:

1、将原文数据(字符串)依照ASCII码表转换成二进制

2、将二进制数据分块,每一块512位(每个字节8bit,即包括64位字符数据)

  • 当(最后一块)二进制数据长度< 448 ,填充padding(无意义占位)数据使得长度达到448,再填充入长度信息(二进制64位)至512位
    image

  • 当 448 <(最后一块)二进制数据<=512 ,填充padding数据到下一块的448位,再填充长度信息至512位

image

padding:即 10000000···(首位为1,其他为0)

3、使用初始md5初始向量与第一块二进制原文数据运算,得到新的向量

  • 初始向量:

A=0x67452301
B=0xefcdab89
C=0x98badcfe
D=0x10325476

4、使用新的向量与第二块原文数据运算,得到新的向量,以此类推,直到算完最后一块原文数据得到最终向量,如下列向量

A=0xab45bc01
B=0x6a64bb53
C=0x23ba8afe
D=0x46847a62

5、去掉0x,将每一行的数据高低位互换

ab 45 bc 01
6a 64 bb 53
23 ba 8a fe
46 84 7a 62

换位得

01 bc 45 ab
53 bb 64 6a
fe 8a ba 23
62 7a 84 46

6、拼接起来得到最终的md5值:01bc45ab53bb646afe8aba23627a8446

ok,现在我们了解了md5算法的原理,再讲讲md5长度拓展

md5长度拓展

在之前的例子中,我们知道了当$v1为test,最终向量为

A'=0x841af52d
B'=0x284ac6ab
C'=0x2a6d0d74
D'=0x167bcde8

如图
image

我们可以将$v1的值改为

"test" + padding数据 + 长度数据 + "abc"

此时我们只要知道倒数第二个向量与最后一个二进制原文的计算方法我们就可以知道最终的md5值


当然我们不必需要会向量与二进制原文的计算,可以直接使用工具hashpump
得出payload
test\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\x00abc
因为编码原因需要把\x改为%,得到最后的payload
test%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%00abc

工具hashdump

项目地址:https://github.com/miekrr/HashPump






例题:

实验吧ctf-web-让我进去(Hash长度扩展攻击)

进入题目是一个经典登录页面,于是经典抓包
image

直接提交不行,看到cookie中有个source=0,改为1
找到源码
image

点击查看代码
$flag = "XXXXXXXXXXXXXXXXXXXXXXX";
$secret = "XXXXXXXXXXXXXXX"; // This secret is 15 characters long for security!$username = $_POST["username"];
$password = $_POST["password"];if (!empty($_COOKIE["getmein"])) {if (urldecode($username) === "admin" && urldecode($password) != "admin") {if ($COOKIE["getmein"] === md5($secret . urldecode($username . $password))) {echo "Congratulations! You are a registered user.\n";die ("The flag is ". $flag);}else {die ("Your cookies don't match up! STOP HACKING THIS SITE.");}}else {die ("You are not an admin! LEAVE.");}
}setcookie("sample-hash", md5($secret . urldecode("admin" . "admin")), time() + (60 * 60 * 24 * 7));if (empty($_COOKIE["source"])) {setcookie("source", 0, time() + (60 * 60 * 24 * 7));
}
else {if ($_COOKIE["source"] != 0) {echo ""; // This source code is outputted here}
}

分析:

要使得cookie中的值getmein == md5($secret+'admin'+$password)
当$password为admin时
sample-hash=md5($secret+'admin'+$password)=571580b26c65f306376d4f64e53cb5c7
使用md5长度扩展构造payload

password=admin%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%c8%00%00%00%00%00%00%00abcgetmein=7db18a2831cdab27425f299ca09f034e

image

提交得到flag
image

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

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

相关文章

Logisim-017-CRC解码

电路文件所在 电路/2-data.circ 中的 CRC解码1、其中[转换电路]在2-data.circ里面 【转换电路】的原理是: 余数和出错位数的关系是个映射关系,可以通过转换电路,转换成【循环左移电路】所需要左移的位数 可以用真值表生成,生成时,r5 r4 r3 r2 r1 系统自带的有,先将s4 s3 …

Redmi Pad SE刷机踩坑记录/类原生刷机Root教程

前言 刷机适合作为爱好,刷机只是手段而不是目的,不建议花过多时间在上面。 本文以Redmi Pad SE为例,较新的小米机型应该都差不多。 准备解BL锁 退出账号(比如小米和谷歌) 备份资料线刷 在谈线刷之前,我们说一说为何要线刷底包。 多的不说什么,从文件体积上,线刷包要比卡…

人工智能之深度学习基础——反向传播(Backpropagation)

反向传播(Backpropagation) 反向传播是神经网络的核心算法之一,用于通过误差反传调整网络参数,从而最小化损失函数。它是一种基于链式法则的高效梯度计算方法,是训练神经网络的关键步骤。 1. 反向传播的基本步骤 1.1 前向传播 在前向传播过程中,输入数据从输入层经过隐藏…

【Azure Redis】部署在AKS中的应用,连接Redis高频率出现timeout问题

查看Redis状态,没有任何异常,服务没有更新,Service Load, CPU, Memory, Connect等指标均正常。在排除Redis端问题后,转向了AKS中。开始调查AKS的网络状态。最终发现每次Redis客户端出现超时问题时,几乎都对应了AKS NAT Gateway的更新事件,而Redis服务端没有任何异常。…

20222402 2024-2025-1 《网络与系统攻防技术》实验六实验报告

1.实验内容 1.1本周学习内容 常见的网络安全协议包括SSL/TLS等。 网络安全协议攻击手段 DNS欺骗攻击:攻击者冒充域名服务器,将查询的IP地址设为攻击者的IP地址,从而诱骗用户访问恶意网站或下载恶意软件。 ARP欺骗攻击:分为对路由器ARP表的欺骗和对内网PC的网关欺骗,通过截…

谈一类计数DP——DP套DP

谈一类计数dp——dp套dp 一、dp套dp的定义 dp套dp就是一种将dp的值存入另一个dp的状态,而外层另作一个dp去取得记录这种状态的方案数。 二、dp套dp的搜索表征 对于一般的计数dp而言,其搜索形如: void DFS(int x){if(x==n+1)return void(ans+=Check());for(int i=1;i<=m;i…

AI翻唱神器,一键用你喜欢的歌手翻唱他人的曲目(附下载链接)

最近,“AI孙燕姿”翻唱众多明星的歌曲在各大网络平台上走红,其作品不仅累积上千万的播放量,在科技圈和音乐圈也都引发了热议,歌手孙燕姿在社交平台发文回应称:人类无法超越AI技术已指日可待,凡事皆有可能,凡事皆无所谓。伴随歌迷的呼声,“AI周杰伦”“AI陈奕迅”等一众…

SPI总线学习笔记

1、SPI的定义以及特点 SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一种同步串行接口技术,是一种高速的,全双工,同步的通信总线。 1):高速、同步、全双工、非差分、总线式 2):主从机通信模式 通信简单,速率快 2、通信协议介绍 SPI具…

实验五 信息搜集技术实践

一.实验内容 对网站进行 DNS 域名查询,包括注册人、IP 地址等信息,还通过相关命令查询 IP 地址注册人及地理位置。 尝试获取 QQ 好友 IP 地址并查询其地理位置。 使用 nmap 对靶机环境扫描,获取靶机 IP 活跃状态、开放端口、操作系统版本、安装服务等信息。 使用 Nessus 对靶…

20222409 2024-2025-1 《网络与系统攻防技术》实验六实验报告

1.实验内容 1.1 本周学习内容学习了Metasploit渗透测试框架的使用方法,重点掌握了从搜索模块到执行攻击的完整流程。在实验中熟悉了标准操作步骤,如搜索模块、加载模块、设置参数和运行攻击。 实验中实践了下列典型漏洞:Vsftpd后门漏洞、Samba命令注入漏洞、Java RMI命令执行…

基于Atheros-CSI-tool的CSI采集软硬件环境

软硬件环境搭建 基于Atheros csi tool的采集环境搭建 硬件设备 信号发生和采集设备:TP-Link WDR4310v1/TP-Link WDR4900v2 控制主机 交换机 拓扑结构软件环境[!NOTE] 官方安装文档 官方固件 官方openwrt源码操作系统 在终端刷上openwrt固件openwrt-ar71xx-generic-tl-wdr4300-…