ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

hash长度扩展攻击

2022-01-31 13:32:53  阅读:360  来源: 互联网

标签:username 加密 hash 00% 扩展 算法 长度 md5


哈希(hash)长度扩展攻击

看了网上许多哈希长度扩展攻击的文章,我比较笨,所以看了一个晚上,结合网上好多篇文章最终才看懂。于是,在这里做一个关于哈希长度扩展攻击的总结。

MD5算法

首先先放一张md5算法加密的过程图。

补位

展开哈希扩展攻击的关键 !!!
在md5算法中,首先对数据进行首先需要对信息进行填充,使其位长对512求余的结果等于448。因此,信息的位长(Bits Length)将被扩展至N*512+448,N为一个非负整数,N可以是零。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后,在这个结果后面附加一个以64位二进制表示的填充前信息长度。

计算

经过这两步的处理,信息的位长=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。每次的运算都由前一轮的128位结果值和第i块512bit值进行运算。初始的128位值为初试链接变量,由第一次获得的哈希值挨个字节逆序填入。
算法的具体细节不在此一一赘述。

MD5算法机制的利用

这里用江科大2020新生赛的某道题来举例

我们已知$this->sess=md5($this->token.$this->username),所以$sess为20个未知字符与‘admin’组成的字符串的md5值。这里先用?来代替未知字符。查看初始cookie可知的md5值为``。这道题目,或者说这种题目的关键就是充分利用已知的md5值。

``username=``_COOKIE[‘username’];
``sess=``_COOKIE[‘session’];

由上面两行代码可知username`与sess通过修改cookie来赋值。因为```this->token为未知量,所以我们即使修改了```username的值,也无法获得与之对应的md5值。所以这里我们就需要利用md5算法分组运算的机制。‘????????????????????admin’`的md5值既然是已知的,那我们就把它作为第一段(512bit)的加密内容,这样我们就可以以它的md5值来求得用于第二段加密运算的初始序列。然后我们会发现要是能把字符串扩展到512bit以上,并保证第一段的md5算法运算结果不改变,那么我们在不知道第一段的加密内容的情况下仍然能够求得整体的md5值。

所以我们首先要做的就是模仿md5算法的补位方式来进行补位。这里以16进制来举例

根据最开始的算法图,在加密内容的后方加100000直到448位,剩下64位储存数据长度信息。即16进制中在数据后方加%80%00%00直到剩下最后8个字节表示长度及上图中的%C8%00%00%00%00%00%00%00。至此,第一段内容补位完成,第一段加密后的md5即为初始的$sess的值。然后将ae8b63d93b14eadd1adb347c9e26595a分成8字节唯一组的四组,ae8b63d9,3b14eadd,1adb347c,9e26595a。然后对他们进行小段排序,得到第二段的初始序列。

A=0xd9638bae
B=0xddea143b
C=0x7c34db1a
D=0x5a59269e

之后在字符串上加上第二段的内容,内容随意。

????????????????????admin%80%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%00Hacker

将我们求出来的ABCD序列作为初始序列,对Hacker这个字符串进行md5加密。
得到md5值:

bdbe1c6fb9d921e4ba3d9d4072b702f7

修改cookie:

username=admin%80%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%00%00Hacker
session=bdbe1c6fb9d921e4ba3d9d4072b702f7

complated。

标签:username,加密,hash,00%,扩展,算法,长度,md5
来源: https://www.cnblogs.com/dre0m1/p/15858202.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有