IT/정보보안

[Dreamhack] cookie 문제 풀이

읽어보고서 2025. 4. 27. 12:26
반응형

 

 

 

💻 "드림핵의 퍼즐들은 나의 손끝에서 해체된다..."
"디지털 전장에 소환된 나는, 이제 문제를 사냥할 뿐이다."

 

 

🎓 쿠키 인증 우회 문제를 풀기 위한 기반 지식

 

1️⃣ HTTP와 쿠키(Cookie)의 개념

 

- HTTP 프로토콜: 클라이언트(브라우저)와 서버가 통신하는 방식.

- 쿠키(Cookie):
  서버가 클라이언트에게 저장시키는 작은 데이터 조각.
  주로 세션 유지, 인증 상태 관리 등에 사용됨.
  클라이언트가 서버에 요청을 보낼 때 자동으로 쿠키를 포함해서 전송.

✅ 중요 포인트: 쿠키는 클라이언트 측에 저장되기 때문에, 특별한 보안 조치(서명, 암호화 등)가 없으면 사용자가 마음대로 조작 가능.

2️⃣ 개발자 도구 활용법

 

- 브라우저의 개발자 도구(DevTools) 사용 능력.

- 특히 Application 탭에서 쿠키 확인 및 수정하는 법.
   크롬 기준: F12 → Application → Cookies 항목.

- 요청(Request)와 응답(Response) 흐름 파악.

3️⃣ 웹 인증 방식 이해

 

- 세션 기반 인증 vs 쿠키 기반 인증 vs JWT

- 이번 문제는 쿠키에 username만 저장하는 허술한 인증 방식.

- 보통 실무에서는 쿠키에 직접 사용자 이름을 넣지 않고, 세션ID나 토큰을 사용하며, 무결성 검사를 함.

4️⃣ 보안 취약점: 쿠키 무결성 부재


- 쿠키 변조 (Cookie Tampering):
  서버가 쿠키의 변경 여부를 검증하지 않으면 발생.
  사용자가 쿠키 값을 바꿔치기하여 권한 상승(Broken Access Control).

- 대응 방법:
  서명(Signed Cookie) 사용.
  쿠키에 민감 정보 직접 저장 ❌.
  서버에서 값을 검증하거나 세션 ID로 관리.

5️⃣ 기본적인 Python 웹 코드 읽기

 

- Flask 같은 Python 웹 프레임워크 코드 이해.

- request.cookies.get() 구조 파악.

- 서버가 어떤 논리로 인증을 처리하는지 분석하는 능력.

 

 

🎯 cookie 문제 시작해보자!

 

 


문제 설명

쿠키로 인증 상태를 관리하는 간단한 로그인 서비스입니다.
admin 계정으로 로그인에 성공하면 플래그를 획득할 수 있습니다.

플래그 형식은 DH{...} 입니다.

 


 

간단하게 설명하자면, 쿠키로 인증을 관리하는 로그인 서비스야.


목표는?

 

admin 계정으로 로그인해서 FLAG를 가져오는 것!
(참고로 플래그 형식은 DH{...})

 

 

일단 문제 파일부터 다운받고, 내부 코드가 어떻게 돌아가는지 살펴봤어.

 

 

🔍 app.py 코드 분석

 

코드를 확인해보니, 다음과 같은 내용을 확인할 수 있었어

 

1️⃣ 사용자 인증 구조

users = {
    'guest': 'guest',
    'admin': FLAG
}

 

사용자 정보가 그냥 딕셔너리에 평문으로 저장되어 있음.

특히, admin 계정의 비밀번호가 FLAG 값으로 설정되어 있어.

즉, FLAG만 알면 admin 로그인 가능!

근데 여기서 바로 FLAG를 알 수는 없잖아? 그래서 다른 방법을 찾아야지.

 

 

2️⃣ 쿠키 조작 가능성 발견

@app.route('/')
def index():
    username = request.cookies.get('username', None)
    if username:

 

인증 방식이 쿠키의 'username' 값만 확인하는 구조.

뭐야 이거? 쿠키에 그냥 'admin' 넣으면 바로 관리자 될 수 있겠는데?

✔️ 무결성 검사도 없고, 암호화도 없음!


그냥 쿠키 값만 바꿔주면 끝나는 구조야.

 

 

⚡ 공격 시나리오 정리

 

1. 개발자 도구에서 쿠키 확인 후, username 값을 'admin'으로 수정.

2. 페이지 새로고침 하면?
➡️ 바로 FLAG 획득!

이 정도면 거의 서비스해주는 수준 ㅋㅋ

 

 

🚀 문제풀이 과정

 

 

로그인 페이지 접속 ➡️ [개발자 도구] → [Application] 탭 클릭

 

쿠키에서 username 값 찾기

 

 

값을 'admin'으로 바꿔주기

 

 

새로고침하면 FLAG 출력!

 

해당값을 제출해주면 끝!

 

이번 문제는 코드 분석 + 간단한 쿠키 조작으로 해결하는 재미있는 유형이었어.


확실히 코드를 한번 들여다보고, 취약점을 눈으로 확인한 다음 공격하는 방식이라 더 흥미롭더라.

다음에도 이런 로직 기반 문제 더 풀어봐야겠어! 😄

 

반응형