基于Perl的DoS工具设计与实现
来源:UC论文网2015-10-31 14:07
摘 要:本文设计并实现了一个基于Perl脚本语言的Dos攻击工具,利用半连接原理攻击WEB服务。本攻击工具分扫描模块和攻击模块,具有HTTP DoS,HTTPS DoS,Cache avoidance和HTTPReady Bypass攻击功
摘 要:本文设计并实现了一个基于Perl脚本语言的Dos攻击工具,利用半连接原理攻击WEB服务。本攻击工具分扫描模块和攻击模块,具有HTTP DoS,HTTPS DoS,Cache avoidance和HTTPReady Bypass攻击功能。充分利用系统的超线程性能和Perl脚本特性,代码量少,对Linux下的WEB服务攻击效果较好。
【关键词】Dos Perl 攻击 工具
在Linux下使用Perl脚本语言设计开发的DoS攻击工具,可以利用单一机器占用网络带宽很少的情况下对目标服务器的WEB服务发动攻击。它通过向目标服务器发送半HTTP连接来消耗服务器资源,且所需数据包相对于一般的洪泛式DoS攻击工具要少很多,所以具有一定的隐蔽性。目标服务器采用超线程技术则发动的攻击会更有效,因为随着攻击的进行服务器会限制它所允许的线程数,若攻击者的机器上也采用超线程则攻击效果会大大增强。
1 攻击原理
通过发送半连接(HTTP请求)来保持连接的畅通,并周期性发送HTTP Headers来避免套接口关闭来达到消耗目标主机资源,关闭WEB服务的目的。由于有效地将攻击连接伪装为合法连接从而躲过了侦测系统的防御。同时当攻击正在进行时,日志文件并不会被写入,直到连接请求完毕。所以攻击者能够使目标在一段时间内服务无法被访问,同时攻击行为不会被管理员发现。
2 主要模块划分
Perl脚本语言开发的DoS工具主要由两大部分组成,分别是扫描模块和攻击模块。扫描模块包括目标主机扫描模块,攻击主机扫描模块,目标主机连接超时时间测试扫描模块。攻击模块包括常规HTTP Dos攻击模块,HTTPS Dos攻击模块,HTTPReady Bypass模块, Cache avoidance模块。
2.1 扫描模块
2.1.1 目标主机扫描模块
探测目标主机的服务是否可用及是否采用超线程技术,通过向目标服务器发送合法请求来实现。
2.1.2 本地主机扫描模块
探测攻击者的主机是否采用超线程技术。由于超线程技术的特点,使得拥有超线程技术的攻击者的攻击效果会比未拥有的要好很多。
2.1.3 目标主机连接超时时间测试扫描模块
找出目标机器服务的连接超时时间,这个时间对于攻击来说至关重要,将攻击者发送的半连接超时时间设置得与被攻击者的越接近,攻击效果越好,但必须小于被攻击者的连接超时时间,否则攻击失效。
2.2 攻击模块
2.2.1 HTTP DoS攻击模块
通过向目标周期性地发送请求,导致目标服务器无法响应合法用户请求。攻击目标的超时时间越短它的资源被消耗得也越快。连接数与攻击目标的连接数越接近越好,因为这能减少的尝试次数以及相关的带宽。
2.2.2 HTTPS DoS攻击模块
实现方式与HTTP DoS攻击模块相似,不同之处在于本模块需要对数据通过协议加密后再发送。
2.2.3 HTTPReady Bypass模块
通过将发送的请求消息从GET改为POST来实现。这是在HTTP DoS失效的情况下使用,实现方法为把GET请求方法改为POST请求方法,这样就可以绕过HTTPReady的保护。
2.2.4 Cache avoidance模块
本通过改变请求消息头使得目标服务器的溢出,从而拒绝服务。
3 难点实现
3.1 扫描模块
本工具的扫描模块分为目标主机扫描模块,攻击者主机扫描模块,目标主机连接时间扫描模块。
3.1.1 攻击主机扫描模块
此模块的主要任务是通过调用Config模块来检测主机是否使用超线程技术,代码为:
$Config{usethreads}
如果使用则执行代码:
$usemultithreading = 1;
use threads;
use threads::shared;
攻击者的主机是否采用采用超线程技术对于攻击效果而言影响比较大,因为攻击原理是向目标主机发送半HTTP Request请求从而导致目标主机拒绝服务,所以攻击连接数对攻击效果的影响至关重要,连接数越多攻击效果越好,所以拥有超线程技术的主机才产生的攻击效果会更好。
3.1.2 目标主机扫描模块
此模块的主要任务是检测目标主机的HTTP服务是否可用,具体方法为向服务器发送一个合法的GET请求消息:
if ($cache) {
$rand = "?" . int( rand(99999999999999) );
}else {
$rand = "";
}
my $primarypayload =
"GET /$rand HTTP/1.1\r\n"
. "Host: $sendhost\r\n"
. "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.503l3; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MSOffice 12)\r\n"
. "Content-Length: 42\r\n";
如果套接字建立成功而且请求得到合法响应,则说明目标服务器的服务工作正常,则可以进行下一步操作。 3.1.3 目标主机连接时间扫描模块
此模块的主要功能为探测目标服务器上的超时时间,这个选项是手动。了解目标机器的超时时间是非常必要的,因为攻击目标的超时时间越短则资源被消耗得也越快,但如果设置得小于被攻击电脑的连接超时时间,则又容易导致攻击效果锐减。以下为具体实现代码:
for ( my $i = 0 ; $i <= $#times ; $i++ ) {
print "Trying a $times[$i] second delay: \n";
sleep( $times[$i] );
if ( print $sock "X-a: b\r\n" ) {
print "\tWorked.\n";
$delay = $times[$i]
}
其中变量sock只指的HTTP Request的底层通信连接,这里为TCP连接,当然,如果需要改变为UDP连接可以直接修改相关代码。最后,测试的大致超时时间为变量delay的值,单位为秒。
3.2 攻击模块
论文