session-basic | 워게임 | Dreamhack
session-basic
Description쿠키와 세션으로 인증 상태를 관리하는 간단한 로그인 서비스입니다.admin 계정으로 로그인에 성공하면 플래그를 획득할 수 있습니다.플래그 형식은 DH{...} 입니다.ReferenceBackground: Cookie &
dreamhack.io
문제:
쿠키와 세션으로 인증 상태를 관리하는 간단한 로그인 서비스입니다.
admin 계정으로 로그인에 성공하면 플래그를 획득할 수 있습니다.
플래그 형식은 DH{...} 입니다.
문제 파일 다운로드 받아 visual studio 로 들어감


코드를 분석해보면
try:
FLAG = open('./flag.txt', 'r').read()
except:
FLAG = '[**FLAG**]'
# flag,txt 파일에 플래그 값이 있으면 호출하라
users = {
'guest': 'guest',
'user': 'user1234',
'admin': FLAG
}
# 유저 3개. 아이디, 비번
@app.route('/')
def index():
session_id = request.cookies.get('sessionid', None)
try:
# get username from session_storage
username = session_storage[session_id]
except KeyError:
return render_template('index.html')
# 쿠키에서 받은 sessionid로 username 조회
-> username이 admin이면 플래그 알 수 있다?
@app.route('/login', methods=['GET', 'POST'])
# 로그인 페이지에서 GET이랑 POST 메서드 두 가지 사용
def login():
if request.method == 'GET':
return render_template('login.html')
elif request.method == 'POST':
username = request.form.get('username')
password = request.form.get('password')
# 폼으로부터 username, password 취득
try:
# you cannot know admin's pw
pw = users[username]
except:
return '<script>alert("not found user");history.go(-1);</script>'
if pw == password:
# 로그인 성공 시
resp = make_response(redirect(url_for('index')) )
session_id = os.urandom(32).hex()
session_storage[session_id] = username
resp.set_cookie('sessionid', session_id)
return resp
# 응답을 만들고 session id를 생성해 session_storage에 저장 후 쿠키로 설정
return '<script>alert("wrong password");history.go(-1);</script>'
@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
# sessionstorage 를 리턴함.
일단 VM에 접속해 로그인 창으로 들어가서

guest로 로그인 함

주어진 문제 코드 마지막을 보면
app.run(host='0.0.0.0', port=8000)
기본 포드가 8000임을 알 수 있음.
코드에 @app.route('/admin')가 있으므로
코드에서 정한 엔드포인트가 ' /admin' 임을 알 수 있음.
즉, 관리자 관련 정보( session_storage )를 반환하는 경로가 ' /admin'.
주소는
http://<실제호스트>:<실제포트>/admin 형식이므로
주소창에 http://host8.dreamhack.games:19208/admin 입력하여
으로 페이지를 열어봄

관리자 세션 ID는 맨 앞 키이므로
523059437d73e70887a4dd20852cd98868b7dbc1ec5bd751829753eebb85ebbf
이렇게 admin 세션 ID 확인할 수 있음.
http://host8.dreamhack.games:19208
다시 이 주소창에서
F12 눌러 devtools 들어감.
그리고 상단 Applicationd 누르고,
Storage > Cookies > 해당 호스트

sessionid 값을 아까 얻은 세션 ID로 수정해봄.
마우스 오른쪽 누르고 Edit "Value" 누른 후 523059437d73e70887a4dd20852cd98868b7dbc1ec5bd751829753eebb85ebbf 로 수정한 후 enter키 누른 다음에
F5 눌러서 새로고침 했더니

플래그가 나왔다!!
flag is DH{8f3d86d1134c26fedf7c4c3ecd563aae3da98d5c}

'드림핵' 카테고리의 다른 글
| [워게임] session-basic 관련 내용 "쿠키와 세션", "주소창과 DevTools" (0) | 2025.09.29 |
|---|---|
| [드림핵] 워게임 WindowsPool (0) | 2025.08.25 |
| [워게임] BMP Recovery (1) | 2025.08.18 |
| [드림핵] 워게임 Enc-JPG (3) | 2025.08.05 |
| [드림핵] 워게임 structure-based carving (4) | 2025.07.28 |