Как я взломал университетскую базу данных и обнаружил данные тысяч студентов
Как я взломал университетскую базу данных, открыв доступ к тысячам записей студентов
Введение
Привет! Меня зовут 1day, я студент 3-го курса направления BCA и по совместительству баг-хантер. Кибербезопасность — моя страсть, особенно в веб-среде. В этой статье я расскажу, как мне удалось взломать сервер крупного портала, который обслуживает множество университетов и содержит данные тысяч студентов.
Как все началось
Однажды я попросил своего преподавателя показать мои данные по посещаемости в журнале. Она отказала и сказала: «Смотри свой студенческий портал». Я зашел в систему, чтобы проверить посещаемость, но у меня возникла мысль: «А что, если я попробую взломать это?»
Моя цель была ясной — проникнуть на сервер.
Что за цель?
Этот портал используют университеты и колледжи по всей Индии. Он хранит данные об успеваемости, посещаемости, оценках и даже платежах. Доступ к системе есть только у студентов и преподавателей, причем для регистрации нужен уникальный университетский номер.
Начало разведки
Как и всегда, я начал с разведки. С помощью инструментов Subfinder, Assetfinder, Amass и других я пытался найти все поддомены целевого сайта. Но ничего полезного обнаружить не удалось.
Тогда я перешел к сканированию директорий, используя инструмент FFUF, который нашел директорию /bkp. Зайдя по этому адресу, я увидел страницу входа для резервного копирования базы данных.
Частичный обход авторизации
Я начал подбирать стандартные комбинации логина и пароля, но безуспешно. Тогда я запустил BurpSuite, чтобы перехватить запросы. В ответе от сервера я заметил интересную вещь: проверка входа осуществлялась на стороне клиента, а не сервера.
Я изменил ответ сервера с «failure» на «success», и меня перенаправило в панель. Однако это был лишь частичный успех: система выводила неправильные названия баз данных.
Уязвимость с выполнением кода
В панели я заметил кнопку «Резервное копирование». При ее нажатии сервер отправлял запрос, содержащий параметр sendarr, в котором указывались имена баз для копирования.
Я решил «пофаззить» этот параметр, то есть протестировать его разными значениями. Когда я ввел %00 (нулевой байт), сервер выдал ошибку, которая показала, что на стороне сервера используется функция exec().
Функция exec() в PHP позволяет выполнять системные команды, что представляет огромную уязвимость. Чтобы подтвердить это, я отправил команду, которая заставляла сервер «уснуть» на 20 секунд. Ответ от сервера пришел через 20,6 секунды — это подтвердило наличие уязвимости.
Получение доступа к серверу
Далее я использовал уязвимость для загрузки на сервер обратной оболочки. Я написал скрипт, который позволял мне взаимодействовать с сервером как через командную строку.
После этого я нашел файл consts.php, где были записаны учетные данные для входа в базу данных MySQL. Используя эти данные, я подключился к базе, где обнаружил записи студентов множества университетов, включая свой.
Итоги
Хотя у меня был доступ к данным, я ничего не изменял и не удалял. Я сообщил об уязвимости руководству своего университета, а они передали информацию разработчикам. Уязвимость была исправлена через две недели.