접속하면 다음과 같은 화면을 확인할 수 있다. 곧바로 Login페이지로 이동해주었다.
문제에서 제공된 app.py를 살펴보면 등록된 user의 username과 password를 확인할 수 있다.
users = {
'guest': 'guest',
'user': 'user1234',
'admin': FLAG
}
이를 바탕으로 sessionid를 얻어 admin으로 로그인을 하면 flag를 얻을 수 있어보인다.
username과 password를 각각 guest, guest로 로그인을 한 다음 sessionid를 얻을 수 있었다.(이는 Network와 Application을 통해 둘 다 확인 가능하다.)
Flag를 얻기 위해선 admin에 해당하는 sessionid가 필요하다.
파이썬 코드를 살펴보았다.
@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')
return render_template('index.html', text=f'Hello {username}, {"flag is " + FLAG if username == "admin" else "you are not admin"}')
/
로 시작하는 루트에서, username은 session_storage와 sessionid를 통해 얻을 수 있는 걸 확인할 수 있다.
@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, 즉 http://host3.dreamhack.games:9410/admin 과 같이 입력해서 session_storage의 값이 리턴되게 해주었다.
리턴된 값 중에 admin에 해당하는 session_storage의 값을 확인할 수 있었다.
session_storage의 값을 sessionid에 넣으면 flag를 얻을 수 있다.