Bug Bounty, Bug Bounty Bootcamp, Bug Hunting

#16 Bug Bounty. Элементы управления интернет-безопасностью. Кодировка контента.

Здравствуйте, дорогие друзья.

Теперь, когда у Вас есть общее представление о том, как информация передается через Интернет, давайте углубимся в некоторые фундаментальные меры безопасности, которые защищают ее от злоумышленников. Чтобы эффективно искать ошибки, Вам часто придется придумывать творческие способы обойти эти элементы управления, поэтому сначала Вам нужно понять, как они работают.


Кодировка контента

Данные, передаваемые в HTTP-запросах и ответах, не всегда передаются в виде обычного текста. Веб-сайты часто кодируют свои сообщения разными способами, чтобы предотвратить повреждение данных.
Кодирование данных используется как способ надежной передачи двоичных данных между компьютерами, имеющими ограниченную поддержку различных типов контента. Символы, используемые для кодировки, — это обычные символы, которые не используются в качестве контролируемых символов в интернет-протоколах. Поэтому, когда Вы кодируете контент, используя распространенные схемы шифрования, Вы можете быть уверены, что Ваши данные дойдут до места назначения неповрежденными. Напротив, когда Вы передаете свои данные в исходном состоянии, они могут быть испорчены, поскольку интернет-протоколы неправильно интерпретируют специальные символы в сообщении.

Кодировка Base64 — один из наиболее распространенных способов кодировки данных. Его часто используют для передачи изображений и закодированной информации в веб-сообщениях. Это версия строки «Кодировка контента» в кодировке Base64:


Q29udGVudCBFbmNvZGluZw==

Набор символов кодировки Base64 включает символы алфавита верхнего регистра от A до Z, символы алфавита нижнего регистра от a до z, числовые символы от 0 до 9, символы + и / и, наконец, символ = для заполнения. Кодировка Base64url — это модифицированная версия base64, используемая для формата URL. Она похожа на base64, но использует другие небуквенно-цифровые символы и не требует заполнения.

Другой популярный метод кодировки — шестнадцатеричное кодирование. Шестнадцатеричная кодировка, или hex, — это способ представления символов в формате base-16, где символы находятся в диапазоне от 0 до F. Шестнадцатеричная кодировка занимает больше места и менее эффективна, чем base64, но обеспечивает более удобочитаемую кодировку. Это шестнадцатеричная версия строки «Кодировка контента»; вы можете видеть, что она занимает больше символов, чем её аналог в base64:

436f6e74656e7420456e636f64696e67

Кодировка URL — это способ преобразования символов в формат, который легче передавать через Интернет. Каждый символ в строке, закодированной в URL-адресе, может быть представлен назначенным ему шестнадцатеричным номером, которому предшествует символ %. Дополнительную информацию о кодировании URL-адресов см. в Википедии: https://en.wikipedia.org/wiki/Percent-encoding.
Например, слово localhost может быть представлено его эквивалентом в URL-кодировке %6c%6f%63%61%6c%68%6f%73%74. Вы можете рассчитать эквивалент имени хоста в URL-кодировке, используя калькулятор URL-адресов, например URL-декодирование и кодирование (https://www.urlencoder.org/).

Мы рассмотрим несколько дополнительных типов кодировки символов — восьмеричную кодировку и кодировку dword — когда будем обсуждать SSRF. Когда Вы видите закодированный контент во время исследования сайта, всегда пытайтесь декодировать его, чтобы узнать, что веб-сайт пытается понять. Вы можете использовать декодер Burp Suite для декодирования закодированного контента. Мы расскажем, как это сделать, в следующей главе. Альтернативно вы можете использовать CyberChef (https://gchq.github.io/CyberChef/) для декодирования как контента в формате Base64, так и других типов закодированного контента.
Серверы иногда также кодируют свой контент перед передачей. Это сохраняет конфиденциальность данных между клиентом и сервером, и предотвращает подслушивание сообщений кем-либо, кто перехватывает трафик.

Управление сеансами и файлы cookie HTTP

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

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

After you log in, the server creates a session for you and issues a session ID, which uniquely identifies a session.

Большинство веб-сайтов используют файлы cookie для передачи информации о сеансе в HTTP-запросах. HTTP-куки — это небольшие фрагменты данных, которые веб-серверы отправляют в Ваш браузер. Когда Вы входите на сайт, сервер создает для Вас сеанс и отправляет идентификатор сеанса в Ваш браузер в виде файла cookie. После получения файла cookie Ваш браузер сохраняет его и включает в каждый запрос к тому же серверу (рисунок ниже).

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

Your session ID correlates with session information that is stored on the server.

На этом все. Всем хорошего дня!

Цикл статей по Bug Bounty.