hash扩展攻击本地实验

Posted wfzwebsecuity

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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中就可以了

技术分享图片

 

 

 

 

  


以上是关于hash扩展攻击本地实验的主要内容,如果未能解决你的问题,请参考以下文章

区块链技术md5 扩展长度攻击

hash长度扩展攻击

哈希长度扩展攻击(Hash Length Extension Attack)利用工具hexpand安装使用方法

从零学习哈希长度扩展攻击

20165318 缓冲区溢出漏洞实验

《网络攻防第十周作业》