zoukankan      html  css  js  c++  java
  • 哈希长度扩展攻击

    说实话,哈希长度拓展攻击的原理初学者需要下点功夫理解

    md5长度拓展攻击

    这也是学校入门赛的一道题目,然后才去了解了一下哈希长度拓展攻击,因为拓展攻击适用情况,所以最常见md5,sha1加密
    学校的这道题目是关于md5的,而能够实现这种攻击是需要前提条件的
    hash=md5(密文)-->forge_hash=(密文+可利用信息)
    知道密文MD5和长度

    md5算法

    对一个字符串md5,首先要进行补位,即他要满足len(字符串二进制) % 512 == 448,或者说是他二进制长度为512的倍数减64
    然后要进行补长度,就是他自身长度字节转到bit再转到16进制+若干000直到补长度达到64位
    这个时候就能512位进行分组,计算过程是512位进行一次运算,也就是如果消息长度小于512就只需要计算一次,大于512小于1024是计算两次,以此类推。
    计算消息摘要必须用补位已经补长度完成之后的消息来进行运算,具体过程,很复杂。。。。下面是重点!
    经过一次消息摘要后,上面的链变量将会被新的值覆盖,而最后一轮产生的链变量经过高低位互换(如:123456-> 654321)后就是我们计算出来的md5值

    对md5实现过程

    下面是这道题目的主要代码

    if(stripos($role,"admin")!==false&&$hsh===md5($salt.$_COOKIE["role"])
    $hsh=$_COOKIE["hsh"];$role=$_COOKIE["role"];
    {if(isset($_COOKIE["role"]))
    $salt="xxxxxxxxxxxxx";//len:13
    $role="guest";
    $auth=false;
    

    hash

    看到代码我们可以知道三点,role,secret长度(密文长度),hash
    接下来我们进行哈希长度扩展攻击
    首先我们可以按照md5算法来手工完成,就是补位->补长度->计算他的链变量(网上有计算代码)->高低位互换

    PS:不大于512,计算一次,大于512位,先补全为1024位,类推

    另一种方法是使用工具,,,我还是喜欢这一种!。。。。Hashpump

    linux下的安装:

    	git clone https://github.com/bwall/HashPump
    	apt-get install g++ libssl-dev
    	cd HashPump
    	make
    	make install
    

    然后在linux执行hashpump -s c70ab9d039f166c5b5f506a5698ebaa1 -d guest -k 13 -a admin

    Hashpump

    然后把hash放到hsh,role取下面那一串串,你就绕过变成了admin。

    sha1长度拓展攻击

    sha1算法

    引用freebuf的一段话:

    首先,当hash函数拿到需要被hash的字符串后,先将其字节长度整除64,取得余数。如果该余数正好等于56,那么就在该字符串最后添加上8个字节的长度描述符(具体用bit表示)

    如果不等于56,就先对字符串进行长度填充,填充时第一个字节为hex(80),其他字节均用hex(00)填充

    填充至余数为56后,同样增加8个字节的长度描述符(该长度描述符为需要被hash的字符串的长度,不是填充之后整个字符串的长度)。以上过程,称之为补位。

    说白了其实这个sha1和md5是类似的,只是稍有不同!(len(字符串二进制) % 64 == 56)

    结尾

    这个过程理解起来,感觉的确是一时间可能不能完全理解,不过明白之后可能感觉也很简单了
    不过,至于我,还是没完全理解,似懂非懂吧。

  • 相关阅读:
    [转]oracle in 多个字段
    [转][MVC4]ASP.NET MVC4+EF5(Lambda/Linq)读取数据
    SQL Server “复制”表结构,创建_Log表及触发器
    [转]WordPress主题开发:主题初始化
    struts2请求过程源码分析
    java调优
    websocket之四:WebSocket 的鉴权授权方案
    高可用性及容灾的几个衡量指标
    Struts2返回JSON对象的方法总结
    java websocket @ServerEndpoint注解说明
  • 原文地址:https://www.cnblogs.com/bay1/p/10982437.html
Copyright © 2011-2022 走看看