Re: Apache Killer - take 2?

Anestis Bechtsoudis <[email protected]>
Newsgroups gmane.comp.security.web-applications
Message-ID <[email protected]>
On 01/19/2012 09:59 PM, Damiano Bolzoni wrote:
> Hi all,
> today we saw a weird HTTP header in a request that came to a web server
> we are monitoring:
> 
> HEAD /contact HTTP/1.1
> Content-Range: bytes 1-1024/-1
> User-Agent: Opera/9.80 (Windows NT 5.1; U; pl) Presto/2.5.22 Version/10.51
> Host: www.xyz.nl
> Accept: */*
> 
> 
> The offending IP is not in any blacklist, and the intent is kind of
> clear...the server is Apache, but I have no detailed information about
> the version/patching level. The server went ahead with a simple redirect
> to the default error page.
> 
> Is this just a clumsy way to attempt an overflow of one of the range
> boundaries and replicate the infamous Apache Killer attack?
> 
> cheers
> 

Apache byte-range killer use many small byte-range chunks in a single
request. So no, your attached request is not related to such an attack.

At latest Apache stable release (2.2.21) -1 is not a valid
entity-length, resulting in a full size 200 response (and not a 206
partial content response) despite the requested range.

For better understanding take a look at modules/http/byterange_filter.c
at apache sources.

I attach a simple perl PoC to check your web servers in case you have to
deal with outdated versions.


Regards,
Anestis

-- 
Anestis Bechtsoudis

Network Operation Center,
Laboratory for Computing (LabCom),
Dept. of Computer Engineering & Informatics,
University of Patras, Greece



This list is sponsored by Cenzic
--------------------------------------
Let Us Hack You. Before Hackers Do!
It's Finally Here - The Cenzic Website HealthCheck. FREE.
Request Yours Now! 
http://www.cenzic.com/2009HClaunch_Securityfocus
--------------------------------------
byte_range_check.pl (application/x-perl, 640 B)
#!/usr/bin/perl -w
# Written by @anestisb

use strict;
use IO::Socket;

if ($#ARGV != 0) {
        print "Usage: ./byte_range_check.pl <host> (ex. 127.0.0.1)\n";
        exit;   
}


my $sock = IO::Socket::INET->new(PeerAddr => $ARGV[0],
                                 PeerPort => "80",
                     	         Proto    => 'tcp');

my $request = "HEAD / HTTP/1.1\r\n".
	      "Host: $ARGV[0]\r\n".
	      "Range:bytes=0-12/-1\r\n".
	      "Accept-Encoding: gzip\r\n".
	      "Connection: close\r\n".
	      "\r\n";

print $sock $request;

my $line='';
my $output='';

while ($line = <$sock>) { $output .= $line; }

print $output;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.