flag함수는 GET방식은 flag.html을 랜더링하여 반환하지만 POST 형식으로 진행할경우 check_xss함수의 반환값으로 동작하는것을 확인할 수 있습니다.
@app.route("/memo")defmemo():
global memo_text
text = request.args.get("memo", "")
memo_text += text + "\n"return render_template("memo.html", memo=memo_text)
받아온 값을 memo_text에 저장하고 랜더링 후에 반환하는 것을 보입니다.
문제 풀이
- 의심되는거 시도
vuln페이지의 시도해봤는데 xss_filter에 의해서 필터링되는것을 확인할 수 있습니다.
필터링 우회
<sscriptcript>alert(1)</sscriptcript>
script를 우회하여 진행하였다.
성공적으로 동작하는것을 확인할 수 있습니다.
이걸 이용해서 flag값을 얻어와야합니다.
이 문제는 플래그를 읽기 위해서는 가상의 관리자의 쿠키를 받아서 값을 출력해야합니다.
워게임 문제에서 값을 출력하는 페이지는 memo이기 때문에, memo 페이지를 이용해볼려 합니다.
memo파라미터에 123을 입력하면 123이 출력됩니다.
페이로드를 작성해서 이 페이지에서 바로 출력할려고 시도 하였으나,
잘 동작하지 않습니다.
아마 다른 페이지에서 진행해야할거 같습니다.
위에 flag함수에서 GET방식으로 통신을 진행할 경우, POST 방식으로 동작해야 코드가 정상적으로 동작함을 알 수 있습니다.