포스트

[Dreamhack] XSS Filtering Bypass

[Dreamhack] XSS Filtering Bypass

문제 링크

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

문제 설명

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

문제 분석

/flag 엔드포인트에서 POST 요청을 보내면, 셀레늄을 이용해 /vuln 엔드포인트에 사용자가 지정한 param 파라미터를 가지고 GET 요청을 전송한다.
이때, param에는 다음과 같은 필터링이 적용된다.

1
2
3
4
5
6
def xss_filter(text):
    _filter = ["script", "on", "javascript:"]
    for f in _filter:
        if f in text.lower():
            text = text.replace(f, "")
    return text

param 파라미터에 “script”, “on”, “javascript” 문자열이 존재하는 경우 이를 제거하고 있다. (치환 방식 필터링)
하지만 일회성 치환이므로 <scscriptript>와 같이 입력하는 경우 “script”가 한 번만 ““으로 치환되어 결과적으로 <script>가 된다.
이 점을 이용하여 /memo 엔드포인트 혹은 dreamhack tools에 document.cookie와 함께 요청하도록 자바스크립트를 작성한다.

새롭게 알게된 점

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

"Dreamhack-Web" 카테고리의 게시물