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 "\n";
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=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中就可以了

hash扩展攻击本地实验的更多相关文章
- hash长度扩展攻击
这里面就放一张百度百科的解释吧,emmm 反正我是看不懂还是做一下题来巩固一下吧 CTF中的hash长度攻击 进入网页你会发现页面显示  我这里没有看到什么可以利用的,抓了一下包也没有什么有可以利 ...
- 实验吧——让我进去(hash长度扩展攻击)
题目地址:http://ctf5.shiyanbar.com/web/kzhan.php 在页面源码没发现什么,于是用burp进行抓包重放 看到有setcookie,于是重新刷新页面拦截数据包(这次才 ...
- MD5的Hash长度扩展攻击
Hash长度扩展攻击 引子 无意中碰到一道题,大概代码是这样的 $flag = "XXXXXXXXXXXXXXXXXXXXXXX"; $secret = "XXXXXXX ...
- 哈希长度扩展攻击(Hash Length Extension Attack)利用工具hexpand安装使用方法
去年我写了一篇哈希长度扩展攻击的简介以及HashPump安装使用方法,本来已经足够了,但HashPump还不是很完善的哈希长度扩展攻击,HashPump在使用的时候必须提供original_data, ...
- 哈希长度扩展攻击的简介以及HashPump安装使用方法
哈希长度扩展攻击(hash length extension attacks)是指针对某些允许包含额外信息的加密散列函数的攻击手段.该攻击适用于在消息与密钥的长度已知的情形下,所有采取了 H(密钥 ∥ ...
- Md5扩展攻击的原理和应用
*本文原创作者:Guilty and Innocent,本文属FreeBuf原创奖励计划,未经许可禁止转载 做CTF题目的过程中遇到了md5扩展攻击,参考了几篇文章,感觉写的都有些小缺陷,再发一篇文章 ...
- hash扩展长度攻击及hashdump使用
摘自: 1.http://www.freebuf.com/articles/web/69264.html 2.https://www.cnblogs.com/pcat/p/5478509.html 0 ...
- session安全&&CBC字符反转攻击&&hash拓展攻击
session安全 p神写的: 在传统PHP开发中,$_SESSION变量的内容默认会被保存在服务端的一个文件中,通过一个叫"PHPSESSID"的Cookie来区分用户.这类se ...
- XML 实体扩展攻击
XMl Entity Expansion(攻击)某种程度上类似于 XML Entity Expansion,但是它主要试图通过消耗目标程序的服务器环境来进行DOS攻击的.这种攻击基于XML Entit ...
随机推荐
- 怎样检查fragmentation
可以运行下面SQL语句: SELECT dbschemas.[name] AS 'Schema', dbtables.[name] AS 'Table', dbindexes.[name] AS 'I ...
- vs2015+opencv3.3.1 +Eigen 3.3.4 c++实现 薄膜插值 泊松图像编辑(v=0||Δf=0)
#include "core/core.hpp" #include "highgui/highgui.hpp" #include "imgproc/i ...
- f(!gotop.length) return false;
if (!$("p").length) return; if语句接收一个布尔值,如果布尔值为true则执行接下来的语句,布尔值为false则执行else关键词后的语句. JavaS ...
- Django 实现网站注册用户邮箱验证功能
我们在很多网站上都可以看到用户注册使用电子邮件激活或启用的方式.也就是说,用户在注册后填写正确的电子邮件地址,接着网站会发送一封启用电子邮件到用户设置的电子邮件的邮箱中,并在邮件中提供一个激活或启用的 ...
- logback&slf4j学习笔记
1.Slf4j 1.1.Slf4j简介 SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统.实际上,SLF ...
- resultType和resultMap的区别
1.resultType和resultMap的区别 1>resultType 返回的结果类型 2>resultMap 描述如何将结果集映射到Java对象 2.resultMap节点 1&g ...
- C语言数据结构-链式队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作
1.数据结构-链式队列的实现-C语言 typedef struct QNode { int data; struct QNode *next; }QNode,*QueuePtr; typedef st ...
- Wiki凭什么持续得到开发人员和团队的喜爱
大家好,我是华为云DevCloud项目管理服务的产品经理恒少,作为布道师和产品经理,出差各地接触客户是常态,线下和华为云的客户交流.布道.技术沙龙. 但是线下交流,覆盖的用户总还是少数.我希望借助线上 ...
- FJOI2019划水记
Day 0 和 $crk$ 神仙颓废 $crk$ 雀魂一位率 $40%$ $orz$,不知道的人怕不是以为开小号 晚上想早点睡觉,从 9 点躺到 12 点才睡着 Day 1 反正划水,心态良好,全写暴 ...
- UVALive - 2678 二分/尺取
题意:求最小的长度L满足该长度上的元素和大于等于S 最近dp做多了总有一种能用dp解决一切的错觉 二分长度解决 #include<iostream> #include<algorit ...