펜리젠트 헤더

JWT 토큰 디코딩 튜토리얼: 도구, 단계 및 모범 사례

JWT를 디코딩한다는 것이 실제로 의미하는 것

JWT를 디코딩한다는 것은 Base64URL로만 인코딩된 헤더와 페이로드를 추출하여 토큰 내부의 알고리즘, 메타데이터 및 클레임을 드러내는 것을 의미합니다. 이 프로세스는 다음을 수행합니다. not 진위 여부를 확인합니다. 누구나 JWT를 디코딩할 수 있지만 서명만 확인 토큰이 신뢰할 수 있는지 여부를 결정합니다. 이러한 구분은 보안 인증 및 침투 테스트에 필수적입니다.

JWT 토큰 디코딩 튜토리얼 펜리전트

JWT 디코딩이 내부적으로 작동하는 방식

JSON 웹 토큰은 다음으로 구성됩니다:

css

header.payload.signature 헤더와 페이로드는 모두 Base64URL로 인코딩된 JSON 객체입니다. 예를 들어

json

// 헤더

{

"alg": "HS256",

"typ": "JWT"

}

// 페이로드

{

"username": "admin",

"role": "슈퍼유저"

}

수동 디코딩에는 Base64URL 작업만 필요합니다:

python

import base64, json

def decode_part(segment):

패딩 = 세그먼트 + "=" * (-len(세그먼트) % 4)

반환 json.loads(base64.urlsafe_b64decode(padded))

헤더, 페이로드, _ = 토큰.분할(".")

print(decode_part(header))

print(decode_part(payload))

이는 보안에 대한 기본적인 진실을 보여줍니다: JWT 디코딩은 신뢰를 의미하지 않습니다.. 합법적인 인증에는 서명, 발급자, 대상, 만료 및 서명 알고리즘을 확인해야 합니다.

JWT 토큰

JWT 토큰 디코딩을 위한 인기 도구

도구링크
JWT.io실시간 디코딩, 빠른 실험https://jwt.io
슈퍼토큰 디코더깔끔하고 개발자 친화적인 UIhttps://supertokens.com/jwt-encoder-decoder
Auth0 토큰 디버거엔터프라이즈급 인증https://auth0.com/docs/tokens
PyJWTCLI + Python 라이브러리https://pyjwt.readthedocs.io
jwt-decode(JS)경량 브라우저 측 디코더https://www.npmjs.com/package/jwt-decode

펜테스트에서 본 실제 JWT 공격 사례

공격자가 서명 결함, 취약한 비밀 및 안전하지 않은 유효성 검사와 결합하면 JWT 디코딩이 위험해집니다. 다음은 실제 교전에서 자주 나타나는 공격 시나리오입니다.

"alg: none" 서명 바이패스

이전 라이브러리에서는 서명되지 않은 JWT를 허용했습니다:

json

{

"alg": "none",

"typ": "JWT"

}

공격자는 서명을 완전히 제거하고 비밀 없이 인증할 수 있습니다.

약한 비밀 무차별 대입(HS256)

개발자는 종종 다음과 같은 비밀을 사용합니다:

nginx

비밀

admin123

비밀번호

공격자는 해시캣을 사용합니다:

css

hashcat -a 0 -m 16500 token.hash wordlist.txt

알고리즘 혼동(RS256 → HS256)

공격자:

  1. 에서 알고리즘을 변경합니다. RS256HS256
  2. 서버의 공개 키를 HMAC 비밀로 사용합니다.
  3. 관리자 역할을 부여하는 유효한 토큰을 위조합니다.

이는 지금까지 발견된 JWT 공격 중 가장 영향력 있는 공격 중 하나로 남아 있습니다.

RS256 → HS256

XSS를 통한 토큰 도용

JWT가 다음 위치에 저장되어 있는 경우 로컬 스토리지공격자가 이를 훔칠 수 있습니다:

자바스크립트

<script>

fetch("" + localStorage.token);

</script>

토큰 노출로 이어지는 CORS 구성 오류

CORS 정책이 와일드카드를 허용하는 경우 브라우저 요청은 공격자가 제어하는 도메인으로 JWT 쿠키를 유출할 수 있습니다.

수명이 긴 모바일 토큰의 리플레이 공격

공격자는 다음에서 토큰을 추출합니다:

  • 암호화되지 않은 로컬 스토리지
  • 루팅된 기기
  • 안전하지 않은 캐시

리플레이는 MFA를 완전히 우회할 수 있습니다.

다국어 JWT 디코딩 및 인증 코드

Node.js

자바스크립트

const jwt = require("jsonwebtoken");

const decoded = jwt.verify(token, PUBLIC_KEY, {

알고리즘: ["RS256"],

발급자: "auth.example.com",

audience: "example.com"

});

console.log(decoded);

이동

go

토큰, 오류 := jwt.Parse(tokenString, func(t *jwt.Token) (인터페이스{}, 오류) {

반환 []byte("secret"), nil

})

Rust

