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

         哈希长度拓展攻击:哈希长度扩展攻击(hash lengthextensionattacks)是指针对某些允许包含额外信息的加密散列函数的攻击手段。次攻击适用于MD5和SHA-1等基于Merkle–Damgård构造的算法

    哈希即为散列值,其中有MD5,SHA256,等算法。以MD5为例

        MD5加密:

    MD5加密过程中512比特为一组,属于分组加密,而且在运算的过程中,将512比特分为32bit*16块,分块运算

     

    关键利用的是MD5的填充,对加密的字符串进行填充,使之补到448模512同余,即长度为512的倍数减64,最后的64位在补充为原来字符串的长度,这样刚好补满512位的倍数,如果当前明文正好是512bit倍数则再加上一个512bit的一组。

    去学习了一波MD5加密原理。大概的过程:

    例如字符串"abcde" 对应的16进制编码为0x6162636465 令str=0x6162636465,现在要进行填充补位 使得length(str) % 512 = =418 补位的方式通常为二进制情况下后面添加1个1 然后后面跟多个0 直到满足等式,最后字符为。

    0x6162636465000000000000000
    0000000000000000000000000000
    0000000000000000000000000000
    0000000000000000000000000000
    002800000000000000

    以十六进制表示一共是128个字符,十六进制每个字符能够转换成4位二进制,128*4=512这就是一组,正好是512bit。

    MD5拓展攻击:

     网上随便找到了一张图可以大概解释一下MD5拓展过程

    例如我们现在选定一个字符串 ”hsyhsy“ MD5("hsyhsy")=9468E3A2F1D1CF8D

    现在不需要知道具体的字符串是什么,只需要直到长度即可,填充新的字符串:zygzyg,之前得到的“hsyhsy”MD5值作为最后一块加密的初始向量,最后得到的结果和MD5("hsyhsy+zygzyg")是相同的。

    实验吧中的一道题可以作为参考:

    抓包后

    source值改为1

    查看源码:

    <pre>
    $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.
    ";
                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.");
        }
    }
    
    

     主要源码在这里:

    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.
    ";

    在抓包的时候已经给出了sample-hash值

    代码中提示secret是一个长度为15的字符,这里利用hashpump得出新字符串

    最终将将签名getmein为新增加的值,随后添加password为下面的值,post一下就的到了答案。

  • 相关阅读:
    NSString的几种常用方法
    ios页面间传递参数四种方式
    ios category类别的使用
    iOS: 枚举类型 enum,NS_ENUM,NS_OPTIONS
    IOS导航栏的使用方法
    报错:Expected one result (or null) to be returned by selectOne(), but found: 6
    Spring小知识
    spring动态代理
    登录和注册功能思路
    sql语句实例练习
  • 原文地址:https://www.cnblogs.com/sylover/p/10883445.html
Copyright © 2011-2022 走看看