웹해킹

session_basic

pororo 2026. 9. 25. 23:20

Dreamhack Session_basic 문제 풀이


#!/usr/bin/python3
from flask import Flask, request, render_template, make_response, redirect, url_for

app = Flask(__name__)

try:
    FLAG = open('./flag.txt', 'r').read()
except:
    FLAG = '[**FLAG**]'

users = {
    'guest': 'guest',
    'user': 'user1234',
    'admin': FLAG
}


# this is our session storage
session_storage = {
}


@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"}')


@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>'


@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


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)

위에 코드를 보면 /admin으로 사이트를 들어가면 session_storage를 반환 하는것을 볼수 있다 그리하여 그 session_storage를

32byte를 16진수로 인코딩 한것이 admin에 session 값인것을 알수 있다. 그리고 그것을 print하여 출력 하는것을 알수 있다.


 이런식으로 admin 하고 세션에 값을 알려주는데 그것을 복사 한뒤 cookie 풀이와 똑같이 guest로 로그인 후 쿠키값을 보면 session하고 value값이 있을 건데 그걸 아까 복사한 admin에 세션 값으로 넣어 주면 admin으로 로그인을 할수 있다. 

 

'웹해킹' 카테고리의 다른 글

web-ssrf  (0) 2026.10.19
CSRF  (0) 2026.09.29
XSS  (0) 2026.09.29
session  (0) 2026.09.25
Cookie  (0) 2026.09.25