Oh! JUN

[WebGoat] JWT tokens - 1 본문

웹 해킹/Broken Authentication

[WebGoat] JWT tokens - 1

Kwon Oh! JUN 2023. 12. 2. 17:07

1. 소개

JWT는 "JSON Web Token"의 약자입니다.

 

JWT는 웹 애플리케이션에서 사용자 인증과 데이터 교환을 안전하게 처리하기 위한

토큰 기반의 인증 방식입니다.

 


2. JWT 구조

 

JWT의 구조는 [Header/Payload/Signature]로 이루어져 있습니다.

 

eyJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE3MDIzNjgzMTAsImFkbWluIjoiZmFsc2UiLCJ1c2VyIjoiVG9tIn0.m_74cuSfyFajvY5x6E-l3lSCNmNJDTbiS1lXZ6tR_Iy2WoLvSGiMYH_AhZMBxc849XlCuJeC37a2jegSabLPvA

 

Header 

토큰 유형과 해쉬 알고리즘 등 정보 포함( eyJhbGciOiJIUzUxMiJ9 )
Payload  토큰에 저장될 클레임 정보 포함( eyJpYXQiOjE3MDIzNjgzMTAsImFkbWluIjoiZmFsc2UiLCJ1c2VyIjoiVG9tIn0 )
Signature  Header + Payload를 Base64 인코딩 후 비밀키를 사용하여 암호화한 값(Signature를 통해 토큰의 무결성 확인)
( m_74cuSfyFajvY5x6E-l3lSCNmNJDTbiS1lXZ6tR_Iy2WoLvSGiMYH_AhZMBxc849XlCuJeC37a2jegSabLPvA )

 


3. 흐름


4. 문제풀이

JWT 토큰을 변경시켜서 'admin' 권한으로 투표를 reset 시켜야 하는것 같습니다.


 

'none' 알고리즘은 signature랑 MAC 서명을 사용하지 않습니다.

 

그래서 Header/Payload만 남겨놓고 무결성 확인하는 Signature을 사용하지 않아도되기 때문에

Payload 정보를 우회해서 'admin'으로 시도할 수 있게 하겠습니다.

 


 

Header

Header의 'alg' 알고리즘 정보를 'none'으로 수정합니다.

Payload

Payload의 'admin'을 'true'로 수정합니다.

Signature

Signature의 정보는 제거합니다.


 

access_token 정보를 확인합니다.

access_token=eyJhbGciOiJub25lIn0.eyJpYXQiOjE3MDIzNjUzNjIsImFkbWluIjoidHJ1ZSIsInVzZXIiOiJUb20ifQ.

 

Header와 Payload정보만 남아있고 Signature정보는 삭제되어있는 상태에서 요청하면

정상적으로 응답받은것을 확인할 수 있습니다.