워게임/dreamhack XSS Filtering Bypass - XSS Filtering Bypass XSS Filtering ByPass 문제 설명 문제 풀이 문제 요약 문제 설명 - 3개의 페이지와 각 페이지의 기능 vuln(xss)page 단순하게 이미지를 출력하는 페이지로 보입니다. 또한 GET방식을 사용하는것을 보아, param저 변수가 취약한 파라미터가 될 수 있을것이라고 생각됩니다. memo memo를 출력하는 페이지로 보입니다. 이것 또한GET방식을 사용하는것을 보아 시도해보는것도 좋을거 같습니다. flag 입력한값에 제출하면 저 url대로 동작하는것이라고 생각합니다. POST 방식을 사용합니다. app.py 코드의 주요 함수 확인 def check_xss(param, cookie={"name": "name", "value": "value"}): url = f"http://127.0.0.1:8000/vuln?param={urllib.parse.quote(param)}" return read_url(url, cookie) check_xss 함수는 param를 url인코딩을 진행하고, vuln페이지에 보내는 url를 작성하여 쿠키와 함께, readurl에 전달하는 형식입니다. def xss_filter(text): _filter = ["script", "on", "javascript:"] for f in _filter: if f in text.lower(): text = text.replace(f, "") return text xss_filter는 "script", "on","javascript"를 필터링하고 또한, lower()함수를 사용하여 소문자까지 필터링하는것을 확인할 수 있습니다. def vuln(): param = request.args.get("param", "") param = xss_filter(param) return param xss_filter함수를 호출 후에 그 결과값을 반환하는 함수 입니다. def flag(): if request.method == "GET": return render_template("flag.html") elif request.method == "POST": param = request.form.get("param") if not check_xss(param, {"name": "flag", "value": FLAG.strip()}): return '<script>alert("wrong??");history.go(-1);</script>' return '<script>alert("good");history.go(-1);</script>' flag함수는 GET방식은 flag.html을 랜더링하여 반환하지만 POST 형식으로 진행할경우 check_xss함수의 반환값으로 동작하는것을 확인할 수 있습니다. @app.route("/memo") def memo(): 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 방식으로 동작해야 코드가 정상적으로 동작함을 알 수 있습니다. 페이지 중 POST 방식으로 동작하는 페이지는 flag 페이지이기 때문에 flag페이지에서 페이로드를 전달합니다. 페이로드 <sscriptcript>locatioonn.href="/memo?memo="+document.cookie;</sscriptcript> flag함수는 정상적으로 동작하는것을 확인할 수 있다. 정상적으로flag가 나오는것을 확인할 수 있습니다. 문제 요약 공유하기 게시글 관리 MSS 저작자표시 비영리 변경금지 '워게임 > dreamhack' 카테고리의 다른 글 [DreamHack] Flying Chars (0) 2024.07.31 [pwnable] shell_basic 문제풀이 (0) 2024.05.26 [dreamhack] ROT128 문제풀이 (0) 2024.01.31 [dreamhack] rev-basic-8 문제풀이 (0) 2023.12.26 [dreamhack] dreamhack-tools-cyberchef 문제풀이 (0) 2022.05.31 Contents 당신이 좋아할만한 콘텐츠 [DreamHack] Flying Chars 2024.07.31 [pwnable] shell_basic 문제풀이 2024.05.26 [dreamhack] ROT128 문제풀이 2024.01.31 [dreamhack] rev-basic-8 문제풀이 2023.12.26 댓글 0 + 이전 댓글 더보기