Pull to refresh

Как я взломал Московскую Электронную Школу

Привет, Хабр! Я бы хотел поделиться с вами историей о том, как я пользовался недоработками системы Московской Электронной Школы (далее МЭШ).

Начало

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

При первичном анализе ЦДЗ я сразу заметил интересное поле "right_answer" в ответе на AJAX запрос.

Поняв, что из этого можно извлечь выгоду, я стал изучать далее. Выяснилось, что поле возвращало null только с аккаунта ученика. С аккаунта родителя, демонстрационного аккаунта (для мобильного приложения) или аккаунта учителя это поле прекрасно отображалось.

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

Углубленный анализ

Всё! Казалось, жизнь в шоколаде! Но мною не был учтён 1 очень важный фактор. Тесты могли иметь несколько вариантов и соответственно для одного ученика могли показаться одни вопросы, а для другого другие. Тут я понял, что для дальнейшего изучения мне понадобится учительский аккаунт.

Когда я получил один из учительских аккаунтов, я заметил, что МЭШ зачем-то передает вместе с информацией о других учителях школы их логины. Сделав перебор в формате Логин:Логин я был удивлен тому, что подошло чуть больше 10 аккаунтов (из около 50 проверяемых).

Также одним из моих наблюдений стало то, что на получение информации о родителях и их детей из других классов (не привязанных к текущему аккаунту учителя) в JSON формате у меня не было прав, а вот скачать Excel документ я мог по любому классу.

Давайте вернемся к тестам. С помощью аккаунта учителя я смог проанализировать то, как можно получать ответы по нужному варианту. Это прекрасно работало на демонстрационном аккаунте. Чтобы не выдавать постоянно ответы своим одноклассникам, я написал бота EasyЦДЗ.

Популярность

Всё шло своим чередом: бот работал, оценки ставились. Но в один момент на моего бота стали подписываться очень много людей. Как я понял, кто-то из знакомых моего друга заснял тикток, который очень сильно завирусился (мой бот был первым в этой нише). Я не преследовал цели заработать с бота, но подключил систему донатов, чтобы если люди хотели, то могли отблагодарить за старания.

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

Конец

Таким образом всё продолжалось до осени. Информация дошла до МЭШ и баги стали активно фикситься. В итоге я был вынужден закрыть проект. В любом случае для меня это был очень классный и приятный опыт.

Спасибо что прочитали эту статью.

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.