[byuctf2025] JWTF

Posted by : on

Category : etc   learning


배경

BYUCTF 2025 웹해킹 JWTF 문제 풀이입니다.

요약

  • 유출된 admin의 JWT 토큰이 있었으나, 이는 블랙리스트로 등록되어 있음
  • JWT 토큰의 특징을 이용해, 같은 값을 가지지만 블랙리스트를 우회함

문제 상황

  • 어드민용 계정에 대한 JWT 토큰 값이 유출되어 있음

블랙리스트 등록된 이미지지

  • 유출된 토큰 값에 대한 블랙리스트가 등록되어 있음

JWT 헤더 값의 암호화 기법을 none으로 설정하여 원하는 대로 값을 설정하려 하였으나 불가능하였습니다.

점수 - 434점, 푼 팀 - 97/894팀

분석 과정

JWT 값 비교 영역

서버에서 JWT값을 다음처럼 비교하고 있었습니다.

jwt.io 소개 페이지

JWT는 내부적으로 base64UrlEncode을 이용해 값을 해시화 하고 있었습니다.

jwt.io 소개 페이지

base64Url은 다음처럼 패딩부분만 +, /에서 url safe-, _으로 바뀐 버전이었습니다.

위 코드를 실행해보면 똑같은 값이 출력됩니다.

이를 이용하여 토큰 값의 -, _ 값을 base64의 패딩 값으로 변환하여 블랙리스트를 우회하면서 jwt를 이용할 수 있었습니다.

ctf jrl 페이지

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhZG1pbiI6dHJ1ZSwidWlkIjoiMTMzNyJ9.BnBYDobZVspWbxu4jL3cTfri_IxNoi33q-TRLbHV-ew
...into...
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhZG1pbiI6dHJ1ZSwidWlkIjoiMTMzNyJ9.BnBYDobZVspWbxu4jL3cTfri_IxNoi33q+TRLbHV+ew

ctf 공격 성공 페이지

알아낸 내용

  • PyJWTbase64 모듈의 urlsafe_b64decode 함수를 이용하여 토큰 값을 디코딩합니다.
  • base64 모듈의 urlsafe_b64decode 함수는 url based base64base64든 모두 디코딩 시 같은 결과를 출력합니다.
  • 토큰 값의 -, _ 값을 base64의 패딩 값으로 변환하여 블랙리스트를 우회하면서 jwt를 이용할 수 있었습니다.

참조


About 이찬욱
이찬욱

지식 쌓고 공유하는 것을 즐깁니다

Email : neverprogrammer@gmail.com

Website : https://whoisdreamer.github.io/blog

Useful Links