You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: _posts/2025-05-21-BYUCTF2025-JWTF.md
+25-13Lines changed: 25 additions & 13 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -18,37 +18,48 @@ BYUCTF 2025 웹해킹 `JWTF` 문제 풀이입니다.
18
18
19
19
## 요약
20
20
21
-
-주어진`admin`의 JWT 토큰이 있었으나, 이는 블랙리스트로 등록되어 있음
21
+
-유출된`admin`의 JWT 토큰이 있었으나, 이는 블랙리스트로 등록되어 있음
22
22
- JWT 토큰의 특징을 이용해, 같은 값을 가지지만 블랙리스트를 우회함
23
23
24
24
## 문제 상황
25
25
26
-
우선 문제 배경은 다음과 같습니다.
26
+
- 어드민용 계정에 대한 JWT 토큰 값이 유출되어 있음
27
27
28
-
1. 특정 토큰 값이 노출되어 있는 상황이고, 해당 토큰 값에는 `admin` 필드가 `true`인 상황
28
+
{: style="max-width: 100%; height: auto;"}
29
29
30
-
2. 노출된 토큰 값이 아니고, 페이로드 내에 `admin` 필드가 `true`인 토큰 값을 출력하는 문제
30
+
- 유출된 토큰 값에 대한 블랙리스트가 등록되어 있음
31
31
32
-
다만, 현실적으로 토큰 발급 과정에서 `admin` 필드가 `true`인 토큰 값을 발급하는 것은 불가능했었습니다.
32
+
JWT 헤더 값의 암호화 기법을 `none`으로 설정하여 원하는 대로 값을 설정하려 하였으나 불가능하였습니다.
33
33
34
34
`점수 - 434점, 푼 팀 - 97/894팀`
35
35
36
36
## 분석 과정
37
37
38
-
우선 해당 서비스의 백엔드는 파이썬입니다.
38
+
{: style="max-width: 100%; height: auto;"}
39
39
40
-
파이썬의 `base64` 모듈은 `urlsafe_b64decode`라는 함수를 제공합니다. 문제는 이 함수가 디코딩 시 확장성을 위해 `url based base64`든 `base64`든 모두 디코딩 시 같은 결과를 출력한다는 점입니다. `PyJWT`는 이를 이용하여 토큰 값을 디코딩합니다.
0 commit comments