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

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

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

  上端代码中密钥存储在服务器端,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值。

  比如原始数据为

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

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

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

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

  比如

  1. $append = "hacker"

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

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

  就能得到一串hash值

  1. <html>
  2. <form>
  3.  
  4. <form>
  5. </html>
  6. <?php
  7. error_reporting(0);
  8. $SECRET = "flag";
  9. if (isset($_COOKIE["auth"]) && isset($_COOKIE["hsh"])) {
  10. $hsh = $_COOKIE["hsh"];
  11. echo $hsh;
  12. echo "\n";
  13. echo md5($SECRET . urldecode($_COOKIE["auth"]));
  14. if ($hsh !== md5($SECRET . urldecode($_COOKIE["auth"]))) {
  15. echo md5($SECRET . urldecode($_COOKIE["auth"]));
  16. echo "</br>";
  17. echo md5($SECRET . $_COOKIE["auth"]);
  18. echo "</br>";
  19. die("error");
  20.  
  21. }
  22. else{
  23. echo "success";
  24. }
  25.  
  26. }
  27. else {
  28. echo "hsh:".md5($SECRET . urldecode($_COOKIE["auth"]))."</br>";
  29. echo "input auth and hsh";
  30. }
  31.  
  32. ?>

本地测试如上,为了方便,改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中就可以了

  1.   

hash扩展攻击本地实验的更多相关文章

  1. hash长度扩展攻击

    这里面就放一张百度百科的解释吧,emmm 反正我是看不懂还是做一下题来巩固一下吧 CTF中的hash长度攻击 进入网页你会发现页面显示  我这里没有看到什么可以利用的,抓了一下包也没有什么有可以利 ...

  2. 实验吧——让我进去(hash长度扩展攻击)

    题目地址:http://ctf5.shiyanbar.com/web/kzhan.php 在页面源码没发现什么,于是用burp进行抓包重放 看到有setcookie,于是重新刷新页面拦截数据包(这次才 ...

  3. MD5的Hash长度扩展攻击

    Hash长度扩展攻击 引子 无意中碰到一道题,大概代码是这样的 $flag = "XXXXXXXXXXXXXXXXXXXXXXX"; $secret = "XXXXXXX ...

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

    去年我写了一篇哈希长度扩展攻击的简介以及HashPump安装使用方法,本来已经足够了,但HashPump还不是很完善的哈希长度扩展攻击,HashPump在使用的时候必须提供original_data, ...

  5. 哈希长度扩展攻击的简介以及HashPump安装使用方法

    哈希长度扩展攻击(hash length extension attacks)是指针对某些允许包含额外信息的加密散列函数的攻击手段.该攻击适用于在消息与密钥的长度已知的情形下,所有采取了 H(密钥 ∥ ...

  6. Md5扩展攻击的原理和应用

    *本文原创作者:Guilty and Innocent,本文属FreeBuf原创奖励计划,未经许可禁止转载 做CTF题目的过程中遇到了md5扩展攻击,参考了几篇文章,感觉写的都有些小缺陷,再发一篇文章 ...

  7. hash扩展长度攻击及hashdump使用

    摘自: 1.http://www.freebuf.com/articles/web/69264.html 2.https://www.cnblogs.com/pcat/p/5478509.html 0 ...

  8. session安全&&CBC字符反转攻击&&hash拓展攻击

    session安全 p神写的: 在传统PHP开发中,$_SESSION变量的内容默认会被保存在服务端的一个文件中,通过一个叫"PHPSESSID"的Cookie来区分用户.这类se ...

  9. XML 实体扩展攻击

    XMl Entity Expansion(攻击)某种程度上类似于 XML Entity Expansion,但是它主要试图通过消耗目标程序的服务器环境来进行DOS攻击的.这种攻击基于XML Entit ...

随机推荐

  1. Android 监听事件

    安卓中监听事件的三种实现方式 1.匿名内部类的实现方式 2.独立类的实现方式 3.实现接口方式实现 一.匿名内部类的实现 1.首先声明一个Button //声明一个Button private But ...

  2. 以太坊系列之二: 单调时间monotime-以太坊源码学习

    在程序中需要测量时间时最好使用monotime.Now()而不是time.Now(),相比之下前者更准确. 来个示例: func main() { var start, elapsed time.Du ...

  3. php代码审计5审计命令执行漏洞

    命令执行漏洞:通过易受攻击的应用程序在主机操作系统上执行任意命令,用户提供的数据(表单,cookie,http头等)未过滤 挖掘思路:用户能够控制函数输入,存在可执行代码的危险函数 命令执行和代码执行 ...

  4. CentOS7.3托管磁盘虚拟机扩容数据磁盘

    随着托管磁盘的上线,虚拟机支持的单块磁盘容量从1TB到达了4TB,客户对单块磁盘容量的需求量也会变的很大. 操作之前需要重点查看: 由于扩容磁盘的操作非同小可,一旦哪一步出现问题,就会导致分区损坏,数 ...

  5. JDBC_时间处理_Date_Time_Timestamp区别_随机日期生成

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement;import ...

  6. go的三个常用命令go run go build go install

    go的三个常用命令 go run go build go install 命令源码文件:含有 main函数 的文件 库源码文件:不包含 main函数 的文件, 主要用于编译成静态文件.a供其他包调用 ...

  7. c#几种数据库的大数据批量插入(SqlServer、Oracle、SQLite和MySql)

    这篇文章主要介绍了c#几种数据库的大数据批量插入(SqlServer.Oracle.SQLite和MySql),需要的朋友可以了解一下. 在之前只知道SqlServer支持数据批量插入,殊不知道Ora ...

  8. js 三大家族之offset

    JS中的offset家族: 一.offsetWidth与offsetHeight: 获取的是元素的实际宽高 = width + border + padding 注意点: 1.可以获取行内及内嵌的宽高 ...

  9. JDK 5 ~ 10 新特性倾情整理!

    JDK 5 ~ 10 新特性倾情整理! 最近连 JDK11都在准备发布的路上了,大家都整明白了吗?也许现在大部分人还在用6-8,8的新特性都没用熟,9刚出不久,10-11就不用说了. 为了大家对JDK ...

  10. Android 多个界面(Activity)

    1.介绍 2.相关属性 (1)启动Activity (2)Intent介绍 (3)关闭Activity 3.多个页面之间传递数据(页面1向页面2传递数据,单向传递数据) (1)相关属性 注意:data ...