md5拓展攻击
【工具】hash-ext-attack/img/img_1.png at master · shellfeel/hash-ext-attack · GitHub
【攻击方法例题】https://ctf.org.cn/2019/11/19/哈希长度扩展攻击以及HashPump安装使用和两道题目/
实际中的利用条件如下:
-
基于哈希的消息认证码 (MAC):
- 长度扩展攻击的关键条件之一是在消息认证码 (MAC) 中使用单纯的哈希函数,例如
MD5(secret + message)
。在这种情况下,如果攻击者可以获得已知消息和对应的 MAC 值,并且知道消息中某些部分的内容,那么他们就可以通过长度扩展攻击构造新的有效 MAC,而不需要知道原始密钥。
- 长度扩展攻击的关键条件之一是在消息认证码 (MAC) 中使用单纯的哈希函数,例如
-
攻击的前提:
- 攻击者需要知道部分消息以及对应的哈希值(通常是消息加密哈希值或者 MAC 值)。
- 攻击者能够对已知消息进行长度扩展,并计算出新的有效哈希值或者 MAC。
-
攻击原理:
-
在 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
就行了
但是题目是限制了不许pwd
为admin
【原题目】[[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
成功执行
总结
拓展攻击只知道salt的md5值,salt的长度,也能进行拓展攻击