• hash扩展攻击本地实验


       记录一下自己对hash扩展攻击的一些理解,hash扩展攻击主要应用于身份认证,比如对于成功登录的用户可以赋予其一个采用hsah算法加密的cookie值,其中含有未知的密钥。

       此后每次在服务器端验证此cookie中的凭证是否正确

        if ($hsh !== md5($SECRET . $_COOKIE["auth"])) {
            die("error");
        }

      上端代码中密钥存储在服务器端,auth在客户端存储,hsh为登陆成功的用户所拥有,那么作为攻击者,我们已知hash后的密文,如果直到密钥长度,就可以再次构造hash值使等式

      成立。hash扩展攻击适用于md5,sha1,其原理http://blog.chinaunix.net/uid-27070210-id-3255947.html,这篇文章可以看看,主要知道以下几点:

      1.对于hash的消息要进行补位到mod 512 余 448bit,按64字节分组

      2.下一组明文的摘要的初始iv需要用到上一组明文的摘要值

      所有我们在已知一组hash值的情况下,只需要对原始明文进行扩充就可以了在不知道密钥的情况下得到另一个合法hash值。

      比如原始数据为

      $_COOKIE["auth"]=“wfz”;
      $secret = "flag"
      $hsh = md5("flag"."wfz")

      此时作为攻击者,我们有了hsh值,假设已知密钥的长度,就可以对原始消息进行填充

    $new_msg = "xxxx"."wfz".padding

      此时$new_msg已经满足64字节,然后我们就可以在$new_msg后面填充上想要添加的任何值

      比如

    $append = "hacker"

      然后就得到了payload = “wfz”.padding."hacker"

      接着只需要将之前已经得到的$hsh的值作为新的md5摘要运算的初始iv,并且对新添加的值$append = "hacker"进行加密

      就能得到一串hash值

    <html>
    <form>
    
    <form>
    </html>
    <?php
    error_reporting(0);
    $SECRET = "flag";
    if (isset($_COOKIE["auth"]) && isset($_COOKIE["hsh"])) {
        $hsh = $_COOKIE["hsh"];
        echo $hsh;
        echo "
    ";
        echo md5($SECRET . urldecode($_COOKIE["auth"]));
        if ($hsh !== md5($SECRET . urldecode($_COOKIE["auth"]))) {
            echo md5($SECRET . urldecode($_COOKIE["auth"]));
            echo "</br>";
            echo md5($SECRET . $_COOKIE["auth"]);
            echo "</br>";
            die("error");
                
        }
        else{
            echo "success";
        }
     
    }
    else {
        echo "hsh:".md5($SECRET . urldecode($_COOKIE["auth"]))."</br>";
        echo "input auth and hsh";
    }
    
    ?>

    本地测试如上,为了方便,改cookie用get,都是一样的原理,此时有了hsh:34503d694103892c2f8b709f8440ab5b

    然后利用hashpump,构造新的hash值

    hsh=e9ce9ebaab0a671ec8edddda705a7dae

    payload=wfzx80x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x008x00x00x00x00x00x00x00hacker

     

    因为源码是经过urldecode,所以这里将payload经过urlencode函数编码一次,这里要用php的urlencode函数编码,不要用在线的url编码或burp中的url编码,编码出来会不一样

    所以最终的payload为auth=wfz%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%00%00%00%008%00%00%00%00%00%00%00hacker;hsh=e9ce9ebaab0a671ec8edddda705a7dae

    放在cookie中就可以了

      
  • 相关阅读:
    结对编程实验(1李晓冬13、张金伟118)
    软件工程网络15个人阅读2(201521123118张金伟)
    软件工程网络15个人作业阅读1(201521123118 张金伟)
    《Java课程设计》
    201521123118《java与程序设计》第14周学习总结
    201521123118《程序与设计》第13周学习总结
    201521123118《程序与设计》第12周学习总结
    网络15软工个人作业5——软件工程总结
    个人作业4——alpha阶段个人总结
    软工网络15个人作业3——案例分析
  • 原文地址:https://www.cnblogs.com/tr1ple/p/9410414.html
Copyright © 2020-2023  润新知