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

Точикистонский косяк

MorpheuS (uin: 371200)

Хакер, номер #084, стр. 084-050-2


[косяк админа]

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

Дальше - больше: раздел Files - просмотр архива всех статей и загрузка файлов. Все - вот оно. Нетерпеливо кликнув по ссылке для перехода к файл-менеджеру, я вновь получил отказ. Мне вежливо предложили залогиниться и даже уже вписали за меня логин: nbtjftp. Теперь оставалось угадать пароль, и я практически получаю веб-шелл.

Пара отчаянных попыток отгадать пароль с лета не увенчались успехом. Я остановился и начал соображать: сообщение над строкой формы логина гласило: Simple File Manager - Login.

В тот же момент я обратился к багтракам. Не один из них не знал такого скрипта и не содержал упоминаний как о данной версии, так и о предыдущих релизах. Мои надежды на удачный взлом таяли с каждой минутой, от безысходности я вновь вернулся к авторизации.

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

[кодерский косяк]

Решив, для начала, ознакомиться с принципом работы скрипта и посмотреть, какие возможности кроются внутри, я залил его на свой сервер и залогинился под известным мне аккаунтом, предлагаемым разработчиком для тестирования: guest:demo. Данные о пользователе хранились в самом скрипте fm.php. Полазав по своим папкам, я нажал пимпу logout и вернулся к процессу авторизации. Вот что я заметил, проделав операцию логина еще раз: данные о пользователе передавались скрипту методом POST в переменных $user и $password. Если авторизация прошла успешно, то скрипт пропускал меня внутрь. Что самое интересное, в адресной строке после этого добавлялась переменная $u=guest. Таким образом, скрипт следил за тем, какой пользователь залогинен в данный момент. Если поменять значение переменной $u, то скрипт заругается и отправит меня к форме авторизации. Так вот же она моя бага, подумал я! Сделав логаут, я вновь очутился перед окошком ввода логина и пасса, только на этот раз я сообщил скрипту переменную $u, содержащую мой логин, который, кстати, автоматически прописывается в поле формы. После обновления страницы я добился того, чего хотел: авторизация была успешно обманута. Посмотрев исходники скрипта, я лишь только убедился в своей правоте: скрипт давал возможность редактировать переменную $u, которая была как бы флагом авторизации посредством GET запроса:

Назад на стр. 084-050-1  Содержание  Вперед на стр. 084-050-3