JWT는 헤더, 페이로드, 시그니처 이렇게 3가지로 이루어져 있다.
이번 랩은 세션을 JWT 기반으로 관리하고, JWT의 시그니처를 검증하지 않는 취약한 서버다
세션 토큰을 수정해서 admin 패널을 탈취한 후 carlos 계정을 삭제하는 시나리오다
랩 설명에서 주어진 계정정보 wiener:peter로 로그인을 한다
어드민이 아니라 일반 유저 권한이기 때문에 Burpsuite에 들어가서 로그인 파켓을 찾아보자
repeater에서 변조하면 될 듯
시작하기 전에 JWT 토큰을 변경하기 위해서는 burpsuite의 확장자인 JWT Editor을 설치하자
Extensions 탭에 들어가서 BAPP Store에서 찾을 수 있음
로그인에 해당하는 GET 메서드, /my-account?id=wiener 파켓을 살펴보면
쿠키에 세션값이 적혀있는데 이게 JWT 값으로 보인다
Repeater에 보내서 변조해 보겠음
id는 그대로 내버려두고 /my-account/admin으로 하니까 리소스가 존재하지 않는다
/admin으로 path를 바꾸고 id 역시 administrator으로 변경했다
그런데 세션값이 여전히 wiener의 세션 토큰이어서 그런가 어드민 패널에는 접근이 안된다
어드민으로 로그인해야 페이지를 로드할 거라고 하니 세션 값을 변경해 보자
JWT Editor가 아직 작동이 안 돼서 구글링으로 툴을 찾아서 했음
토큰 값을 JWT 디코딩해 보니까 페이로드 부분에 "sub": "wiener" 이렇게 json 형식으로 있다
wiener 값을 administrator으로 바꿔주면 될 듯
sub 파라미터 값을 administrator으로 바꾸면 인코딩 된 토큰 값도 바뀐다
이걸 복사해서 burpsuite의 리피터에 넣어보겠음
jwt 인코딩/디코딩에 사용한 사이트는 아래의 두 개가 젤 편한 듯
Online JWT Decoder
Learn how JWT refresh tokens work and how to use them to authenticate and authorize your APIs.
fusionauth.io
JWT encode/decode - Tribestream
Example of jwt-js-usage. Here you can check how to encode, decode, sign and validate JWT (JSON Web Token). jwt-js-decode - javascript library for JSON Web Token encoding, decoding, signing and validation
tribestream.io
여기서 새로 인코딩하고 오니까 JSON Editor가 활성화돼 있다
새로 만든 페이로드를 입력하니까 JSON 형식으로 복호화되어 있고,
wiener에서 administrator으로 변경된 것이 확인된다
위의 토큰값을 Cookie: session = [토큰값]에 넣고 요청을 보내니까
어드민 패널로 접속이 가능함
그리고 소스코드를 보니까 carlos 계정을 삭제할 수 있는 url이 있다
이걸 path에 넣으면 될 듯
위에서 찾은 path, username, jwt 모두 적용해서 send하니 302 found를 찾았고
follow redirection을 하면 성공
carlos 계정이 삭제되었다
성공!
JWT 세션 값을 인코딩/디코딩하는 방법과 도구 그리고 세션 값과 다른 파라미터를 변조해서
admin으로 접근하는 방법을 새로 알게 되었다
실제로는 admin 이름을 이렇게 티 나게 administrator라고 하지는 않겠으나 앞으로도 jwt 랩을 풀어보면 언젠가 취약점을 찾을 수 있겠지
'Writeup' 카테고리의 다른 글
Lab: Exploiting LLM APIs with excessive agency Writeup (0) | 2025.03.12 |
---|---|
[Hackthebox] Fawn Challenges Writeup (0) | 2025.03.09 |
[웹해킹] SSRF with filter bypass via open redirection vulnerability Writeup (0) | 2025.03.04 |
[웹해킹] Lab: Basic SSRF against another back-end system Writeup (0) | 2025.03.02 |
[Dreamhack] 리버싱 rev-basic-6 Writeup (0) | 2025.02.28 |