0

0

一种高级的DoS攻击-Hash碰撞攻击

怪我咯

怪我咯

发布时间:2017-06-23 12:01:24

|

2466人浏览过

|

来源于php中文网

原创

原文链接

这是迄今为止第一个让我觉得后怕的攻击方式,涉及的范围广难以防御,攻击效果立竿见影。大量的网站和Web接口都未做Hash碰撞攻击的防御,一拿一个准。

随着RESTful风格的接口普及,程序员默认都会使用json作为数据传递的方式。json格式的数据冗余少,兼容性高,从提出到现在已被广泛的使用,可以说成为了Web的一种标准。无论我们服务端使用什么语言,我们拿到json格式的数据之后都需要做jsonDecode(),将json串转换为json对象,而对象默认会存储于Hash Table,而Hash Table很容易被碰撞攻击。我只要将攻击数据放在json中,服务端程序在做jsonDecode()时必定中招,中招后CPU会立刻飙升至100%。16核的CPU,16个请求就能达到DoS的目的。

所有测试程序都在Mac Pro下进行,为了测试方便我只构造了65536条json键值对,真正发起攻击时可以构造数十万甚至百万千万的数据。

几个简单的Demo

攻击数据我已经转换为json格式

  1. Hash攻击json数据

  2. 普通json数据

  3. Java版本Hash攻击数据

一. JavaScript测试

//只需要一行代码就能看到效果var jsonSrc = '这里输入json数据';

我们只需要在js中输入一行代码就能看到效果,普通数据和Hash攻击数据都是65536行键值对。我本地测试的效果如下:
通过Chrome自带的任务管理器可以看出CPU马上升到100%,将近1分钟才执行完成,而普通的数据几毫秒就能执行完成;

二. PHP测试

$json = file_get_contents("https://raw.githubusercontent.com/laynefyc/php_thread_demo/master/hashNomal.json");
$startTime = microtime(true);
$arr = json_decode($json,true);
$endTime = microtime(true);
echo "Nomal:".($endTime - $startTime)."\r\n";
$json = file_get_contents("https://raw.githubusercontent.com/laynefyc/php_thread_demo/master/hash.json");
$startTime = microtime(true);
$arr = json_decode($json,true);
$endTime = microtime(true);
echo "Attack:".($endTime - $startTime)."\r\n";

PHP中我们通过file_get_contents远程去拿数据,运行对比一下时间,相差10多秒,php-fpm单进程占用CPU 100%。

紫东太初
紫东太初

中科院和武汉AI研究院推出的新一代大模型

下载

三. Java测试

public String index(){String jsonStr = "";try
    {
        FileReader fr = new FileReader("t.log");//需要读取的文件路径BufferedReader br = new BufferedReader(fr);
        jsonStr = br.readLine();
        br.close();
        fr.close();     //关闭文件流
    }catch(IOException e)
    {
        System.out.println("指定文件不存在");//处理异常
    }

    Map<String, Object> map = new HashMap<String, Object>();map = JSONObject.fromObject(jsonStr);return "Hash Collision ~";
}

Java中我们通过读文件的方式做测试,Java的Hash算法与PHP和JavaScript有略微的差别,但是大同小异,我们同样构造了6万行简单的数据。Spring boot框架中浏览器发起一次访问,26秒之后才返回结果,期间CPU被打满。

四. 其他语言还在研究中……

HashTable是很通用的数据结构,数据结构与算法上专门有一节课来说它,所以Hash Collision是普遍存在的,各语言在实现上只是散列算法和Table存储上有细微差别。

为了验证Java的Hash碰撞攻击也生效,我整个端午假期都在看Java HashTable相关的文章,经过努力最后还是成功的生成了攻击数据。过程非常不简单,这也验证了一个思想--所有高个上的东西最后分解出来都是基础的数据结构知识。

如何攻击

几年前PHP的版本还是5.2,我们可以把所有的Hash Key都放在POST请求的Body中,比如:

Post Data: k1=0&k2=0&k3=0...k999998=0&k999999=0

服务端拿到数据后会将所有参数存储到Hash Table($_POST)中,通过这种方式能很方便的实现攻击。但是现在这种方式行不通了,因为我们很容易就能在Nginx层和PHP层限制Http请求的参数个数和大小。PHP默认只允许1000个参数,这个量级对服务器完全没影响。

现在是2017年,json格式和RESTful风格的接口已经非常流行。带给我们便捷编码的同时,也给Hash Collision Dos提供了新的方式。现在很多RESTful风格的接口如下:

Data: {"action":"create-account","data":""}

如上接口,我们直接把攻击的数据放入data参数中,服务端接收到数据后肯定会做jsonDecode(),很方便的就达到了攻击的目的。

如何防御

要想防御Hash Collision Dos攻击,行业内已经有很多成熟的方案了,不过都是建议换语言或者重写HashTable。这里只说当前json格式解析的问题。首先我们需要增加权限验证,最大可能的在jsonDecode()之前把非法用户拒绝。其次在jsonDecode()之前做数据大小与参数白名单验证。旧项目的改造与维护成本如果很高,建议自己重写jsonDecode()方法

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

616

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

194

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

91

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

20

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

54

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

29

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

15

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

598

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

56

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
深入剖析redis教程
深入剖析redis教程

共55课时 | 8.2万人学习

麦子学院深入浅出 redis 视频教程
麦子学院深入浅出 redis 视频教程

共20课时 | 4.5万人学习

传智播客redis基础视频教程
传智播客redis基础视频教程

共13课时 | 5.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号