Как школьники МЭШ взломали

в 15:32, , рубрики: python, взлом, информационная безопасность, мэш, сайт, Тестирование веб-сервисов, школа, электронный журнал

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

О чем речь?

Для начала, проясню что такое МЭШ и почему мы вообще о нем говорим. МЭШ - Московская Электронная Школа. Электронный журнал для всех учеников г. Москвы.

Он очень удобный и приятный в использовании, особенно по сравнению с его собратом из области (в "Школьном портале" М.О. требуется заплатить денег за возможность просматривать домашнее задание и оценки в мобильном приложении).

ЦДЗ 📚

Одной из главных фишек МЭШ можно назвать ЦДЗ(Цифровое Домашнее Задание). Это как привычная всем домашка, только в формате тестов на сайте или в приложении. Сами ученики раньше очень любили этот вид работы, так как он был максимально легким.
ЦДЗ решалось буквально за секунды.

Многие знали о существовании ботов X и Y в Telegram, и активно ими пользовались. Суть была проста, заходишь в бота, кидаешь ссылку на свое ЦДЗ, profit. Бот присылал ответы на все задания кроме тех, что учителя проверяли вручную, но таких было крайне мало, ведь учителя брали задания из готовых банков, а на них были ответы.

А как? 🧐

Интересно, как же так получилось, что эти боты брали ответы из, казалось бы, защищённой системы МЭШа? Неужели все было в открытом доступе?

Я решил разобраться в том, как же работали эти боты и сколько они зарабатывали.

Ужасно глупая ошибка 🤦‍♂️

Немного погуглив, я нашел GitHub бота Y и тут же бросился его изучать.

Среди кучи кода самого ТГ бота я нашел ту самую библиотеку, делающую всю грязную работу.

Меня привлек странный метод auth

Метод авторизации
Метод авторизации

login = "" и password_hash2 = ""

Как так?! Пустой логин и пароль?

Неужели прям так ужасно?!

Оказалось, что разработчики оставили тестового юзера с целью правильного отображения frontend части сайта, однако зачем-то дали ему права на backend части.

Получается костыль.

Его и нашли школьники и быстро собрали на его основе систему, позволяющую им вытаскивать ответы с серверов.

Способ получения ответов через testplayer
Способ получения ответов через testplayer

Получается следующая схема.
1) Получаем доступ к тестовому юзеру
2) С его токеном выясняем какой тип и вариант у данного нам задания
3) Обращаемся на сервер за ответами
4) Из-за кривых настроек сервер отдаёт нам ответы
5) Отдаём их довольным школьникам

Полная функция получения ответов
Полная функция получения ответов

Как вы видите, все довольно просто. И данная уязвимость не требует почти никакого умения для эксплуатации.

Бизнес 🤑

Вернёмся к нашим ботам. Разработчики бота Y выложили свой код в открытый доступ и зарепортили уязвимость разработчикам. А вот с ботом X все сложнее.

Эти ребята решили сделать Premium Pro Plus Extra Deluxe подписку. Символическая цена за возможность быстрее решать задания и убрать лимит на кол-во заданий в день. Прекрасная сделка!

Дети собирали деньги всем классом, покупали подписку на бота и жили без забот о домашке.

Бот X
Бот X

Фикс 🛠

На данный момент этот метод не работает.

Тест юзера убрали, endpointы поменяли, дыру залатали.

Но бот X до сих пор работает и собирает деньги. Как они это делают мне не ясно, но осмелюсь предположить, что используется все та же проблема со вседозволенностью на стороне сервера. Только в этот раз им удалось получить данные от аккаунтов одного из завучей либо учителей, ведь их доступ к банкам заданий никак не ограничивается.

Итоги ✅

Дырка в системе максимально глупая и странная, не ожидал такого от МЭШ. Но было интересно порыться в исходном коде этого проекта и провести свое мини расследование.

TL;DR Школьники использовали уязвимость с тестовым юзером чтобы заработать денег и не решать домашнее задание :)

Спасибо за внимание, ещё увидимся!

Автор: Илья

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js