이번엔 세션을 활용한 문제이다
이번 문제에선 /
, /admin
이렇게 두 라우터가 있었다
루트 라우터에선 사용자 인증을 통해 admin이면 Flag를 보여주고
admin 라우터에선 어드민 계정의 sessionid를 반환하고 있다
session 라우터의 return 값은 다음과 같다
{
"세션 아이디": "권한 (admin, guest)"
}
이 세션 아이디를 이용해 루트 라우터에 접속한 뒤 쿠키에 sessionid
를 생성한뒤 값에 아까 얻은 키를 주입하면 flag가 나오는 것을 확인 할 수 있다
취약점 코드
@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"}')
session_id = request.cookies.get('sessionid', None)
를 가져온 후 키 값이 admin과 일치하면 flag를 반환하는 구조이다