[문제 정보]
쿠키와 세션으로 인증 상태를 관리하는 간단한 로그인 서비스입니다.
admin 계정으로 로그인에 성공하면 플래그를 획득할 수 있습니다.
[문제풀이]
문제 파일에서 해당 사이트에 대한 app.py를 제공해준다.
users = {
'guest': 'guest',
'user': 'user1234',
'admin': FLAG
}
users의 아이디와 비밀번호가 위와 같이 딕셔너리 형태로 제공되고 있다.
이를 통해 해당 사이트에 guest 계정으로 로그인 해보자.


우리가 필요한 것은 guest 계정의 sessionid도, user 계정의 sessionid도 아니다.
admin 계정으로 로그인해야 하므로, app.py 파일을 다시 한번 살펴보자.
@app.route('/login', methods=['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')
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
return '<script>alert("wrong password");history.go(-1);</script>'
위는 url 에 /login 루트로 접속했을 때의 코드이다.
@app.route('/admin')
def admin():
# what is it? Does this page tell you session?
# It is weird... TODO: the developer should add a routine for checking privilege
return session_storage
그럼 위의 코드는 /admin 루트로 접속했을 때이므로, 이를 이용해서 접속해보자.

위와 같은 화면이 나타났다.
admin에 대한 sessionid이 있는 것 같다.
그럼 sessionid를 guest로 로그인 한 후 value 값에 입력해보자!


admin으로 로그인되었고, flag도 획득했다.
[출처]
해커들의 놀이터, Dreamhack
해킹과 보안에 대한 공부를 하고 싶은 학생, 안전한 코드를 작성하고 싶은 개발자, 보안 지식과 실력을 업그레이드 시키고 싶은 보안 전문가까지 함께 공부하고 연습하며 지식을 나누고 실력 향
dreamhack.io