利用Google爬虫DDoS任意网站
作者 Taskiller
提醒:以下内容仅供安全测试及教学参考,禁止任何非法用途
Google的FeedFetcher爬虫会将spreadsheet的=image(“link”)中的任意链接缓存。
例如:
如果我们将=image(“http://example.com/image.jpg”)输入到任意一个Google spreadsheet中,Google就会“派出”FeedFetcher爬虫去抓取这个图片并保存到缓存中以将其显示出来。
但是,我们可以为文件名附加上随机参数,使FeedFetcher多次抓取同一文件。也就是说,如果一个网站有一个10MB的文件,要是将以下列表输入到Google spreadsheet中,那么Google的爬虫就会抓取该文件1000次。
=image("http://targetname/file.pdf?r=0")
=image("http://targetname/file.pdf?r=1")
=image("http://targetname/file.pdf?r=2")
=image("http://targetname/file.pdf?r=3")
...
=image("http://targetname/file.pdf?r=1000")
附加上随机参数后,每个链接都被看作是不同的链接,因此Google爬虫会去抓取多次,使网站产生大量出站流量。所以任何人只需使用浏览器并打开一些标签,就可以向web服务器发动巨大流量HTTP GET洪水攻击。
但是这种攻击使攻击者根本不需要有多大的带宽,只需要将“图像”地址输入进spreadsheet,Google就会从服务器上抓取这个10MB的数据,但是因为地址指向一个PDF文件(非图像文件),攻击者从Google得到的反馈为N/A。很明显这种类型的流量可以被放大多倍,引起的后果很可能是灾难性的。
只需要使用一台笔记本,打开几个web标签页,仅仅拷贝一些指向10MB文件的链接,Google去抓取同一文件的流量就超过了700Mbps。而这种600-700Mbps的抓取流量大概只持续了30-45分钟,我就把服务器关闭了。如果没算错的话,45分钟内大概走了240GB的流量。
我和我的小伙伴被这么高的出站流量惊呆了。如果文件再大一点的话,我想其出站流量可以轻易达到Gpbs级,而且进站流量也能达到50-100Mbps。可以想象如果多个攻击者同时用这种方法攻击某个网站的话,流量能有多少了。同时由于Google用会多个IP地址进行抓取,所以也很难阻止这种类型的GET洪水攻击,而且很容易将攻击持续数个小时,因为这种攻击实在是太容易实施了。
发现这个bug后,我开始搜索由其产生的真实案例,还真发现了两例:
第一起攻击案例解释了博主如何不小心攻击了自己,结果收到了巨款流量账单。另一篇文章《利用Spreadsheet作为DDoS武器》描述了另一个类似攻击,但指出攻击者必须先抓取整个网站并用多个帐户将链接保存在spreadsheet中。
不过奇怪的是没有人尝试用附加随机请求变量的方法。尽管只是目标网站的同一个文件,但通过这种添加随机请求变量的方法是可以对同一文件请求成千上万次的,后果还是挺吓人的,而且实施过程很容易,任何人只需要动动手指头拷贝一些链接就可以做到。
我昨天将这个bug提交给了Google,今天得到了他们的反馈,表示这不属于安全漏洞,认为这是一个暴力拒绝服务攻击,不在bug奖金范围中。
也许他们事前就知道这个问题,并且认为这不是bug?
不过即使拿不到奖金,我仍希望他们会修复这个问题,由于实施门槛低,任何人都可以利用Google爬虫发动这种攻击。有一种简单的修复方法,就是Google只抓取没有请求参数的链接。希望Google早日修复这个bug,使站长免受其带来的威胁。
原文地址:http://chr13.com/2014/03/10/using-google-to-ddos-any-website/
- Golang学习-第二篇 搭建一个简单的Go Web服务器
- 数据说话:Go语言的Switch和Map性能实测
- Dora.Interception, 为.NET Core度身打造的AOP框架[4]:演示几个典型应用
- Dora.Interception, 为.NET Core度身打造的AOP框架[3]:Interceptor的注册
- Dora.Interception, 为.NET Core度身打造的AOP框架:不一样的Interceptor定义方式
- Dora.Interception,为.NET Core度身打造的AOP框架:全新的版本
- ASP.NET Core的路由[4]:来认识一下实现路由的RouterMiddleware中间件
- 浅谈 Java 并发编程中的若干核心技术
- ASP.NET Core的路由[3]:Router的创建者——RouteBuilder
- ASP.NET Core的路由[2]:路由系统的核心对象——Router
- ASP.NET Core的路由[1]:注册URL模式与HttpHandler的映射关系
- 学习ASP.NET Core, 怎能不了解请求处理管道[6]: 管道是如何随着WebHost的开启被构建出来的?
- 学习ASP.NET Core, 怎能不了解请求处理管道[5]: 中间件注册可以除了可以使用Startup之外,还可以选择StartupFilter
- 学习ASP.NET Core, 怎能不了解请求处理管道[4]: 应用的入口——Startup
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法