가이드

Cookie

Cookie 탭은 프레임워크가 서명한 세션 쿠키를 위한 워크벤치입니다: Flask(itsdangerous), Rack, Django. 쿠키를 파트로 디코드하고, 후보 서명 secret을 검증하거나 워드리스트로 브루트포스한 뒤, 세션을 편집해 재서명합니다. 파트를 보여주기만 하는 Decoder의 읽기 전용 cookie-decode / flask-decode / rack-decode / django-decode 컨버터보다 한 걸음 더 나아갑니다.

어디서든(예: History 상세 패널, Notes 등) 쿠키를 선택하고 SpaceSend to Cookie를 누르면 그 쿠키로 새 워크벤치 서브탭을 채웁니다. 세션은 휘발성이라 디스크에는 아무것도 기록되지 않습니다. 이 탭은 기본적으로 바 밖에 있습니다. **0**을 누르고 "cookie"를 입력하거나, 커맨드 팔레트(Ctrl-PGo to Cookie)를 쓰거나, Preferences에서 슬롯을 내주세요.

두 개의 렌즈

하나의 세션, 두 개의 뷰이며 Ctrl-T로 전환합니다. 각 렌즈의 최상위 카드 테두리에 전환 칩이 있습니다(INPUT에는 ^T:→FORGE, PAYLOAD에는 ^T:→DECODE). 클릭해도 키와 똑같이 동작합니다:

  • Decode: INPUT에 쿠키를 붙여 넣으면 파트가 DECODED에 실시간으로 디코드됩니다. OPTIONS는 읽는 방식을 고정합니다: 포맷(Ctrl-Aauto / flask / rack / django 순환, auto는 문장 부호로 감지), Django HMAC 알고리즘, 서명 salt. SECRET은 후보 키를 담으며, 입력하는 동안 검증 결과(✓ verified / ✗ bad key)가 실시간으로 표시됩니다. c를 누르면 크랙합니다(아래 참고).
  • Forge: PAYLOAD에서 세션을 편집하고(Flask/Django는 JSON 객체, Rack은 불투명한 base64 값), SECRET을 설정하면 재서명된 쿠키가 OUTPUT에 실시간으로 나타납니다.

SpaceLoad decoded payload는 현재 Decode 쪽에서 디코드된 payload를 Forge 편집기로 불러옵니다. 그래서 값 하나를 손보고 두 동작만으로 재서명할 수 있습니다. 결과는 y로(위조된 쿠키는 SpaceCopy forged cookie로) 복사하세요.

디코드는 하지만 검증은 하지 않는 JWT 탭과 달리, Cookie에는 secret 경로가 있습니다. SECRET의 는 입력한 키가 실제로 이 쿠키를 서명한다는 뜻입니다. Forge는 지정한 secret, salt, 알고리즘으로 실제로 재서명합니다.

세 가지 포맷

포맷 형태 서명
Flask value.timestamp.signature itsdangerous HMAC(값 앞의 .는 zlib 압축 표시).
Rack base64--40자리 hex Base64-Marshal 값 + HMAC-SHA1. 값이 불투명한 바이트라 Forge는 JSON이 아니라 base64로 받습니다.
Django value:timestamp:signature django.core.signing, salt가 섞인 HMAC. 세션 쿠키는 기본이 아닌 salt로 서명합니다. 아래 참고.

secret 크랙

SECRET 필드는 c(크랙)의 소스를 겸하므로, 별도 프롬프트가 없습니다:

  • 파일 경로는 워드리스트로 읽습니다(한 줄에 후보 하나);
  • 콤마로 구분된 목록(admin,secret,changeme)은 인라인으로 시도합니다;
  • 단일 secret은 원소가 하나인 목록입니다. 실시간 검증과 같은 검사를 크랙으로 표현한 것입니다.

성공하면 필드가 찾아낸 secret으로 바뀌고 결과가 로 뒤집혀, 그대로 Forge 렌즈로 이어갈 수 있습니다.

Django 세션 쿠키(django.contrib.sessions)는 기본이 아닌 salt로 서명되므로, 기본 salt로 크랙하면 실패합니다. 포맷이 Django로 해석되면 OPTIONSsalt:signing 배지가 나타납니다. 이 배지를 클릭하거나(SpaceToggle Django salt) salt 필드를 django.contrib.sessions.backends.signed_cookies로 뒤집으면 verify·crack·forge가 모두 그 salt로 서명됩니다. 직접 아무 salt나 입력할 수도 있습니다. CLI의 --salt도 마찬가지입니다.

헤드리스

gori run cookie eyJ1c2Vy...                                  # 디코드 (자동 감지, 기본)
gori run cookie eyJ1c2Vy... --verify --secret s3cret         # 이 secret이 서명하는가?
gori run cookie eyJ1c2Vy... --crack --wordlist words.txt     # secret 브루트포스
gori run cookie eyJ1c2Vy... --crack --secrets a,b,s3cret     # …또는 인라인 목록
gori run cookie --forge --type flask --payload '{"admin":true}' --secret s3cret
cat cookie.txt | gori run cookie                             # stdin에서 쿠키

쿠키는 인자나 stdin에서 옵니다. 프로젝트나 캡처는 관여하지 않습니다(순수 로컬 연산). --type은 포맷을 고정하고(기본: 자동 감지), --salt는 Flask/Django 서명 salt를, --algorithm은 Django HMAC 알고리즘(sha256 또는 sha1)을 지정하며, --formattext 또는 json입니다. --verify/--crack에서는 이 값을 비워 두면 쿠키의 서명 길이로 알고리즘을 자동 판별하므로, SHA-1을 쓰는 구형 앱이 잘못된 키로 오인되지 않습니다(--forgesha256 기본). Flask/Django --forge--payload JSON을, Rack은 불투명한 --value를 받고, --timestamp UNIX는 위조한 쿠키에 현재 시각 대신 그 초를 찍습니다. CLI 레퍼런스를 참고하세요.

MCP에서는 cookie_decode / cookie_verify / cookie_crack / cookie_forge가 네트워크나 상태를 건드리지 않는 읽기 도구라, --read-only에서도 사용할 수 있습니다.

다음 단계

  • JWT: JSON Web Token을 위한 형제 워크벤치
  • Decoder: 더 긴 변환 체인 안에서 쿠키 디코드
  • Repeater & Fuzzer: 위조한 쿠키를 대상에 발사