Привет всем,

Сегодня я хочу поделиться своим опытом обнаружения уязвимости, позволяющей захватить учетную запись (ATO) с помощью отравления ссылки для сброса пароля. Во время участия в программе, охватывающей миллионы пользователей — крупной компании в сфере электронной коммерции, которую я буду называть redacted.com — я тестировал функции аутентификации и наткнулся на функцию «Запрос на сброс пароля». Эта функция предлагает пользователям ввести адрес электронной почты для получения ссылки для сброса пароля.

Когда я начал исследовать эту программу, я находился в аэропорту в ожидании рейса. Имея немного свободного времени, я решил углубиться в вопросы безопасности программы. Если бы я знал, что эта неформальная сессия тестирования приведет к важному открытию! :))

Начнем нашу историю, SQL-инъекция

Поскольку существует параметр электронной почты, это указывает на наличие базы данных на стороне сервера для обработки этих данных, что делает параметр email лучшим местом для тестирования на уязвимость SQL-инъекции.

Команда для выполнения тестирования с помощью SQLMap:

sqlmap -r testsql --dbs --tamper=space2comment,space2morehash --batch

Брутфорс параметров:

Во время тестирования мое внимание привлекла интересная деталь: все параметры в теле запроса начинались с префикса dwfrm_requestpassword. Этот уникальный префикс вызвал у меня любопытство, и я подумал: «Что если попробовать перебрать эти параметры одним запросом?» Это подтолкнуло меня к экспериментам, чтобы выяснить, может ли манипуляция параметрами привести к неожиданному поведению или выявить потенциальные уязвимости.

Сначала я загрузил список параметров из базы данных Arjun по следующей ссылке: https://raw.githubusercontent.com/s0md3v/Arjun/refs/heads/master/arjun/db/large.txt. Затем я открыл этот список в Sublime Text, чтобы начать настраивать его в соответствии с моим подходом к тестированию.

После открытия списка параметров в Sublime Text я использовал регулярное выражение для замены, чтобы добавить префикс dwfrm_requestpassword_ в начале каждой строки. Для этого я использовал символ ^, чтобы указать начало строки, и добавил данный префикс. Также я добавил =evil в конце каждого параметра, используя символ $ для обозначения конца строки, как показано на скриншоте. Эта настройка позволяет мне тестировать различные комбинации параметров с общим префиксом и суффиксом, что потенциально может выявить интересные поведенческие особенности системы.

Я скопировал все измененные параметры из Sublime Text и вставил их построчно в инструмент Repeater в Burp Suite. Затем я нажал «Change Body Encoding», чтобы убедиться, что параметры были правильно отформатированы для запроса. Эта настройка позволила мне систематически тестировать каждый параметр в Burp, что упростило анализ ответов и проверку на наличие необычного поведения или уязвимостей.

После отправки измененных запросов в Burp и анализа ответов я получил письмо с ссылкой для сброса пароля. К моему удивлению, ссылка содержала мой пользовательский путь /evil. Затем я отфильтровал и протестировал различные параметры и в конечном итоге обнаружил, что уязвимым параметром оказался dwfrm_requestpassword_return. Этот параметр позволил мне внедрить пользовательские значения в ссылку для сброса, выявив потенциальную уязвимость открытого перенаправления или инъекции.

Я изменил значение уязвимого параметра dwfrm_requestpassword_return на свою ссылку Burp Collaborator и отправил измененную ссылку для сброса жертве. Как видно, когда жертва кликает на эту «волшебную ссылку», вместо того чтобы просто войти в систему, она перенаправляется на мой сервер Collaborator. Эта настройка позволяет мне захватывать учетные данные жертвы или информацию о сессии, демонстрируя потенциальную уязвимость открытого перенаправления или кражи учетных данных.

Мы в телеграме

Комментарии (6)


  1. seyko2
    05.11.2024 10:08

    Как то совсем непонятно. Обычно же ссылки для сброса пароля на email приходят. Надо, значит, какой то реальный email указать. IP, с которого запрос приходит, да и информация об оборудовании, тоже фиксируется. Если сменил комп, владельцу аккаунта присылается сообщение об входе с нового устройства Тут же вроде и попытки войти (сменить пароль) нет. Про имя аккаунта - тоже ничего не сказано: кому то пересылается полученное письмо (явно не с адреса сервиса) и тот должен эту ссылку нажать? С какой стати? (если он не заказывал сброс). Странная и путанная статья.


    1. GORrand
      05.11.2024 10:08

      Насколько я понял. Суть в том, что мы для целевой атаки на user@example.com отправляем ссылку на восстановление от имени легитимного сервера, но которая ведёт на наш ресурс.


      1. xSVPx
        05.11.2024 10:08

        Так при восстановлении старый пароль не вводишь :).

        Ну и если юзеры готовы где попало его вводить, то надо брутфорсить юзеров, а не систему... Если ты не просил ссылку на сброс пароля, тебе пришло письмо, то зачем бы ты стал вообще ходить туда ? И зачем набирать там старый пароль ?


        1. GORrand
          05.11.2024 10:08

          Логично.
          Но зависит от того, какую форму сделать на стороне злоумышленника. Простор для соц.инженерии и фишинга огромный. Не 100% вариант, согласен, и брутить пользаков надо, да.


        1. donatello2005
          05.11.2024 10:08

          Я думаю, тут речь о другом.

          Цепочка действий:

          1. Мы инициируем отправку атакуемому нами пользователю на его почту сообщения по сбросу паролю со стороны официального сервера программы, но при этом подменяем хост в урле на свой

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

          3. Пользователь переходит по нашей немного изменённой ссылке, которая ведёт уже на наш сервер, но при этом содержит реальный действительный токен для сброса пароля, сгенерированный официальным сервером программы - и мы в этот момент получаем этот токен

          4. После этого наш скрипт на нашем сервере за секунду заходит на реальную страницу сброса пароля на официальном сервере программы, и, используя полученный токен для сброса пароля, меняет пароль атакуемого пользователя на свой, после чего получает полный доступ к аккаунту

            В результате получение полного доступа к аккаунту происходит по одному нажатию пользователем на одну ссылку. Достаточно элегантно.

            Да и это довольно частая ситуация, когда пользователь при получении ссылки на сброс пароля - переходит по ней, чтобы "сменить пароль на всякий случай".


          1. xSVPx
            05.11.2024 10:08

            2 - вы серьезно :)?

            Я прям даже не знаю. На пятнадцатилетних рассчитано ? Потому что те, кто постарше помнят времена, когда в поле from могло быть совершенно что угодно. Не проверяли его тогда толком.

            Нормальный пользователь не пойдет вообще по ссылке, если сам не просил письма.

            3 и 4 будет работать только если есть токен которым можно установить пароль, нормальная система после перехода пришлет вам новый пароль по почте.

            Атаковать так можно, но это на уровне "звоню в охрану, очень срочно надо, прочитайте мне что там на коробочке написано кроме zyxel"