[Инструменты](https://hackindex.io/ru/tools)
## Laravel Cookie Forge и Декодер

Декодируйте зашифрованные AES cookie Laravel или подделывайте подписанные — для CTF и авторизованного тестирования.

Laravel шифрует все cookie с помощью AES-256-CBC (или AES-256-GCM в Laravel 10+), используя APP_KEY из файла .env. Зашифрованное значение — это base64-кодированный JSON, содержащий IV, зашифрованный текст и подпись HMAC-SHA256. Этот инструмент расшифровывает cookie для отображения полезной нагрузки сессии — ID пользователя, роль, CSRF-токен — проверяет подпись HMAC и позволяет создать новый корректный подписанный cookie. Вся обработка происходит на стороне сервера в PHP. Ничего не сохраняется и не записывается в журнал.

## Декодировать Cookie

Расшифровать и проверить существующий cookie

## Подделать Cookie

Сгенерировать допустимый подписанный cookie Laravel

## Как это работает

Laravel шифрует cookie алгоритмом AES-256-CBC (или вариантами AES-128-CBC / GCM) с помощью APP_KEY из файла .env. Зашифрованное значение — это JSON в base64, содержащий IV, шифротекст и подпись HMAC-SHA256. Инструмент расшифровывает данные и проверяет подпись либо создает новую корректную cookie с нуля. Обе операции выполняются на сервере на PHP и ничего не сохраняют.

1. 1. Получите cookie: перехватите запрос в Burp Suite или DevTools браузера и скопируйте значение cookie laravel_session.
2. 2. Получите APP_KEY: найдите его в .env цели, в утекшем конфиге или подберите по известному открытому тексту.
3. 3. Декодировать: вставьте оба значения выше и декодируйте, чтобы увидеть содержимое сессии (ID пользователя, CSRF-токен, flash-данные).
4. 4. Изменить и подделать: измените полезную нагрузку (например, поднимите user_id), вставьте APP_KEY и создайте новую корректно подписанную cookie.
5. 5. Внедрить: замените исходную cookie в запросе и отправьте его снова.

## Что такое зашифрованные cookie Laravel?

Laravel автоматически шифрует и подписывает все cookie, установленные через Cookie::make() или хелпер cookie (если они не исключены через $except в middleware EncryptCookies). Cookie сессии (по умолчанию laravel_session) использует драйвер сессии cookie только при SESSION_DRIVER=cookie; иначе она содержит лишь зашифрованный указатель на ID сессии. В CTF-заданиях приложения часто используют драйвер cookie, чтобы хранить весь payload сессии прямо в cookie.

iv

Вектор инициализации. Генерируется случайно для каждой операции шифрования. Кодируется в Base64 внутри JSON-payload.

value

Зашифрованный AES шифротекст. Кодируется в Base64. openssl_encrypt() с flags=0 (по умолчанию) возвращает base64 напрямую.

mac

HMAC-SHA256 от base64(iv), объединённого с base64(value), с ключом из сырых байтов APP_KEY. Отсутствует для GCM-шифров.

tag

Тег аутентификации GCM. Используется вместо HMAC для шифров AES-256-GCM и AES-128-GCM (Laravel 10+).

## FAQ

Отправляет ли это мой cookie или APP_KEY куда-либо?

Нет. Расшифровка и шифрование происходят на стороне сервера в PHP с использованием openssl_decrypt / openssl_encrypt. Данные не хранятся, не записываются в журнал и не передаются третьим лицам.

Что такое драйвер сессий cookie?

Когда в .env задано SESSION_DRIVER=cookie, Laravel сериализует весь массив сессии, шифрует его и сохраняет прямо в cookie браузера. Это часто встречается в CTF-заданиях. Большинство продакшн-приложений используют драйверы file, database или Redis, где в cookie хранится только зашифрованный идентификатор сессии.

Как работает подпись HMAC?

Laravel вычисляет hash_hmac("sha256", base64(iv) . base64(ciphertext), raw_key). И IV, и шифротекст, используемые при вычислении MAC, — это их base64-версии из JSON, а не сырые байты.

Какой шифр выбрать при подделке?

Подберите шифр под тот, что использует целевое приложение. По умолчанию в Laravel 5-9 это AES-256-CBC. Laravel 10+ поддерживает AES-256-GCM. Определить можно по наличию поля tag в декодированной структуре cookie (у GCM поле tag непустое; у CBC вместо него mac).

Расшифровка не удаётся даже с правильным APP_KEY — почему?

Убедитесь, что вставляете сырое значение cookie, а не URL-кодированную версию. Некоторые фреймворки двойно кодируют cookie. Также проверьте формат ключа: Laravel хранит его как base64:xxx в .env — вставляйте именно так, как он там отображается.
