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 ...
随机推荐
- angular 基本依赖注入
import { Injectable } from '@angular/core'; @Injectable() export class ProductServiceService { const ...
- kali linux之端口扫描
端口对应网络服务及应用端程序,服务端程序的漏洞通过端口攻入 发现开放的端口,有更具体的攻击面 nmap hping3 scapy都可以 nmap隐蔽扫描 扫描抓包 nmap僵尸扫描 先发现僵尸机,僵尸 ...
- SpringMVC返回JSON数据
1.导入json的jar包2.在Controller类中添加 //查看用户信息 ?json //params="json"的意思是访问view这个方法的时候,必须有一个参数json ...
- 老男孩Day15作业:商城列表页面(静态)
一. 一.作业需求: 1.完成商城列表静态页面的抒写 二.博客地址:https://www.cnblogs.com/catepython/p/9205636.html 三.运行环境 操作系统:Win1 ...
- postgreSQL PL/SQL编程学习笔记(二)
Control Structures of PL/SQL Control structures are probably the most useful (and important) part of ...
- SDUT OJ 数据结构实验之图论四:迷宫探索
数据结构实验之图论四:迷宫探索 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descrip ...
- ubuntu 上安装支付宝安全插件不能运行问题
1.在ubuntu的firefox浏览器中打开支付宝首页,不能登录,按照提示下载插件 aliedit.tar.gz 2.解压到某个文件夹下,有文件aliedit.sh, 运行 # sh aliedit ...
- C++_异常2-返回错误码
一种比异常终止更灵活的办法是,使用函数的返回值来指出问题. 例如,ostream类的get(void)成员通常返回下一个输入字符的ASCII码,但到达文件尾时,将返回EOF. 对hmean()来说,这 ...
- Luogu P1801 黑匣子_NOI导刊2010提高(06)
P1801 黑匣子_NOI导刊2010提高(06) 题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个 ...
- SGU - 507 启发式合并维护平衡树信息
题意:给定一颗树,每个叶子节点\(u\)都有权值\(val[u]\),求每个非叶子节点子树的最小叶子距离,若该子树只有一个叶子节点,输出INF 貌似本来是一道树分治(并不会)的题目,然而可以利用平衡树 ...