[Перевод] Обход OTP на крупнейшем индийском сайте для обмена видео

Я нашел сайт социальной сети, позволяющий пользователям делиться видео, который был аналогичен TikTok и имел более 50 миллионов активных пользователей. Я решил не разглашать его название и будем обозначать его как example.com.

Начало атаки

Я начал атаку с того, что собрал некоторую информацию о целевом сайте. Зарегистрировав учетную запись, я приступил к поиску Dashboard (панели управления). К моему удивлению, я не смог его найти, что помешало мне продолжить изучение, поскольку я обычно охочусь за XSS.

Но давайте попробуем что-то на странице авторизации…

Страница входа (изменена по соображениям безопасности)

Страница входа (изменена по соображениям безопасности)

На странице входа была возможность авторизации с использованием номера телефона. Пользователь вводит свой номер мобильного телефона и четырехзначный OTP, который он получает.

Я решил попробовать провести brute force на метод OTP с помощью вкладки Intruder.

Запрос, отправленный на уязвимый сайт с неверным OTP

Запрос, отправленный на уязвимый сайт с неверным OTP

Я отправил запрос, но, к сожалению, пакеты запросов были заблокированы, как только их количество достигло 10. Надо признать, это была хорошая реализация защиты.

Атака с использованием Intruder для брутфорса OTP

Атака с использованием Intruder для брутфорса OTP

Я решил не сдаваться в попытках обойти проверку OTP. Попробовал еще раз: перешел к созданию учетной записи и снова попытался выполнить брутфорс OTP, но вновь потерпел неудачу. После пары порций кофеина я решил проанализировать запрос и ответ, используя опцию Action > Do intercept > Response to this request. Этот метод позволяет атакующему модифицировать ответ, отправляемый в браузер.

d5510b00a4cf3b04790c8e9f9f652508.png

Я отправил новый запрос на форму Create Account с другим номером телефона и ввел правильный OTP, который получил. Используя Do Intercept Response, я начал анализировать ответ. К моему удивлению, ответ оказался предельно простым и выглядел следующим образом:

4067e493daec56bb3250cd01627033c0.png

Ответ для Valid OTP

{«data»:{«det»:{}, «blocks»:[]}, «gsc»:»700»}

Честно говоря, у меня не было представления, что это означает. Однако я выяснил, что этот код используется для получения данных пользователя, если введен правильный OTP.

Затем я решил проанализировать ответ с Invalid OTP.

8cb6619df9044024f3b974e56780c702.png

{«gsc»:»615», «message»: «Invalid verification code»}

Теперь я понял, что именно этот фрагмент используется для проверки OTP. Чтобы доказать работоспособность уязвимости, я решил зарегистрироваться с использованием номера телефона своего друга, ввел неправильный OTP и просто удалил фрагмент с сообщением об ошибке Invalid verification code, заменив его на корректный фрагмент для валидного OTP, перехватив ответ.

aaeb19b6f2984e7842784029becd9f08.png

Успех!

Мне удалось создать учетную запись, используя номер телефона друга, даже без корректного OTP. Это четко показывает, что я могу создать учетную запись с любым номером телефона без проверки OTP.

Урок усвоен!

Исследователи часто пытаются осуществить bruteforce поля OTP, но забывают анализировать ответ, отправляемый браузеру. Экспериментируйте с ответами и добивайтесь успехов в поиске уязвимостей.

Таймлайн:

  • Октябрь 2019: Отправлено письмо о проблеме.

  • Ноябрь 2019: Отправлено письмо о проблеме.

  • Декабрь 2019: Отправлено письмо о проблеме.

  • 2020: Все еще отправляю письма!

Life-Hack — Жизнь-Взлом

© Habrahabr.ru