REcollapse: фаззинг с использованием unicode-нормализации

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
⚠ Дисклеймер ⚠

Данный инструмент/метод создан/описан[/переведён] исключительно для образовательных и этических целей тестирования. Использование данного инструмента для атаки целей без предварительного взаимного согласия является незаконным. Разработчики [и переводчики] не несут никакой ответственности и не отвечают за любое неправильное использование или ущерб, причиненный этим инструментом.

В этом посте я расскажу о технике REcollapse. Я изучал её последние пару лет, чтобы обнаружить до странности простые, но эффективные уязвимости в защищённых объектах. Эта техника может быть использована для захвата учётных записей с нулевым взаимодействием, обнаружения новых обходных путей для брандмауэров веб-приложений и многого другого.

Этот пост преимущественно основан на моём выступлении на BSidesLisbon 2022 и посвящён запуску инструмента recollapse, который теперь доступен на GitHub. Это также то, что мы начали исследовать внутри Ethiack.

Работа с пользовательским вводом

Всё начинается с непредвиденного ввода. Современные приложения и API полагаются на валидацию, санацию и нормализацию. Обычно это делается с помощью пользовательских регулярных выражений и широко используемых библиотек, которые проверяют и преобразуют типичные форматы пользовательского ввода, такие как адреса электронной почты, URL и другие.

Вот несколько примеров валидации и санации:

Валидация (Python)

>>> re.match(r"^\S+@\S+\.\S+$", "aa.com")
>>> re.match(r"^\S+@\S+\.\S+$", "a@a.com")
<re.Match object; span=(0, 7), match='a@a.com'>

Санация (PHP)

> htmlspecialchars("input'\"><script>alert(1);</script>");
= "input&#039;&quot;&gt;&lt;script&gt;alert(1);&lt;/script&gt;"

Цель всегда состоит в том, чтобы предотвратить сохранение опасного пользовательского ввода. Рассмотрим приложение, которое отвергает специальные символы в имени пользователя в конечной точке /signup. Злоумышленник не может внедрить полезную нагрузку в имя, но это не означает, что в дальнейшем имя не будет санировано, что может привести к уязвимостям, таким как XSS. В этом случае мы можем попытаться найти альтернативные конечные точки, которые принимают специальные символы в одном параметре. Именно так я поступил с @itscachemoney в 2019 году в Dropbox, или же… мы можем попытаться обойти регулярное выражение "чёрным ящиком", как я покажу ниже в этом посте.

Нормализация же используется для обеспечения единообразия пользовательского ввода. Это удобно для приложений с несколькими учетными записями, чтобы избежать дублирования адресов электронной почты, таких как a@a.com / A@a.COM / á@ª.com и так далее. Разные библиотеки дают различные выходные нормализованные данные, как вы можете видеть в этих примерах, что может быть полезно для определения технологий, используемых бэкендом.

Нормализация (PHP)

> iconv("UTF-8", "ASCII//TRANSLIT", "Ãéï°úç");
= "~A'e\"i^0'uc"

Нормализация (Python)

>>> unidecode.unidecode("Ãéï°úç")
'Aeideguc'

Более подробную информацию о нормализации, если вы не знакомы с ней, можно найти здесь: https://

Источник: https://habr.com/ru/post/714794/


Интересные статьи

Интересные статьи

Привет, Artisans, меня зовут Альберто Росас, я пользуюсь Laravel уже много лет, и одна из самых полезных и стоящих вещей, которые я узнал, — это создание правильных тестовых сьютов для своих приложени...
При обработке медицинских данных требуется определять частоту сердечных сокращений (ЧСС). Большинство методик расчёта ЧСС использует определение пиков в графике сердечных сокращений и подсчёта длитель...
Математическая морфология — это теория, которая зародилась еще в 1964 году, когда Джордж Матерон изучал соотношение геометрии пористой среды и их проницаемости. В то же в...
Инструкция для создания файлов, подписанных ЭЦП, с использованием ПО КриптоПро Читать далее
Мы публикуем видео с прошедшего мероприятия. Приятного просмотра.