WebGoat - JWT (2)

토큰을 획득하였을 때, 비밀 키를 찾은 뒤 사용자 이름이 ‘WebGoat’로 변경된 새로운 토큰을 만들어 제출하기


JWT(JSON Web Token)란 JSON 객체를 이용하여 정보를 안전하게 전달하고 신원 인증을 하는데 사용되는 토큰이다.


획득한 토큰은 다음과 같다.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJpYXQiOjE1MjQyMTA5MDQsImV4cCI6MTYxODkwNTMwNCwiYXVkIjoid2ViZ29hdC5vcmciLCJzdWIiOiJ0b
21Ad2ViZ29hdC5jb20iLCJ1c2VybmFtZSI6IlRvbSIsIkVtYWlsIjoidG9tQHdlYmdvYXQuY29tIiwiUm9sZSI6WyJNYW5hZ2VyIiwiUHJvamVjdCBBZG1pbmlzdHJhdG9yIl19.
vPe-qQPOt78zK8wrbN1TjNJj3LeX9Qbch6oo23RUJgM


토큰의 내용을 보기 위해 디코딩 하면 결과는 다음과 같다.

webgoat_jwt2_1

{"alg":"HS256","typ":"JWT"}.
{"iss":"WebGoat Token Builder","iat":1524210904,"exp":1618905304,"aud":"webgoat.org","sub":"tom@webgoat.com",
"username":"Tom","Email":"tom@webgoat.com","Role":["Manager","Project Administrator"]}.
vPe-©η¿3+Ì+lÝSŒÒcÜ·—õ܇ª(ÛtTJgM


이제 claim영역에서 username을 “WebGoat”로 변경하자.

{"alg":"HS256","typ":"JWT"}.
{"iss":"WebGoat Token Builder","iat":1524210904,"exp":1618905304,"aud":"webgoat.org","sub":"tom@webgoat.com",
"username":"WebGoat","Email":"tom@webgoat.com","Role":["Manager","Project Administrator"]}.

참고로 이번 문제는 JWT cracking으로 알고리즘을 ‘none’으로 변경해서 풀면 안되고, 직접 서명을 만들어야 한다.

수정한 토큰에 대해 Brute Force를 진행하면 ‘victory’라는 단어가 나온다.

victory


이제 파이썬 프로그램을 이용해 서명을 하자.

여기서 key값은 ‘victory’, message 값에는 ‘조작한 헤더와 페이로드 부분’, 알고리즘에는 ‘SHA256’으로 설정한 후 프로그램을 실행하면 Signature를 구할 수 있다.

5a_abHfAcy09gcD2p4RkkTc34m_yyYTJ0mI6DVx4eac


이제 조작한 토큰은 다음과 같고, 제출하면 성공이다.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJpYXQiOjE1MjQyMTA5MDQsImV4cCI6MTYxODkwNTMwNCwiYXVkIjoid2ViZ29hdC5vcmciLCJzdWIiO
iJ0b21Ad2ViZ29hdC5jb20iLCJ1c2VybmFtZSI6IldlYkdvYXQiLCJFbWFpbCI6InRvbUB3ZWJnb2F0LmNvbSIsIlJvbGUiOlsiTWFuYWdlciIsIlByb2plY3QgQWRtaW5pc3RyYXRvciJdfQ==.
5a_abHfAcy09gcD2p4RkkTc34m_yyYTJ0mI6DVx4eac

webgoat_jwt2_2