제가 생가가하는 것이 맞는 건가요?
/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
bincat
세계수
네 얼추 맞습니다!
guest
로 로그인한건 '나'이고, admin
세션을 가지고 취약한 코드를 실행하게 되는 것은 봇입니다.
check_csrf
를 통해 봇이 (admin sessionid를 들고) 해당 동작을 수행하게 됩니다.