[Dreamhack] session-basic 문제 풀이
https://dreamhack.io/wargame/challenges/409
session-basic
Description 쿠키와 세션으로 인증 상태를 관리하는 간단한 로그인 서비스입니다. admin 계정으로 로그인에 성공하면 플래그를 획득할 수 있습니다. 플래그 형식은 DH{...} 입니다. Reference Background: Cook
dreamhack.io
쿠키와 세션으로 인증 상태 관리하는 로그인 서비스에 admin 계정으로 로그인 성공하면 FLAG를 획득할 수 있는 문제다.
문제 파일을 받으면 "app.py" 를 확인할 수 있다.
app.py 분석

→ user 변수에서 guest와 user 계정의 비밀번호를 확인할 수 있다. (guest/guest, user/user1234)
→ session_storage 라는 딕셔너리 생성

→ sessionid 에 맞는 username 가져오고 admin이면 FLAG 출력

→ POST 요청 시
이용자가 전송한 username과 password 값 가져오고 users 변수에 username 존재하는지 확인
username 존재하면 password 체크하고 맞으면 랜덤한 32바이트 sessionid 생성하고 쿠키로 설정 (해당 username에 맞는)

→ session_storage 값들을 리턴하는 것 같다.
guest 로 로그인 한 후 쿠키를 확인하면 하나 생성되어 있는 것을 볼 수 있다.
app.py 코드에서 본 것과 같이 32바이트의 랜덤 문자열로 sessionid가 설정되었다.
app.py를 보면 /admin이라는 페이지가 있는 것으로 보이며 session_storage 값들을 리턴하는 것으로 보였다.
admin 페이지로 접속하니 admin 계정에 대한 sessionid 값을 확인할 수 있었다. (url 마지막에 /admin 입력하여 접속)
해당 값을 쿠키의 sessionid에 붙여넣고 다시 문제 페이지로 들어가면 FLAG를 확인할 수 있다.
