[dreamhack] session-basic

남다은·2023년 2월 15일
0

web hacking

목록 보기
3/12

접속하면 다음과 같은 화면을 확인할 수 있다. 곧바로 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를 얻을 수 있다.

profile
차곡차곡 쌓아나가는 WEB FE 개발자

0개의 댓글