Точикистонский косяк 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 запроса: |