728x90
쿠키와 세션으로 인증 상태를 관리하는 간단한 로그인 서비스입니다.
admin 계정으로 로그인에 성공하면 플래그를 획득할 수 있습니다.

플래그 형식은 DH{…} 입니다.
if __name__ == '__main__':
    import os
    # create admin sessionid and save it to our storage
    # and also you cannot reveal admin's sesseionid by brute forcing!!! haha
    session_storage[os.urandom(32).hex()] = 'admin'
    print(session_storage)
    app.run(host='0.0.0.0', port=8000)

함수가 실행되면서 처음에 비어있는 session_storage에 랜덤한 세션 id를 key로 admin을 value로 넣고 있다.

@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 함수에서 session_storage를 반환하고 있다.

http://host3.dreamhack.games:14823/admin로 접속하니 세션 id가 나온다.

{"ac38f2333c6c0fe28e748e2c1079228f4cec5ba273974c9b2406e282f7e5b10d":"admin"}
@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 이름으로 admin을 값으로 하여 추가하고 첫 페이지에서 새로고침하면 flag가 나온다.

 

728x90

'dreamhack > Web Hacking' 카테고리의 다른 글

devtools-sources  (0) 2023.02.11
pathtraversal  (0) 2023.02.11
file-download-1  (0) 2023.02.09
XSS-1  (0) 2023.02.07
simple_sqli  (0) 2023.02.07

+ Recent posts