Dreamhack - session-basic (세션 탈취시도)

·2025년 6월 3일

Dreamhack-Writeups

목록 보기
2/52
post-thumbnail

session-basic

문제 링크
https://dreamhack.io/wargame/challenges/409

문제 설명

쿠키와 세션으로 인증 상태를 관리하는 간단한 로그인 서비스입니다. admin으로 로그인에 성공하면 플래그를 얻을 수 있습니다.

풀이 과정

주어진 파이썬 코드의
users = { 'guest': 'guest', 'user': 'user1234' } 와 pw = users[username]
을 보고 guest의 비밀번호는 guest가 아닐지 로그인 해보았는데, 성공하였습니다.
이를 통해 user의 비밀번호 또한 user1234인 것을 알 수 있었습니다.

  1. admin의 비밀번호도 admin일지 시도해보았지만 실패하였습니다.

  2. @app.route('/admin')
    def admin():

    # developer's note: review below commented code and uncomment it (TODO)
    
    # session_id = request.cookies.get('sessionid', None)
    # username = session_storage[session_id]
    # if username != 'admin':
    #     return render_template('index.html') 

    return session_storage

에서 /admin이 session_storage를 return 함을 알 수 있었습니다.

/admin에 접근하여 세션값을 알아내기 성공했습니다.


guest로 로그인한 후, 관리자 메뉴를 열어 session_id의 세션값을 admin의 세션값으로 바꿔주었습니다.

로그인에 성공하였습니다.


배운 점

  • 백엔드 코드 분석은 정말 중요함을 느꼈습니다. /admin 처럼 방치된 기능이 보안상의 큰 구멍이 될 수 있음을 다시한번 느꼈습니다.

  • 쿠키 기반 세션 시스템에서는 세션 값이 유출될 경우 인증 우회가 가능하다는 점을 배웠습니다.

  • TODO, 주석 처리된 코드, 디버깅용 반환값은 항상 주의 깊게 살펴봐야겠단 생각을 하였습니다.

  • 전형적인 세션 하이재킹 시나리오를 경험할 수 있었던 유익한 문제였습니다.


Summary (English)

  • This challenge is a classic example of session hijacking.
  • By analyzing the backend Python code, I was able to access the /admin route and view all active session IDs.
  • Then I replaced my own session ID cookie with the one assigned to the admin account, which allowed me to log in as admin without knowing the password and retrieve the flag.
  • This showed me how exposed debug code and insecure session handling can easily lead to serious authentication bypass vulnerabilities.
profile
CTF 풀이 및 실습 중심 학습을 기록합니다.

0개의 댓글