md5拓展攻击

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的长度,也能进行拓展攻击

posted @ 2024-09-10 17:08  eth258  阅读(57)  评论(0编辑  收藏  举报