ROOTME] JSON Web Token (JWT) - Weak secret

노션으로 옮김·2020년 2월 29일
1

wargame

목록 보기
4/59
post-thumbnail

문제

json 형식의 데이터가 출력된다.

{"message": "Let's play a small game, I bet you cannot access to my super secret admin section. Make a GET request to /token and use the token you'll get to try to access /admin with a POST request."}

해당 데이터는 /token 에 대해 GET 방식으로 request하고, 얻은 토큰으로 /admin 에 대해 POST로 접근하라고 설명한다.


풀이

먼저, 그냥 /admin 페이지에 POST request 해보자

{"message": "method to authenticate is: 'Authorization: Bearer YOURTOKEN'"}

토큰을 요구하는 메시지가 출력된다.
토큰 전달 형식도 알려주고 있다.

첫번째, 알고리즘을 none으로 변경

/token에 접근하여 토큰을 획득한다.

{"Here is your token": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiZ3Vlc3QifQ.a4Cxf97xhqpexX-Mw0Ik74ncg6TdCK8R_Q7wYC929himTEOyJmePFYCJYvj-ICUTZrVqjPUa83GeMO5AVuOH0Q"}

디코딩하여 토큰의 payload를 보면
private claim은 다음의 형식을 가진다.

{"role":"guest"}

당연히 guestadmin으로 변경해주어야 한다.

또한 header의 알고리즘 type을 none으로 변경한다.

그리고 signature를 삭제한다

완성된 토큰

eyJhbGciOiJIUzUxMiIsInR5cCI6Im5vbmUifQ.eyJyb2xlIjoiYWRtaW4ifQ.

/admin에 접근을 시도

{"message": "I was right, you are not able to break my super crypto! I use HS512 so no need to have a strong secret!"}

... 쓰읍

두번째, secret key를 크랙

알고리즘을 그대로 이용하되, 값이 변경됬기 때문에 signature를 수정해야한다.

jwtcat을 이용하여 secret key를 구한다.

앞서 구한 값을 통해 [jwt.io]에서 토큰을 생성한다.

생성된 토큰값으로 인증을 요청하면

{"result": "Congrats!! Here is your flag: ????"}

선행지식

jwt secret key crack

다음을 참조
scip 블로그 글

Authorization: [type][value]

http의 인증요청 방식이다.
헤더에 추가하여 사용할 수 있다.

0개의 댓글