Вступление

Как-то раз проснулся я ранним весенним утром… Сессия на носу… стресс… Нужно отвлечься, подумал я и полез в и-нет… Тут вспомнил, что недавно видел по телеку сообщение от ОпСоСа «Джинс», типа «мы обновили сайт!»…
Захожу www.jeans.com.ua… и правда обновили!…

Постановка задачи 

Я давно заболел идеей взломать сайт популярного ОпСоСа… И, естественно, я начал искать баги нового движка. Далеко ходить не пришлось. На главной страница красовался список новостей. Для их просмотра использовался скрипт news_view.php, которому передается параметр news_id. Передав параметру строку «-1 OR 1/*», я понял, что он не фильтруется и есть возможность SQL-injection! 

«Что с этим делать?», — подумал я… Полазив немного по сайту, я наткнулся на форум, который крутился на движке phpBB (правда модифицированный до неузнаваемости). Набрав
“/forum1/admin/” я увидел версию форума… Это был phpBB 2.0.13. На сайте
phpbbguru.net.ru критических исправлений с появления 2.0.13 не было, разве что XSS, найденная в 2.0.14, но для этой уязвимости не было опубликовано способа использования, да и мне пользы от неё не было. Однако такое положение дел было лишь на первый взгляд. Среди множества исправлений версии 2.0.13 была скромная строчка «Исправлена потенциальная уязвимость в системе стилей».
Я и сам достаточно давно использую движок phpBB, соответственно внимательно
слежу за всеми найденными уязвимостями, исправлениями и т.д. Потому я сразу понял о какой «потенциальной уязвимости» идет речь. Дело в том, что после того, как была найдена критическая уязвимость в версии 2.0.12, которая позволяла любому юзверю попасть в админку, неким overdose был написан эксплоит, который позволял выполнять произвольный php-код на сервере.

После недолгого просмотра исходника мне стало примерно понятно, как он работает. Сперва он логинится под админом (используется уязвимость в 2.0.12), а потом хитрыми манипуляциями со стилями и бекапом БД выполняет php-код… Баг в cookies, который позволял получить админский доступ, и правда исправили в версии 2.0.13, а вот скрипты для работы со стилями намного позже — только в 2.0.14! Так почему автор считает, что эксплоит для версии 2.0.12? (Наверное это специально, что
бы phpBB-Group не спешила выпускать новую версию 😉 ) Ведь если иметь администраторский доступ, то код на сервере можно выполнить и в версии 2.0.13!

ВСЕ! Цель определена! Необходим администраторский доступ к форуму!

Проникновение в админку

Для того, чтобы попасть в админку форума мне был нужен логин и пароль админа.
Я уже писал ранее, что нашел уязвимый на SQL-injection скрипт. С помощью него я решил спереть из БД логины админов форума и md5-хеши их паролей… Для этого я составил вот такой запрос:

http://www.jeans.com.ua/news_view.php?news_id=-1 UNION SELECT
0,0,0,username,user_password,user_id, 0,0,0,0,0 FROM “tablename” WHERE user_level=1

Названия полей взял стандартные для phpBB. Неизвестным параметром оставалось название таблицы с юзверями форума
( “tablename”). Многократные попытки его подобрать ничего не давали.
Я решил поискать другие бажные скрипты… И естественно нашел! 🙂 Ведь если программист делает ошибку «по незнанию», то он делает её везде! Именно это произошло здесь. Причем, когда скрипт выкидывал ошибку о неправильном SQL-запросе, в ней писался _весь_ запрос.
Пересмотрев несколько таких запросов, я заметил такую закономерность: везде (кроме новостей) использовалась БД “db_jeansclub”, и в названии всех таблиц присутствовал префикс
“t_”. И снова началось угадывание “tablename“, однако оно оказалось недолгим. Мне было известно, что название оканчивается на “_users”(это стандартно для phpBB), оставалось только угадать префикс форума. Это оказалось не сложно – это был “forum”.

В результате получился такой запрос:

http://www.jeans.com.ua/news_view.php?news_id=-1 UNION SELECT
0,0,0,username,user_password, user_id,0,0,0,0,0 FROM db_jeansclub.t_forum_users WHERE user_level=1

После выполнения скрипта я получил парольный хеш и id пользователя с ником admin. Потом таким же образом получил парольный хеш ещё одного админа данного форума.

Оба хеша я сразу сунул в md5inside, а сам отправился готовиться к предстоящим зачетам…

Шли часы… А ни одного из паролей так и не подобралось… Я понял, что ответа я так и не дождусь… «Да и не нужно!», — подумал я.
Вспомнил про замечательную систему в phpBB – систему авто-залогинивания. Так же я знал, что работает она используя cookies, а именно кук с названием, которое оканчивается на “_data”. Залогинившись на форуме я взял полученный кук и начал разбираться. Он имел такой вид:

a:2:{s:11:"autologinid"; s:32:"2eac5653846134c2b839d79876с29054";
s:6:"userid";s:5:"55643";};

Структура его оказалась довольно простой… Строка из 32 символов – хеш пароля юзверя, а последняя строка – его id на форуме. После подмены хеша и id на, полученные из БД
внизу страницы я увидел заветную надпись «Перейти в администраторский раздел»! Жму… Ура!!! Я в админке! Но этого мне было мало…

Получение шелла

Следующей целью было получить шелл на сервере. Для этого я решил использовать уже упомянутый выше эксплоит.

Я отправился на www.securitylab.ru за исходником. Скачал его, начал пытаться его скомпилировать. Среди заголовочных файлов была надпись
#include “serv.h”. Поиски файла serv.h в сети ничего не дали. «Ну и ладно» — подумал я. Удалил данную строку и продолжил исправлять синтаксические ошибки…

Вскоре я наткнулся на неизвестный мне тип “serveur”. Сперва я подумал, что это «типа очепятка» (защита от дурака), но позже понял, что этот тип самопальный. Я снова полез в сеть за описанием этого типа. Как всегда google выдал кучу ссылок. Среди первых я наткнулся на копии этого же исходника. Открываю. О! Что я вижу! Тот же исходник, но с описанием класса serveur! Этот «правильный» исходник я скомпилил уже через 2 минуты
(пришлось подправить лишь одну строку). Из данной ситуации для себя я сделал вывод: не брать исходные файлы эксплоитов с securitylab.ru. (Однако не буду навязывать своё мнение
вам).

Но вернёмся к нашим «баранам». Собственно говоря, скомпилированный мною эксплоит меня совсем не устраивал. Как говорилось выше, предназначался он для phpBB версии 2.0.12, да ещё и пытался пустить ненужный мне бек-шелл.
Для моих целей эксплоит пришлось немного модифицировать. Я убрал часть, которая пускала бек-шелл и вместо кука-эксплоита, который позволял попасть в админку в версии 2.0.12, подставил cookies, составленный мной ранее… Вот теперь эксплоит был готов к атаке!

Предварительно я опробовал его работу у себя на localhost… Всё было супер – эксплоит работал! Результат его работы – url, который позволял выполнять php-код.
Далее атака была произведена на http://www.jeans.com.ua/forum1/, и была произведена удачно. В результате получился такой запрос:

http://www.jeans.com.ua/forum1/admin/admin_styles.php?
mode=addnew&install_to=../../../../../../../../../../../../../../../../../../../
tmp&nigga=phpinfo();&sid= 35d5ead7efef569c3232b78bc401e44f

Залогинившись на форуме под админом я ввел выданный эксплоитом запрос, заменив sid на правильный, и увидел PHP-Info! Команда выполнилась! Но недолгой была моя радость… Я обновил главную страницу форума, и… О ужас! Фирменный стиль Джинса поменялся на стандартный стиль — SubSilver, а на форуме в это время висел “admin”(не тот под которым сидел я , а другой)! «Спалился!», — подумал я и быстро направился в админку исправлять ситуацию (а вдруг админ – тормоз и ещё ничего не понял). Захожу в «Конфигурацию», меняю стиль на “FI Black”. Применяю изменения… Форум работать перестал вообще!
При попытке вызова любого скрипта выдавалась ошибка… Оказывается “FI Black” – это тот самый фейковый стиль, который создал эксплоит. А стиль, который использовал Джинс, назывался SubBlack. А я, в спешке, не обратил внимания на разницу. Мои попытки поднять форум не увенчались успехом, а ведь я даже шелл закачать не успел.
И я, растроенный, в очередной раз отправился готовиться к зачетам…

Старательные админы уже через полтора часа подняли форум. Однако видимо им было лень разбираться в чем дело, и оказалось, что команды по-прежнему выполняются. Дальнейшие мои действия были стандартны. Был закачан шелл
phpRemoteView и скрипт
RST MySQL для операций с БД. Оказалось, что прав www(80) мне
бы вполне хватило не только для просмотра любых php-скриптов, а даже для того, чтобы сделать дефейс. Полазив по серверу я нашел рутовский логин и пасс к БД. Также скачал часть исходников для дальнейшего изучения и, возможно, нахождения новых дыр…

Заключение

Собственно дальше идти было некуда… На сервере крутилась FreeBSD 5.2.1, бажные процессы тоже вроде отсутствовали, так что пытаться поднять свои права я посчитал
бесполезным… Портить дефейсом довольно неплохой (хоть и бажный) сайт я не стал, да и всё равно бы всё быстро восстановили…

ЗЫ: К моменту написания статьи SQL-иньекция, описанная выше, уже не работала. А при попытке попасть в админку выдавалось
403 Forbidden”. И за это админам jeans.com.ua — респект! 😉

Оставить мнение

Check Also

Windows 10 против шифровальщиков. Как устроена защита в обновленной Windows 10

Этой осенью Windows 10 обновилась до версии 1709 с кодовым названием Fall Creators Update …