문제 분석
문제 소스코드를 보면 다음과 같다.
1
2
3
4
5
users = {
'guest': 'guest',
'user': 'user1234',
'admin': FLAG
}
사용자는 guset, user, admin 이렇게 세 개가 존재한다.
1
2
3
4
5
6
7
8
9
10
@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"}')
sessionid 값을 인덱스로 하는 session_storage 배열에서 usrname을 가져오고 그 값이 admin일 경우 flag를 보여준다.
1
2
3
4
5
6
7
8
9
10
@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 페이지가 존재한다.
문제에서 주어진 guest계정으로 로그인을 하면 admin이 아니라고 뜬다.
문제 풀이
/admin페이지에 접속해보면 session_storage에 저장된 값들을 볼 수 있다. 여기서 admin 값도 확인할 수 있다.
확인한 admin값을 sessionid라는 이름의 쿠기에 넣고 새로고침을 하면 flag를 얻을 수 있다. * 쿠키는 크롬 개발자 도구 또는 editthiscookie 등의 도구를 사용하면 된다.