Как я взломал сервер университета и получил доступ к оценкам

Взлом сайта

Всем привет! В сети я известен под ником 1day, студент третьего курса и по совместительству багхантер (охотник за уязвимостями), который увлечен безопасностью веб-приложений. В статье расскажу, как мне удалось взломать сервер, который обслуживает множество учебных заведений (в том числе университетов) и содержит данные десятки тысяч студентов.

Еще по теме: Вот как я взломал сайт NASA

Как я взломал сайт университета

Однажды, когда я спросил преподавателя о моем балле по посещаемости, она принципиально отказалась отвечать и предложила получить эту информации самостоятельно, на студенческом портале. Вернувшись в домой, я зашел на сайт и увидел данные о посещаемости и в этот момент мне в голову пришла мысль: «Что, если я смогу взломать этот сайт?» Отказ преподавателя и мои низкие показатели посещаемости пробудили во мне хакера. Я поставил себе цель – взломать университетский сервер или сторонний сайт используемых университетом.

Статья в образовательных целях, для обучения этичных хакеров. Цель — не поощрение незаконных действий, а демонстрация уязвимостей в существующих системах защиты. Ни редакция spy-soft.net, ни автор не несут ответс­твен­ности за ваши действия.

Целевым объектом был сайт, который используется университетами и колледжами по всей Индии для управления записями студентов, оценками, посещаемостью и другими данными. Вход на сайт возможен только для студентов и преподавателей через регистрационные номера университетов.

Также существует мобильное приложение, которое использует тот же бэкенд.

Сбор информации

Как и обычно, я начал сбор информации, пытаясь найти все возможные поддомены цели, используя такие инструменты, как Subfinder, Assetfinder, Amass и crt.sh. Я сохранил целевой домен в файл scope, и запустил все эти инструменты. К сожалению ничего интересного не нашел.

Сам портал был поддоменом, типа:

Поэтому я перешел к следующему этапу — сканированию директорий. Мой любимый для этого инструмент — FFUF (см. Установка и использование FFuF).

Вот команда, которую я использовал:

Прошло около минуты, и я нашел интересную директорию — /bkp.

Открыв /bkp, я увидел страницу с логином в панель резервного копирования базы данных.

Страница входа в систему резервного копирования базы данных.
Страница входа в систему резервного копирования базы данных.

Это был мой первый шаг к успеху.

Частичный обход аутентификации

Теперь начался процесс обхода аутентификации. Я запустил Burp Suite для перехвата запроса и отправил произвольные данные для входа.

Запрос и ответ для входа в систему
Запрос и ответ для входа в систему

Ответ сервера содержал сообщение failure, что дало мне понять, что проверка аутентификации частично происходит на стороне клиента. Это означало, что можно попытаться изменить ответ сервера.

Я изменил failure на success и запрос был принят, после чего меня перенаправило на страницу:

Однако это был лишь частичный успех: вместо имен баз данных я получил символы s, u, c, c, e, s, s, так как сервер интерпретировал их как отдельные базы данных.

Выполнение удаленного кода

Зайдя на панель, я обнаружил кнопку Backup, которая отправляла запрос POST на /bkp/backup1.php, передавая имена баз данных в параметре sendarr.

Запрос после нажатия кнопки резервного копирования
Запрос после нажатия кнопки резервного копирования

Я запустил фаззинг с этим параметром и через некоторое время получил интересный ответ с ошибкой, которая указывала на использование функции exec() в PHP.

Ответ, который указывает на то, что бэкэнд использует exec()
Ответ, который указывает на то, что бэкэнд использует exec()

Команда exec() позволяет выполнять системные команды через PHP. Я решил отправить команду для проверки, добавив следующий параметр:

Сервер ответил через 20.6 секунд, подтверждая, что уязвимость существует.

Чтобы доказать наличие возможности удаленного выполнения команд (RCE), я выполнил команду, записав ее результат в файл:

Зайдя на страницу /out, я увидел результат команды, подтверждая, что код выполняется.

Взлом университета

Так получил возможность выполнения кода, и написал простой скрипт на Python для взаимодействия с сервером как с шелл.

Базовый RCE-эксплойт
Базовый RCE-эксплойт

Теперь пришло время взлома сервера.

Получение доступа

Далее использовал реверс-шелл PentestMonkey. Разместил файл реверс-шелла на своем сервере и скачал его на целевой сервер с помощью команды:

После этого запустил слушатель на netcat и открыл файл /rev.php.

Реверс-шелл
Реверс-шелл

И вот я получил доступ к серверу через реверс-шелл!

Доступ к базе данных

На сервере я нашел файл consts.php, который содержал учетные данные для MySQL.

Учетные данные MySQL найдены в файле consts.php
Учетные данные MySQL найдены в файле consts.php

Воспользовавшись ими, я подключился к базе данных:

И вот я оказался в базе данных, содержащей данные множества университетов.

Взлом университета

Взломать университет

Университет взломать

Я нашел свою запись и просмотрел данные по посещаемости, оценкам и другие интересную информацию :).

Заключение

Как этичный хакер, я не стал изменять или удалять какие-либо данные. Сообщил о проблеме декану университета, и она была передана команде безопасности, которая устранила уязвимость через две недели.

Этот взлом занял у меня три дня, и в итоге я получил доступ к базе данных с данными более 100 тысяч студентов.

ПОЛЕЗНЫЕ ССЫЛКИ:

QUASAR

Этичный хакер и компьютерный ниндзя. Новые статьи в нашей Телеге!

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