
문제 링크
https://dreamhack.io/wargame/challenges/409
쿠키와 세션으로 인증 상태를 관리하는 간단한 로그인 서비스입니다. admin으로 로그인에 성공하면 플래그를 얻을 수 있습니다.

주어진 파이썬 코드의
users = { 'guest': 'guest', 'user': 'user1234' } 와 pw = users[username]
을 보고 guest의 비밀번호는 guest가 아닐지 로그인 해보았는데, 성공하였습니다.
이를 통해 user의 비밀번호 또한 user1234인 것을 알 수 있었습니다.
admin의 비밀번호도 admin일지 시도해보았지만 실패하였습니다.
@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, 주석 처리된 코드, 디버깅용 반환값은 항상 주의 깊게 살펴봐야겠단 생각을 하였습니다.
전형적인 세션 하이재킹 시나리오를 경험할 수 있었던 유익한 문제였습니다.