Полный захват аккаунта в одной из крупнейших компаний электронной коммерции
Сегодня я хочу поделиться своим опытом обнаружения уязвимости, позволяющей захватить учетную запись (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. Эта настройка позволяет мне захватывать учетные данные жертвы или информацию о сессии, демонстрируя потенциальную уязвимость открытого перенаправления или кражи учетных данных.