Привет всем,
Сегодня я хочу поделиться своим опытом обнаружения уязвимости, позволяющей захватить учетную запись (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. Эта настройка позволяет мне захватывать учетные данные жертвы или информацию о сессии, демонстрируя потенциальную уязвимость открытого перенаправления или кражи учетных данных.
seyko2
Как то совсем непонятно. Обычно же ссылки для сброса пароля на email приходят. Надо, значит, какой то реальный email указать. IP, с которого запрос приходит, да и информация об оборудовании, тоже фиксируется. Если сменил комп, владельцу аккаунта присылается сообщение об входе с нового устройства Тут же вроде и попытки войти (сменить пароль) нет. Про имя аккаунта - тоже ничего не сказано: кому то пересылается полученное письмо (явно не с адреса сервиса) и тот должен эту ссылку нажать? С какой стати? (если он не заказывал сброс). Странная и путанная статья.
GORrand
Насколько я понял. Суть в том, что мы для целевой атаки на user@example.com отправляем ссылку на восстановление от имени легитимного сервера, но которая ведёт на наш ресурс.