![](https://habrastorage.org/getpro/habr/upload_files/1a2/8cd/be6/1a28cdbe60016216542ecd3b6da12436.png)
Здравствуйте, Меня зовут Ахмад Халаби.
Я работаю в Resecurity - аналитической компании в области кибербезопасности, защищающей компании от всех типов угроз из списка Fortune 500.
Часть нашей работы, которую мы выполняем через наше подразделение Hunter Unit Operations, заключается в исследовании и выявлении новых "нулевых дней", атак и методов, которые позволяют угрожающим субъектам вызывать массовые заражения и утечки данных.
В этой статье я расскажу о том, как мне удалось найти ошибку, которая позволила раскрыть всю электронную почту пользователей крупной телекоммуникационной компании и завладеть всеми их учетными записями.
Эксплуатация функции "Забыли пароль"
Обычно, если вы забыли свой пароль, вы можете восстановить его, отправив код восстановления на свою электронную почту или номер телефона.
Во-первых, приложение заставляет вас добавить свой номер телефона в разделе "Забыли данные для входа". Я добавил номер телефона жертвы.
![Добавление номера телефона жертвы на странице "Забыли пароль" Добавление номера телефона жертвы на странице "Забыли пароль"](https://habrastorage.org/getpro/habr/upload_files/c22/6a6/73f/c226a673fe1a892ed7305bf566c34c0d.png)
Затем приложение предлагает на выбор два варианта отправки PIN-кода: на электронную почту или на номер телефона.
![Отправка PIN-кода на номер телефона жертвы или по электронной почте Отправка PIN-кода на номер телефона жертвы или по электронной почте](https://habrastorage.org/getpro/habr/upload_files/094/df5/291/094df52913cb15c11e6041684d4a0541.png)
Мы заметили, что номер телефона скрыт так же, как и адрес электронной почты.
В нашем случае у нас уже есть номер телефона жертвы, и мы хотим раскрыть его электронную почту.
Нам неважно, куда будет отправлен код, поскольку мы обойдем его позже, поэтому мы можем отправить его как на номер, так и на электронную почту.
![Отправка проверочного PIN-кода Отправка проверочного PIN-кода](https://habrastorage.org/getpro/habr/upload_files/320/224/dae/320224dae29537884bcc12cfaf93325e.png)
После нажатия на кнопку Send PIN мы заметим, что код будет отправлен. Использовать этот код мы не будем.
Эксплуатация процесса верификации PIN-кода:
С помощью техники Response Manipulation - манипулировать неправильным ответом на запрос кода и заменять его правильным ответом.
![Добавление случайного PIN-кода Добавление случайного PIN-кода](https://habrastorage.org/getpro/habr/upload_files/1ca/3cc/33b/1ca3cc33be6390a9009c63be6b714d80.png)
Я добавил произвольный PIN-код 1111 и перехватил запрос через burp.
![Проверка запроса PIN-кода Проверка запроса PIN-кода](https://habrastorage.org/getpro/habr/upload_files/f41/8d2/635/f418d263556f504aff08686065815fdd.png)
В приведенном выше запросе мы видим, что они разбивают 4-значный код на 4 пин-входа (pin1, pin2, pin3, pin4) и на 3 обычных пин-входа. Такое разделение сделано для защиты от перебора PIN-кода.
Когда я увидел приведенный выше запрос, я не стал проводить перебор. Вместо этого я перехватил ответ, как показано на рисунке ниже.
![Перехват ответа на запрос PIN-кода Перехват ответа на запрос PIN-кода](https://habrastorage.org/getpro/habr/upload_files/4a3/10e/65c/4a310e65c317120d5dceb3fd17265906.png)
После отправки запроса я проследил за его ответом и обнаружил следующий ответ с кодом состояния "700" и операцией "verify OTP", означающей, что запрос на верификацию не прошел, так как OTP был неверным.
![Неправильный OTP-код Неправильный OTP-код](https://habrastorage.org/getpro/habr/upload_files/574/236/468/57423646835e5d72e568f46c170bba6d.png)
Я просто подправил ответ, заменив {"code": "700", "operation": "VERIFYOTP"} на {"code": "200"} и переслал запрос.
![Замена неверного ответа на верный Замена неверного ответа на верный](https://habrastorage.org/getpro/habr/upload_files/fa5/33c/82a/fa533c82a1b01442ef1634fbe2919ec1.png)
После отправки запроса я был перенаправлен на страницу изменения пароля с указанием адреса электронной почты и подтверждением проверки PIN-кода.
![Ваше имя пользователя (адрес электронной почты раскрыт) Ваше имя пользователя (адрес электронной почты раскрыт)](https://habrastorage.org/getpro/habr/upload_files/2f4/43a/28d/2f443a28de3f5b4ba82671186163cf7c.png)
После того, как я попытался добавить новый пароль, я получил захват учетной записи.
![](https://habrastorage.org/getpro/habr/upload_files/7a4/6ef/cda/7a46efcdade39b91b188cfa5ae204cc9.png)
Влияние:
1. Мне удалось раскрыть электронную почту пользователей, найденную в базе данных телекоммуникационной компании. Угрожающие лица могут легко:
Собрать все телефонные номера, связанные с этой телекоммуникационной компанией.
Автоматизировать эту уязвимость, чтобы использовать ее на всех собранных телефонных номерах.
Продать все раскрытые частные электронные адреса в Dark Web.
Использовать их в массовых фишинговых кампаниях.
2. Мне удалось изменить пароль учетных записей в телекоммуникационной компании. Это означает получение полного захвата учетной записи, что могло легко привести к:
Финансовым потерям (пользователей).
Заключение:
В данном случае техника манипулирования ответами позволила не только раскрыть электронную почту, но и перенаправить меня на страницу изменения пароля, что позволило мне завладеть любой учетной записью, на которую я нацелился.
Исправление:
Исправление ошибки манипулирования ответами было недостаточно, необходимо было также исправить проблему авторизации при смене пароля, чтобы не допустить ее обхода.
Надеюсь, вам понравилась моя статья.
Вы можете подписаться на меня в: LinkedIn / Twitter / Instagram / My Website
Оригинал статьи - здесь.
Поддержите автора хлопками на Medium.
Перевод статьи был выполнен проектом перевод энтузиаста:
???? @Ent_TranslateIB - Телеграмм канал с тематикой информационной безопасности
???? @Ent_Translate - Инстаграм проекта
olegtsss
Каким образом backend схавал свой же ответ с исправленным содержанием?
anzay911
Похоже, тут фронтенд заставили поверить и отправить на форму сброса, а бэкенд ответил "ну надо так надо".
olegtsss
Я думал такое только в CTF бывает )
michael_v89
Как я понял, всё сводится к тому, что сервер при сбросе пароля не проверял, что PIN проверен. Подменили ответ от сервера фронтенду, чтобы фронтенд перешел на экран сброса пароля и отправил запрос. Но если есть возможность регистрации или свой аккаунт, узнать эндпойнт и формат запроса для сброса пароля можно и сделав нормальный сброс для своего аккаунта. В общем-то уязвимость и защита от нее очевидны на этапе разработки, если исходить из того, что пользователь может отправить любой запрос вручную.