Oh! JUN
[WebGoat] JWT tokens - 1 본문
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의 'alg' 알고리즘 정보를 'none'으로 수정합니다.
Payload의 'admin'을 'true'로 수정합니다.
Signature의 정보는 제거합니다.
access_token 정보를 확인합니다.
access_token=eyJhbGciOiJub25lIn0.eyJpYXQiOjE3MDIzNjUzNjIsImFkbWluIjoidHJ1ZSIsInVzZXIiOiJUb20ifQ.
Header와 Payload정보만 남아있고 Signature정보는 삭제되어있는 상태에서 요청하면
정상적으로 응답받은것을 확인할 수 있습니다.
'웹 해킹 > Broken Authentication' 카테고리의 다른 글
[WebGoat] JWT - 3 (Refresh Token) (0) | 2023.12.03 |
---|---|
[Tool] HashCat 설치하기 (1) | 2023.12.02 |
[WebGoat] JWT - 2 (HashCat 활용하여 비밀 키 알아내기) (0) | 2023.12.02 |
[Tool] JSON Web Token Attack 플러그인 설치하기 (0) | 2023.12.02 |
[WebGoat] Authentication Bypasses (0) | 2023.12.01 |