BugTraq.Ru
Русский BugTraq
http://www.bugtraq.ru/library/www/nuke.html

Как был взломан sPaiZ-Nuke.net
Terabyte
Опубликовано: dl, 07.01.04 04:49

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".

Хочу заметить, что никаких деструктивных операций я не производил, взлом был сделан лишь из тех соображений, чтобы указать автору на уязвимость, а не из-за вражды, ненависти и т.п. Обсуждение данной статьи производится у меня на форуме. Еще хочу заметить, что взлом не удался бы (не смог бы получить хеш) если на хостинге стояла не MySQL версии 4.

обсудить  |  все отзывы (0)

[26229; 32; 7.78]




  Copyright © 2001-2024 Dmitry Leonov Design: Vadim Derkach