Laravel Cookie Forge и Декодер
Декодируйте зашифрованные AES cookie Laravel или подделывайте подписанные — для CTF и авторизованного тестирования.
Декодировать 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. Получите cookie: перехватите запрос в Burp Suite или DevTools браузера и скопируйте значение cookie laravel_session.
- 2. Получите APP_KEY: найдите его в .env цели, в утекшем конфиге или подберите по известному открытому тексту.
- 3. Декодировать: вставьте оба значения выше и декодируйте, чтобы увидеть содержимое сессии (ID пользователя, CSRF-токен, flash-данные).
- 4. Изменить и подделать: измените полезную нагрузку (например, поднимите user_id), вставьте APP_KEY и создайте новую корректно подписанную cookie.
- 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 — вставляйте именно так, как он там отображается.