Выбрать главу
Охота за бажными демонами

Первым и, пожалуй, самым излюбленным методом удаленного нападения является атака с применением эксплоита к уязвимому сервису. Но прежде чем атаковать этот уязвимый сервис, его еще необходимо обнаружить. А это не всегда просто сделать. Препятствия могут быть какими угодно – различного рода программы, защищающие тачку от сканирования портов, умные админы, подменяющие баннеры сервисов, настроенный (или частично настроенный) брандмауэр, который режет незванные пакеты. За мою недолгую сетевую жизнь мне приходилось сталкиваться с разными трудностями, но это еще не говорит о неуязвимости демона.

Есть одна хакерская мудрость: лучшее сканирование – ручное сканирование :). Это частично так – скан вручную избавляет от негативного влияния различных антипортсканеров, установленных админом на сервере. Когда мне хочется найти сервер с уязвимым сервисом cvs и пробить его новым эксплоитом, я никогда не буду сканировать весь диапазон портов на машине. Зачем? Я просто выполню команду «telnet victim.com 2401» и проверю наличие демона на тачке. Затем бесшумно запущу сплоит и получу искомый шелл. Если даже сервис пропатчен, никаких следов я не оставил, посему обвинить меня в деструктивных действиях никому не удастся.

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

Бывает, что версия демона отличается от бажной. Тем не менее, стоит попробовать натравить эксплоит на машину, ибо некоторые особо активные сисадмы обожают подменять баннеры своих сервисов. Я уже писал о том, как отличить поддельный баннер от подлинного (XSpeZ OS4Hack), поэтому повторяться не буду.

Использование эксплоита – классический взлом, но часто сетевому партизану не по зубам хакнуть сервер этим способом (к примеру, из-за фаервола). Тогда приходится прибегать к другим, менее благодарным способам взлома. Например, к сканированию web-скриптов.

Кривой скрипт – ключ к серверу

Поняв, что просканировать порты сервера не удается даже вручную, взломщик может обратить внимание на WWW-зону сервера. В 90% случаев порт 80 жертвы будет открытым, а все потому, что цель данного сервера – занятный web-проект, который вполне может содержать дырявые скрипты.

В наше время встретить статический контент сайта очень сложно, поэтому у злоумышленника больше шансов на успех. Бывает, что первоклассный админ возомнит себя web-мастером и напишет такой скрипт, защита которого оставляет желать лучшего. Этим хакер и воспользуется! Однако он должен уметь быстро отличать бажный скрипт от нормального.

В первую очередь нужно обращать внимание на параметры, переданные сценарию методом GET – такие скрипты сразу видно. Например, попробовать немного изменить значение опции на название системного файла. Только следует делать замену разумно. Допустим, присутствует параметр file, равный article1. Если попробовать модифицировать значение на что-нибудь типа «../../../../../etc/passwd%00», может улыбнуться удача. Ведь нулл-баг существует даже в последней версии Perl.

В случае с PHP можно поэксплуатировать баги, характерные для этого интерпретатора. Если вдруг встретится опция page=blabla, можно замутить как открытие системного файла, так и cross-side-атаку. Для этого создается PHP-файл с любым кодом на другом сервере и передает ссылка на него в качестве параметра. При хорошем раскладе скрипт загрузится, а его содержимое будет выполнено на атакуемом сервере.

Эта информация – лишь азы взлома через WWW. Хочешь узнать больше по хаку сценариев – читай статью про удаленное выполнение команд, а также подпишись на новости багтрак-лент.

Если хакеру везет, он быстро находит уязвимые файлы. Но бывает, что все сценарии неуязвимы. В этом случае взломщик обязательно попробует просканировать web-сервер на наличие бажных скриптов. Здесь ему поможет обычный WWW-сканер, каких в инете развелось великое множество. От себя могу порекомендовать перловый скрипт cscan.pl (kamensk.net.ru/1/x/cscan.tar.gz), позволяющий сканить машины с любой *nix-консоли. Это удобно и безопасно одновременно. В архиве помимо сканера расположена база уязвимых сценариев (правда, она довольно старая и уже покрылась плесенью ;)).

Ты можешь сказать, мол, сканировал я эти сервера и ничего, кроме чтения файлов, не добился. Действительно, никаких привилегий от просмотра содержимого /etc/passwd не поднять. Но это может послужить толчком к более действенному методу.

Перебери все варианты

Если взломщику частично повезло с WWW, то он пробует атаковать сервер брутфорсом. Конечно, ты слышал, что этот метод заключается в переборе пароля на определенный сервис. На первый взгляд покажется, что просто бессмысленно прогонять все варианты паролей через сеть. Но только на первый. Если удалось прочитать /etc/passwd, это уже первый шаг к победе, ведь известны все системные логины. Остается запустить брутфорсер и озадачить его перебором нескольких простых паролей на указанные логины. На самом деле, брутфорс – это целое искусство, которое постигается годами. Матерый хакер сразу чувствует, что пользователь lamer1 вообще не имеет пароля, а юзер lamer2 заходит под паролем qwerty.

Лично я руководствуюсь несколькими правилами, когда прибегаю к брутфорсу. Во-первых, если /etc/passwd очень длинный и содержит множество аккаунтов, есть вероятность того, что пароль равен логину. И эта вероятность тем выше, чем больше записей в системе. Естественно, придется перебрать все строки файла и выбросить юзеров, которые не имеют шелла (зачем нам неполноценные аккаунты?), а затем составить списочек типа «login:login». После всего взломщик скормит этот увесистый список программе-брутфорсу.

По доброте душевной я написал небольшой перловый сценарий, который умеет перегонять данные из /etc/passwd в базу для брутфорсера. Делает он это быстро и качественно, отбирая только валидные аккаунты.

ЛИСТИНГ

#!/usr/bin/perl

$in=$ARGV[0];

$out=$ARGV[1]; ## Определим параметры скрипта

exit print «Use $0 $in $out\n» unless ($out);

open(IN,"$in");

open(OUT,"> $out");

while(<IN> ) {

chomp;

if (~/sh$/) { ## Запишем только валидные аккаунты

($u,@undef)=split ":";

print OUT «$u:$u\n»; ## В виде пары login:login

}

}

close(IN);

close(OUT);

Что касается брутфорсера, могу привести тебе пример как под Винду, так и под *nix. Классическим софтом под Win32 является, конечно же, программа Brutus. Она умеет многое, но совсем не поддерживает прокси. Поэтому я люблю сводить Brutus с программой Sockscap и гнать трафик через безопасные соксы. Либо, как вариант, можно юзать Brutus на удаленной машине, соединившись с ней подручным терминальным клиентом.

Юниксоидам понравится творение хакерской команды THC (thc.org) под названием hydra (http://thc.org/download.php?t=r&f=hydra-4.1-src.tar.gz). Этот брутфорс по возможностям даже опережает brutus, поскольку умеет перебирать аккаунты на маршрутниках cisco и по различным протоколам (vnc, https, netbios и т.п.). Что касается простых служб типа ftp и pop3, то многопоточная hydra тоже легко справится с задачей. Требуется лишь задать несколько главных (вордлист, хост, порт и название сервиса) и второстепенных (число потоков, логфайл, останов при подборе первого пароля, перебор пары login:login) параметров, и hydra отправится в бесконечный цикл :). Ничто не мешает оставить этот длительный процесс в покое и лишь периодически проверять результат работы программы. А что еще остается, если другие методы не помогли?..