본문 바로가기

해킹-보안

webgoat jwt tokens 4~5

반응형

 

jwt tokens 4

1 투표 시스템에서 게스트 사용자는 투표할 수 없고 다른 세 사용자는 투표할 수 있다. 투표 재설정은 관리자만 가능하다.

 

 


2 투표 사용자를 TOM으로 변경한다.


3. 투표 재설정을 요청한다.


4. 요청 패킷 내 Cookie 헤더에서 access_token을 복사한다.


5. jwt.io에 접속하여 Encoded에 access_token을 붙여넣고 디코딩 값을 확인한다.


6. notepad++ 등 Base64를 디코딩할 수 있는 에디터에서 jwt 값을 붙여넣고 Base64 Decode를 수행한다.


7. jwt 토큰 헤더를 null로 변경, 페이로드에서 admin 파라미터를 "true"로, user를 "admin"으로 변경한다.
이후 다시 해당 값을 Base64 인코딩하고 구분자(.)를 추가한다. (페이로드 섹션의 끝부분도 포함)


8. 요청 패킷 내 access_token에 변조한 jwt 토큰을 입력 후 전송 시 일반 사용자 권한으로 투표 재설정이 가능하다.

 

jwt tokens 5

 

1. 주어진 jwt 토큰의 비밀키를 찾아내고 페이로드를 수정하는 문제이다.


2. hashcat 도구로 단어 사전 파일을 이용해 jwt 비밀키 크랙을 수행한 결과 키 값이 "victory"로 확인된다.
> hashcat token.txt -m 16500 -a 3 -w 3 dict_google-10000-english.txt
* m=해쉬모드, jwt=16500


3. 크랙하는 동안 jwt 토큰이 만료되므로 exp(토큰만료) 값을 증가시키고, sub,username,Email의 페이로드 값을

관리자인 "webgoat"로 수정한다.


4. jwt 서명 값을 victory로 입력 후 인코딩 값을 복사한다.


5. 플래그에 수정한 jwt 값 적용 후 토큰 전송 시 문제 풀이가 완료된다.

반응형