let decoded = decode::(

토큰,

&DecodingKey::from_secret(secret.as_ref()),

&Validation::new(알고리즘::HS256)

);

펜테스터를 위한 수동 JWT 디코딩 워크플로

펜 테스트 중에 JWT 디코딩을 통해 드러납니다:

  • 일반 텍스트로 저장된 권한
  • 누락 exp 또는 iat
  • 잘못 구성된 알고리즘
  • 페이로드의 민감한 데이터
  • 가능한 권한 상승 벡터

테스터는 이렇게 액세스 제어 오류를 식별하고 역할을 에스컬레이션합니다.

수동 자바스크립트 디코더(라이브러리 없음)

자바스크립트

함수 decode(seg) {

seg = seg.replace(/-/g, "+").replace(/_/g, "/");

세그 += "=".repeat((4 - seg.length % 4) % 4);

JSON.parse(atob(seg))를 반환합니다;

}

고급 JWT 공격 체인(레드팀 시나리오)

JWT + IDOR → 전체 계정 인수인계

흐름:

  1. JWT 디코딩
  2. 변경 "sub": "501""sub": "1"
  3. 재서명 또는 우회 서명
  4. 권한 있는 엔드포인트 공격
  5. 권한 에스컬레이션

이 체인은 거의 매주 기업 평가에 등장합니다.

JWT + 마이크로서비스 가장

내부 검증이 약하면 공격자가 서비스를 사칭할 수 있습니다:

  • 청구 데이터 액세스
  • 사용자 권한 수정
  • 메시지 큐 읽기
  • API 게이트웨이 우회

방어 모범 사례(블루팀)

엄격한 알고리즘 적용

python

jwt.decode(토큰, 키, 알고리즘=["RS256"])

HS256을 위한 강력한 비밀

다음을 사용하여 생성합니다:

perl

openssl rand -hex 32

표준 클레임 검증

exp

iss

aud

nbf

HttpOnly 쿠키에 JWT 저장하기

XSS 토큰 도용을 완화합니다.

키 회전 구현

분산 키 관리를 위해 JWKS를 사용합니다:

다음에 통합된 JWT 보안 분석 Penligent.ai

최신 인증 시스템은 종종 수십 개의 마이크로서비스를 사용하며, 각 마이크로서비스에는 고유한 JWT 로직이 있습니다. 수동 검토는 느리고 오류가 발생하기 쉽습니다. Penligent.ai는 지능형 모의 침투 테스트 플랫폼으로, 자동화된 보안 워크플로에 JWT 분석을 직접 통합합니다.

Penligent.ai 를 수행합니다:

  • 서명 유효성 검사
  • 하이브리드 CPU/GPU 크래킹을 사용한 약한 비밀 탐지
  • 알고리즘 불일치 감지
  • 클레임 조작 테스트
  • 리플레이 및 새로고침 토큰 남용 시뮬레이션
  • JS 번들에서의 토큰 유출 스캔
  • 일관되지 않은 JWT 유효성 검사를 탐지하기 위한 엔드포인트 상관관계

또한 다음과 같은 익스플로잇 체인을 재구성합니다:

  • RS256 → HS256 키 혼동
  • 변조된 sub 클레임
  • 위조를 통한 권한 상승 역할 필드

대규모 애플리케이션의 경우, 이 자동화된 JWT 분석은 기존 도구가 종종 놓치는 취약점을 드러내면서 수동 작업 부하를 크게 줄여줍니다.

종합적인 JWT 공격 대 방어 매트릭스

공격설명방어
알고리즘: 없음서명을 제거합니다.빈 서명 필드서명되지 않은 JWT 거부
RS→HS 혼동HMAC 비밀로 사용되는 공개 키위조된 관리자 토큰알고리즘 적용
약한 비밀무차별 강제 HS256"password123" 비밀32바이트 무작위 키
변조된 청구역할/서브 수정"관리자" 역할서버 측 인증
XSS 도난JS가 JWT를 훔치다localStorage.tokenHttpOnly 쿠키
리플레이 공격토큰 재사용모바일 앱짧은 TTL, 회전
유출된 내부 토큰서비스 사칭마이크로서비스mTLS, JWKS, 범위

최종 생각

JWT를 디코딩하는 것은 시작에 불과합니다. 진정한 보안은 서명 확인, 엄격한 알고리즘 적용, 클레임 검증, 키 회전, 토큰의 안전한 저장에서 비롯됩니다. 최신 애플리케이션은 토큰 기반 인증에 크게 의존하므로 JWT의 정확성은 보안 태세의 중요한 부분입니다.

강력한 엔지니어링 관행과 다음과 같은 자동화된 보안 플랫폼을 결합하면 다음과 같은 이점이 있습니다. Penligent.ai를 통해 조직은 잘못된 구성을 신속하게 식별하고 권한 상승 공격을 방지하며 최신 공격 기법에 대해 인증 시스템이 복원력을 갖도록 할 수 있습니다.

게시물을 공유하세요:
관련 게시물