博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hash扩展攻击本地实验
阅读量:4544 次
发布时间:2019-06-08

本文共 1930 字,大约阅读时间需要 6 分钟。

   记录一下自己对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值

"; echo md5($SECRET . $_COOKIE["auth"]); echo "
"; die("error"); } else{ echo "success"; } }else { echo "hsh:".md5($SECRET . urldecode($_COOKIE["auth"]))."
"; echo "input auth and hsh";}?>

 

 

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

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

hsh=e9ce9ebaab0a671ec8edddda705a7dae

payload=wfz\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x008\x00\x00\x00\x00\x00\x00\x00hacker

 

因为源码是经过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中就可以了

 

 

 

 

  

转载于:https://www.cnblogs.com/wfzWebSecuity/p/9410414.html

你可能感兴趣的文章
windows 控制台下运行cl命令
查看>>
(七十八)使用第三方框架INTULocationManager实现定位
查看>>
LeetCode问题:搜索插入位置
查看>>
JVM基础学习之基本概念、可见性与同步
查看>>
UML入门
查看>>
CodeForces - 524F And Yet Another Bracket Sequence
查看>>
python学习笔记-day10-2【多进程,多线程】
查看>>
MySQL安装后的初始优化
查看>>
PHP记录商品历史纪录
查看>>
类型转换 盲区
查看>>
Android Studio does not point to a valid jvm
查看>>
第5月第13天 node cnpm安装 babel
查看>>
QTC++监控USB插拔
查看>>
Java生成javadoc
查看>>
ZedGraph控件的使用--属性和例子代码
查看>>
文件管理
查看>>
webpack
查看>>
Atitit.swift 的新特性 以及与java的对比 改进方向attilax 总结
查看>>
Atitit 图像处理 平滑 也称 模糊, 归一化块滤波、高斯滤波、中值滤波、双边滤波)...
查看>>
Android Camera——拍照(转自http://vaero.blog.51cto.com/4350852/779942)
查看>>