• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Гостевая статья А почему рот в моккачино или как я получил возможность пить кофе бесплатно из-за оплошностей программистов

Совсем недавно в парижском Cité des Sciences et de l’Industrie прошла хакерская конференция LeHack. В этот день у меня была прекрасная возможность встретиться и пообщаться с большим количеством технически подкованных людей, настоящих профессионалов своего дела, а заодно и отведать бесплатной еды, которой всех угощали. Наевшись сверх нормы, я почувствовал усталось и решил отпить кофе - здесь и начинается эта история.

Введение

vodka.jpg


Вполне обычная кофемашина. Я заплатил за кофе кредитной картой и собрался уже уходить, но увидел это.

vodka.jpg


Здесь написано: «Загрузите приложение Coffee cApp и оплачивайте свои покупки со смартфона». Итак, это приложения на Android при помощи которого можно покупать кофе, я хакер, находящийся на хакерской конференции, и у меня много свободного времени. Пора заняться своим любимым делом!

vodka.png


Я скачал это невероятно *удобное* (судя по отзывам) приложение и начал им пользоваться. Следующие два часа оказались довольно продуктивными.

Account Takeover

vodka.png


Я создал аккаунт и в ответе от сервера увидел свой UserId.

vodka.png


После этого я сбросил пароль от учетной записи и вновь посмотрел на запрос. В нем я увидел параметр «Password», который был моим текущим паролем, параметр под названием «ConfirmPassword», который был моим новым паролем, и... Невероятно! Параметр с именем «UserUId». Его значение эквивалентно «UserId», которое я уже видел ранее, когда создавал учетную запись. Что произойдет, если я подменю свой UserUId на чужой? Давайте-ка попробуем!

Чтобы проверить, могу ли я сбросить пароль другой учетной записи, я создал еще одну учетку. Сбросил ее пароль и в POST-запросе к эндпоинту /User/ResetPassword заменил значение UserUId на UserUId своей первой учетной записи. Бинго, все работает! Пароль 1-го аккаунта сброшен!

Хорошо, Эллиот, это круто, но для захвата чужой учетной записи нам еще нужно иметь username жертвы.

Account enumeration

vodka.png


В первом запросе, сделанном во время сброса пароля, приложение отправляет ваше имя пользователя, которое совпадает с номером телефона, на свой сервер. Если это имя пользователя существует, вы получите 200 код ответа.

vodka.png


vodka.png


Если вы отправляете случайное имя пользователя, сервер выдает сообщение «UserNotExists».

Я отправил этот запрос в Burp Suite Intruder и... да! Ограничения со стороны сервера отсутствовали, можно было перебрать все допустимые имена пользователей (номер) и, таким образом, получить список валидных учеток. Объединив эти две уязвимости, мы можем взломать все учетные записи, которые есть в приложении.

Pin bruteforce
И последнее, но не менее важное: я обнаружил в приложении еще одну уязвимость. Когда вы создаете учетную запись, для ее активации, приложение отправляет вам код подтверждения в смс-сообщении.

vodka.png


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

Вывод
Не совершайте глупых ошибок с безопасностью и ваш кофе никто не выпьет.
 

woolf1514

Green Team
06.03.2017
181
191
BIT
1
Можно уточнить, чтоб перехватывать запросы/ответы потребовалось делать какую-то дешифровку?
В приложение не был вшит сертификат? Сервер принимал запросы без токенов? Ты просто хватал все через BurpSuite без какой-либо дополнительной магии?
 
  • Нравится
Реакции: leonardocs
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!