Web hacking: JWT(JSON Web Token)

M200is·2023년 8월 5일
0

Web hacking

목록 보기
1/4

JWT란?


JWT는 웹 인증 방식인 토큰 중 가장 널리 쓰이는 토큰 방식이다.
우선 웹 인증 방식을 알아보자.

  • 웹에서의 인증 방법

    1. 세션(session)
      세션은 인증 정보를 서버가 가지고 있고 Session id를 쿠키 형태로 클라이언트측에 보낸다.
      이 Session id를 서버의 인증 정보와 대조해 인증을 하는 것이다.


    2. 토큰(Token)
      토큰은 인증 정보를 서버가 아닌 클라이언트 측이 가지고 있다.
      서버에서는 이 토큰이 유효한지를 확인해 인증을 한다.
  • 세션 vs 토큰

    • 전체적으로 세션이 보안적으로 더 안전하다.
      세션은 세션이 탈취되어도 서버측에서 그 세션을 정지하면 끝이다. 하지만 토큰은 변조나 유출이 될 경우 서버측에서 대응하기가 어렵다.
      또한 세션이 토큰보다 용량이 훨신 적기 때문에 효율성에서도 우월하다.

    • 그렇다면 토큰을 왜 쓰는 걸까? 그것은 확장성 때문이다.
      보통 웹 서비스는 여러 서버에서 동시에 인증을 한다. 이때 세션은 서버별로 각각 세션 처리를 해줘야 하지만 토큰은 그럴 필요가 없다.



  • JWT의 구조

    Base64(Header).Base64(Payload).Base64(Signature) 형식이다.
    jwt.io에 기본으로 되어있는 JWT를 살펴보자.
    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
    이다.

    base64로 디코딩을 하면 이런 형태가 된다. 이떄 iat, 즉 유효시간은 유닉스 시간으로 표시한다.
  • JWT의 취약점


  1. 시그니처 미검증
    시그니처를 검증하지 않을 시 DATA값을 바꾸는것 만으로도 해커가 의도한 동작을 할 수 있다.
  2. none 알고리즘
    토큰의 alg부분은 none으로 설정하면 시그니처 미검증처럼 DATA값 변경만으로도 원하는 동작을 할 수 있다.
  • 추가예정

워게임 풀이

Rootme의 JWT - Introduction 문제를 풀어보았다


로그인 페이지가 있고 게스트 로그인이 가능하다.
즉 게스트의 JWT 토큰을 획득하고 변조해 admin으로 로그인하면 된다.


Burp Suite로 살펴보자.

guest의 JWT 값을 볼 수 있다.
jwt.io에서 디코딩 값을 보면 다음과 같다.

우선 username만 admin으로 바꾸어 전송해보자.

틀린 시그니처라고 뜬다.

그러면 우선 username만 변조해 보자.

틀렸다고 나온다.

다음으로 none 공격을 시도해 보자.

성공적으로 admin으로 로그인이 되었고 flag 값을 얻었다.


  • 소감
    첫 해킹 글은 웹해킹이다. 사실 주 분야는 포너블이지만 최근 웹해킹을 공부중이라 쓰게 되었다.
profile
M200islove

0개의 댓글