제가 생가가하는 것이 맞는 건가요?

/flag에서 POST를 전송을 하는데
http://127.0.0.1:8000/vuln?param=...

와 같인 전송을 하면

@app.route("/flag", methods=["GET", "POST"])
def flag():
    if request.method == "GET":
        return render_template("flag.html")
    elif request.method == "POST":
        param = request.form.get("param", "")
        session_id = os.urandom(16).hex()
        session_storage[session_id] = 'admin'
        if not check_csrf(param, {"name":"sessionid", "value": session_id}):
            return '<script>alert("wrong??");history.go(-1);</script>'
        return '<script>alert("good");history.go(-1);</script>'
       

에서
127.0.0.1:8000 여서 서버에서 접속을 시도하는 거고

        session_id = os.urandom(16).hex()
        session_storage[session_id] = 'admin'
        

에서 접속을 시도할때 admin 세션을 만들어서
admin세션으로 접속을 하고
/chage_password 가되어서 guest으로 로그인되어있어도 admin을 원하는 pw으로 변경하이 되는 게맞나요?

#web
작성자 정보
답변 1
avatar
bincat
Closed Beta Tester

네 얼추 맞습니다!
guest 로 로그인한건 '나'이고, admin 세션을 가지고 취약한 코드를 실행하게 되는 것은 봇입니다.
check_csrf 를 통해 봇이 (admin sessionid를 들고) 해당 동작을 수행하게 됩니다.

2024.01.29. 18:36
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기