Как был взломан sPaiZ-Nuke.net
==============================

Автор: Terabyte (http://www.web-hack.ru)


sPaiZ-Nuke.net - это официальный сайт движка сайтов сделанного на основе PHP-Nuke. Отличия заключаются в том, что sPaiZ-Nuke (далее просто SN) на много урезан в коде, но как показала практика не менее дыряв. Основой для взлома была дыры найденная группой RusH (http://rst.void.ru) в PHP-Nuke version <= 7.0 FINAL (http://rst.void.ru/texts/advisory16-ru.txt). Представляет она из себя SQL-инъекцию. Она заключается в следующем: уязвимость находится в модуле Survey и удаленный атакующий может внедрить произвольный sql-код используя отсутствие фильтрации переменной pollID. Данная уязвимость может быть использована для получения хешей паролей пользователей портала:

www.victim.com/php-nuke/modules.php?name=Surveys&pollID=a'[sql_code_here]

По хорошему стечению обстоятельств выяснилось, что и SN подвержен этой уязвимости ;-) Далее есть два пути: внедрить свой SQL-код или воспользоваться приватным сплоитом (r57nuke-survey.pl). Ни то ни другое я вам дать не могу, по понятным причинам :-)

Далее для получения MD5 хеш админа нужно было узнать его имя. Явным образом оно не присутствовало в новостях на сайте, но его можно узнать несколькими способами:

1) Первым делом я нашел асю админа на сайте и просто постучавшись к нему с помощью Социальной Инженерии, быстро узнал под каким он ником зареген (его имя оказалось Sensey).
2) Самый верный и быстрый способ, как потом оказалось, имя админа можно узнать из названий рисунков, например:
<img src="themes/viper/images/authors/Leonboy.gif" border="0" title="Leonboy" align="right" height="19">
Т.е. делаем поиск в исходнике главной страницы по слову "images/authors/".
3) Как правило это юзер у которого больше всего постов на сайте. Данная статистика общедоступна.
4) Большинство админов первым делом регистрируются под ником admin.

Теперь зная имя админа, я без проблем узнал его хеш. Далее для попадения в админку у меня опять было два пути:

1) Набрутить пароль который находился в этом хеше
2) Подставить хеш в куку. Это способ наиболее быстрый, т.к. требует только знаний, как модификацировать куку и формат в котором хранится в них хеш. Например, почти все известный на сегодня движки хранят хеш в куке: phpBB, PHP-Nuke, Invision Power Board (в ранних версиях, в куке хранился пароль в открытом виде) и т.д. Не исключение оказался и наш SN.

Сначала я выбрал первый способ в надежде на пароль от дурака, но после 10 минут брута в MD5Inside 1.0.1.0 (http://www.web-hack.ru/download/info.php?go=75) я понял, что лучше выбрать способ с кукой. Для определения формата в котором хранятся данные в куке мне потребовалось скачать с сайта производителя последнюю версию SN 1.3 и установить на localhost. Далее я залогинился под админом в IE (строение и способ изменения кук в IE на тот момент я знал больше, чем в Опере) и открыл IECookiesView 1.50 (http://www.web-hack.ru/download/info.php?go=78). Открыв куку я увидел, что переменная Key у куки называется admin, а Value (где и должен был находиться хеш) имеет значение:
YWRtaW46NjM2MGYzOTNlMzYwMmIzZmU5MGM4OTZhNGNhY2ZiMDk=
Данное значение не совсем походило на хеш =), но знак "=" на конце подсказал мне что это какой то текст закодированный в base64 (как потом выяснилось после изучения исходника auth.php это оказался base64) и после довольно простой программки в PHP:

<?php
echo base64_decode("YWRtaW46NjM2MGYzOTNlMzYwMmIzZmU5MGM4OTZhNGNhY2ZiMDk=");
?>

Оказало, что это действительно base64 и в переменно Value харнится:
admin:6360f393e3602b3fe90c896a4cacfb09 // Т.е. имя_админа:md5_хеш

Теперь нам предстояло получить с сайта жертвы любую куку и изменить ее на:
Key=admin
Value=логин_и_пароль_в_md5_зашифрованный_в_base64

Первым делом я зашифровал с помощью base64_encode() логин и пароль админа и полез на сайт с целью получить куку. Но тут меня ждал очередной облом, т.к. все опросы (работаю на основе запоминания IP на 15 мин.) и т.п. не создают куков. Пришлось опять стучаться к автору движка и применять Социальную инженерую. После не долгого разговора выяснилось, что куки создаются только для админа и обычный посетитель сайта их не может получить.

На этом этапе я немного встал в тупик: куку с сайта жертвы я получить не мог, отредактировать переменную "Web site" в куках от IE я не могу (о том почему не мог и как все же выйти из ситуации читайте в моей следующей статье), а изучать способ хранения кук в других браузерах у меня не было желания в тот момент =)

Через некоторое время мой друг (NivaX) напомнил мне что в AccessDiver (http://www.web-hack.ru/download/info.php?go=6) есть прекрасная возможность работать с HTTP на низком уровне, т.е. видеть все ответы сервера и передвать ему различные заросы (GET, POST и в т.ч. куки). Я включил режим Expert и прошел по вкладкам: Extras Tools\HTTP Debugger. Теперь мне предстояло сделать запрос к admin.php который бы менял пароль. Странице на которой меняется пароль оказалась: admin.php?op=modifyadmin&chng_aid=[имя_админа]

После изучения исходника html-страницы я сделал POST-запрос:

chng_name=God&chng_aid=Sensey&chng_email=admin@lamer.gi&
chng_admlanguage=&chng_radminarticle=1&chng_radmintopic=1&
chng_radminsurvey=1&chng_radmindownload=1&chng_radminsuper=1&
chng_pwd=web-hack.ru&chng_pwd2=web-hack.ru&adm_aid=Sensey&op=UpdateAuthor

В переменных chng_aid и adm_aid хранилось имя админа, а в chng_pwd и chng_pwd2 новый пароль. Обратите внимание, что нету формы для запроса старого пароля, если бы такая имелась то моя попытка сменить пароль провалилась (интересен тот факт, что после общения с разработчиком после взлома он так и согласился создавать форму для ввода старого пароля). Формат куки передаваемой в AccessDiver был:
admin=YWRtaW46ODMxOTZhZWI2NjI5ZTMyNmI1YjZmNGFhN2M5MTJkYTk=

После этих манипуляций я легко залогинился под своим новым паролем и запостил в новостях красивую новость с заголовком "Hacked by Terabyte" - http://www.web-hack.ru/defaced/spaiz-nuke.net.jpg

==========
Заключение
==========

Хочу заметить, что никаких деструктивных операций я не производил, а взлом был сделан лишь из тех соображений, чтобы бы указать автору на уязвимость, а не из-за врожды, ненависти и т.п. Обсужденине данной статьи производится у меня на форуме - http://forum.web-hack.ru/index.php?act=ST&f=12&t=5399 . Еще хочу заметить, что взлом не удался бы (не смог бы получить хеш) если на хостинге стояла не MySQL версии 4.