-
03. JWT03. Web/01. Concept 2023. 10. 25. 16:23
1. JWT란?
JWT(Json Web Token)은 사용자 인증에 필요한 정보를 Json 포맷으로 구성한 토큰입니다. 이때 이 값은 암호화되어 있는데, 개인키를 보유한 서버는 이를 통해 토큰의 유효성을 검증할 수 있습니다.
JWT는 각 구성요소가 점(.)으로 구분되어 있으며 Header, Payload, Signature로 구성됩니다.
1) Header : 토큰의 타입이나, 서명에 어떠한 암호화 알고리즘이 사용 되었는지 가 저장됩니다. 위 그림에서는 HS512 알고리즘이 사용되었습니다.
2) Payload : 인증에 필요한 사용자에 대한 실질적인 정보가 저장되는 곳입니다. 여기에서 주의 사항은 Payload에는 민감한 정보를 담지 않는 것입니다. header와 payload의 경우 Base64로 인코딩되어있을 뿐, 암호화되어있는 것이 아니기 때문에, 탈취 되었을 경우 누구나 값을 확인할 수 있습니다. key-value 형태로 저장되며 표준 스펙 상 key는 3 글자로 되어있습니다. Payload에 담기는 일반적인 key값들은 아래와 같습니다.
- iss(issuer): 토큰 발급자
- sub(subject): 토큰 제목 (사용자에 대한 식별자가 됨)
- aud(audience): 토큰 대상자
- exp(expiration time): 토큰 만료 시간
- nbf(not before): 토큰 활성화 시간(이 날짜 이전의 토큰은 활성화되지 않음을 보장)
- iat(issued at): 토큰 발급 시간
- jti(JWT id): JWT 토큰 식별자(issuer가 여러 명일 때, 이를 구분하기 위한 값)
3) Signature : 암호화된 서명 값. 토큰의 유효성을 검증하기 위해 사용됩니다. 그림에서 확인할 수 있듯이, header와 payload를 합친 값을 개인키로 암호화한 상태입니다.
2. hashcat + jwt list
- 칼리 hashcat 사용
- jwt list 다운
https://github.com/wallarm/jwt-secrets
칼리 명령어
hashcat -a 0 -m 16500 [JWT값] [경로]\jwt.secrets.list ex) hashcat -a 0 -m 16500 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InNtbGVlMyIsImlzX2FkbWluIjpmYWxzZSwiaWF0IjoxNjk3NDIyMjg5fQ.-zg_b1uYp6G105K_lRVEbeVHOmKDE_r7kfJxGzmkStw ./Desktop/Hacking_data/01.autoAttack/jwt.secrets.list
- 오류 발생해서 램을 늘렸습니다. 2G -> 4G
reference
'03. Web > 01. Concept' 카테고리의 다른 글
02. HTTP, TCP, Web Socket (0) 2023.10.25 01. URL 검색 시 동작 원리 (2) 2023.10.25 [WEB] 01. XSS(Cross Site Scripting) (0) 2023.08.02 모의해킹 및 취약점 진단 Road Map (0) 2023.07.30