๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • Welcome.
:: DreamHack ๐Ÿšฉ/wargame - web

[ dreamhack ] - [ web | csrf -1 ]

by EunBird 2022. 3. 29.

 

 

๋ฌธ์ œ๋Š” ์ด๋ ‡๋‹ค.

csrf ์ทจ์•ฝ์ ์„ ์ด์šฉํ•˜์—ฌ flag๋ฅผ ์–ป์–ด๋‚ด๋Š” ๊ฒƒ์ด ๋ฌธ์ œ์ด๋‹ค.

 

 


 

 

์ฃผ์–ด์ง„ ๋งํฌ์— ์ ‘์†ํ•˜๋ฉด

์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ 4๊ฐœ์˜ ํŽ˜์ด์ง€์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋Š”

๋ฉ”์ธ ํŽ˜์ด์ง€๊ฐ€ ๋œฌ๋‹ค.

 


:: vuln(csrf) page ::

vuln(csrf) page์— ์ ‘์†ํ•œ ํ™”๋ฉด.

์œ„ ์‚ฌ์ง„์—์„œ ๋ณด๋ฉด, url์— get์œผ๋กœ ๋ณด๋‚ธ <script>alert(1)</script>  ๊ฐ€ 

์ถœ๋ ฅ๋˜์—ˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋Š”๋ฐ,

script ๋ผ๋Š” ๋ฌธ์ž์—ด์ด ํ•„ํ„ฐ๋ง๋˜๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

 


:: memo ::

memo ํŽ˜์ด์ง€ ์ ‘์†ํ™”๋ฉด.

์ด๋•Œ, hello๋ผ๋Š” ๋ฌธ์ž๊ฐ€ ์ถœ๋ ฅ๋˜๋Š”๋ฐ, 

ํ•œ๋ฒˆ ๋” ๋‹ค์‹œ ์ ‘์†ํ•˜๋ฉด,

memo ํŽ˜์ด์ง€ ๋‘๋ฒˆ์งธ ์ ‘์†ํ™”๋ฉด.

์ด๋ ‡๊ฒŒ hello๊ฐ€ ๋‘๋ฒˆ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 


 

:: notice_flag ::

notice_flag&nbsp; ์ ‘์† ํ™”๋ฉด.

์ ‘์† ๊ถŒํ•œ์ด ์—†์–ด์„œ Acees Denied ๊ฐ€ ๋ฐœ์ƒ์ค‘์ž„์„ ํ™•์ธ๊ฐ€๋Šฅํ•˜๋‹ค.

notice_flag์ธ ๊ฑฐ๋กœ ๋ด์„œ๋Š” ์ด ํŽ˜์ด์ง€์— flag๊ฐ€ ์žˆ์ง€ ์•Š์„๊นŒ๋ผ๊ณ  ์ƒ๊ฐ๋œ๋‹ค.

 


:: flag ::

flag ํŽ˜์ด์ง€ ์ ‘์† ํ™”๋ฉด.

์ด ํŽ˜์ด์ง€์— ๋ณด์ด๋Š” ์ž…๋ ฅ์ฐฝ์— XSS๋ฅผ ์ผ์œผํ‚ฌ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•ด์•ผ ํ•  ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.

 



๊ทธ๋Ÿผ, notice_flag ํŽ˜์ด์ง€์—์„œ ๋ง‰ํ˜€์žˆ์—ˆ๋˜ ํ•ด๋‹น ํŽ˜์ด์ง€์— ์ ‘์†์„ ์„ฑ๊ณตํ•œ๋‹ค๋ฉด 

flag๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค๋ฉด, 

/admin/notice_flag  ์œ„์น˜์— ์ ‘์†์„ ์š”์ฒญํ•ด์•ผ ํ•˜๋Š”๋ฐ, 

flagํŽ˜์ด์ง€๋ฅผ ๋ณด๋ฉด,

http://127.0.0.1:8000/vuln?param=[์ž…๋ ฅ์นธ]

์ด๋ผ๊ณ  ๋˜์–ด์žˆ์–ด์„œ vulnํŽ˜์ด์ง€๋กœ ์ž…๋ ฅ์ฝ”๋“œ๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์ด๋•Œ, ์•„๊นŒ scriptํƒœ๊ทธ๋Š” ํ•„ํ„ฐ๋ง ๋˜์—ˆ์œผ๋‹ˆ ๋‹ค๋ฅธ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์ž.

img ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์ž!

<img src="/admin/notice_flag">  

์ด๋ ‡๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•ด๋ณด๊ฒ ๋‹ค. 

 


์ด๋ ‡๊ฒŒ good ์ด๋ผ๋Š” ๋ง๊ณผ ํ•จ๊ป˜ ์•Œ๋ฆผ์ฐฝ์ด ๋œฌ๋‹ค.

 

memo๋กœ ๋“ค์–ด๊ฐ€์„œ ํ˜น์‹œ flag๊ฐ€ ์ถœ๋ ฅ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด ๋ณด์•˜์œผ๋‚˜,

hello๋งŒ ์ถœ๋ ฅ๋˜์—ˆ์„ ๋ฟ, ์•„๋ฌด์ผ ์—†๋‹ค.

 

 

์ด์ œ ํ—ท๊ฐˆ๋ฆฌ๋‹ˆ 

๋“œ๋ฆผํ•ต์—์„œ ์ค€ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋ด๋ณด์ž.


#!/usr/bin/python3
from flask import Flask, request, render_template
from selenium import webdriver
import urllib
import os

app = Flask(__name__)
app.secret_key = os.urandom(32)

try:
    FLAG = open("./flag.txt", "r").read()
except:
    FLAG = "[**FLAG**]"


def read_url(url, cookie={"name": "name", "value": "value"}):
    cookie.update({"domain": "127.0.0.1"})
    try:
        options = webdriver.ChromeOptions()
        for _ in [
            "headless",
            "window-size=1920x1080",
            "disable-gpu",
            "no-sandbox",
            "disable-dev-shm-usage",
        ]:
            options.add_argument(_)
        driver = webdriver.Chrome("/chromedriver", 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()
        print(str(e))
        # return str(e)
        return False
    driver.quit()
    return True


def check_csrf(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)


@app.route("/")
def index():
    return render_template("index.html")


@app.route("/vuln")
def vuln():
    param = request.args.get("param", "").lower()
    xss_filter = ["frame", "script", "on"]
    for _ in xss_filter:
        param = param.replace(_, "*")
    return param


@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", "")
        if not check_csrf(param):
            return '<script>alert("wrong??");history.go(-1);</script>'

        return '<script>alert("good");history.go(-1);</script>'


memo_text = ""


@app.route("/memo")
def memo():
    global memo_text
    text = request.args.get("memo", None)
    if text:
        memo_text += text
    return render_template("memo.html", memo=memo_text)


@app.route("/admin/notice_flag")
def admin_notice_flag():
    global memo_text
    if request.remote_addr != "127.0.0.1":
        return "Access Denied"
    if request.args.get("userid", "") != "admin":
        return "Access Denied 2"
    memo_text += f"[Notice] flag is {FLAG}\n"
    return "Ok"


app.run(host="0.0.0.0", port=8000)

์ด๋ ‡๊ฒŒ ๊ธธ๋‹ค...

๋ถ„์„ํ•˜๋Š”๋ฐ ํ•˜๋ฃจ ๋‹ค ๋ณด๋‚ธ ๊ฒƒ ๊ฐ™๋‹ค. ใ…‹ใ…‹...

 

๋จผ์ €, /admin/notice_flag 

๋ถ€๋ถ„๋ถ€ํ„ฐ ๋ถ„์„ํ•ด๋ณด์ž.

 


/admin/notice_flag 

@app.route("/admin/notice_flag")
def admin_notice_flag():
    global memo_text
    if request.remote_addr != "127.0.0.1": # 127.0.0.1์ด์–ด์•ผ ํ•จ.
        return "Access Denied"
    if request.args.get("userid", "") != "admin": # userid ๋„ admin์ด์–ด์•ผ ํ•จ.
        return "Access Denied 2"
    memo_text += f"[Notice] flag is {FLAG}\n"
    return "Ok"

Flag๋ฅผ ์–ป์œผ๋ ค๋ฉด 2๊ฐœ์˜ if๋ฌธ์„ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ํ†ต๊ณผํ•ด์•ผ ํ•˜๋Š”๋ฐ, 

์‹ค์€, ์ž์„ธํžˆ ๋ณด๋ฉด, ์ด /admin/notice_flag ํŽ˜์ด์ง€์—์„œ flag๋ฅผ ์ง์ ‘ ์ฃผ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ณ ,

memo_text ๋ผ๋Š” ๋ณ€์ˆ˜์— flag๊ฐ’์„ ์ €์žฅํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

 

์ฆ‰, 2๊ฐœ์˜ if๋ฌธ์˜ ์กฐ๊ฑด๋ฌธ์— ์ถฉ์กฑํ•˜์ง€ ์•Š๋„๋ก 

127.0.0.1์„ ์‚ฌ์šฉํ•˜๋ฉฐ , userid=admin ์ด์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๋˜ํ•œ, memo_text ๋ผ๋Š” ๋ณ€์ˆ˜์— flag๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณผ์ •๊นŒ์ง€ ํ•ด๋ƒˆ๋‹ค๋ฉด, 

memo_text ๋Š” ์–ด๋Š ์ฝ”๋“œ์—์„œ ์ถœ๋ ฅํ•ด์ฃผ๋Š”์ง€๋„ ํ™•์ธ์„ ํ•ด์•ผ ๋œ๋‹ค.

 

์ด์ œ, ๊ทธ๋Ÿผ memo_text ๋Š” ์–ด๋””์—์„œ ์ถœ๋ ฅ์‹œ์ผœ์ฃผ๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž.

 


/memo

@app.route("/memo")
def memo():
    global memo_text
    text = request.args.get("memo", None)
    if text:
        memo_text += text
    return render_template("memo.html", memo=memo_text)
    # ์ถœ๋ ฅ๋˜๋Š” ํŒŒ์ผ์€ memo ์ด๊ณ , memo๋Š” memo_text์— ๋“ค์–ด์žˆ๋Š” ๋‚ด์šฉ์ด ์ €์žฅ๋œ ํ›„ ์ถœ๋ ฅ๋จ.

memo  ํŽ˜์ด์ง€์˜ ์ฝ”๋“œ์ด๋‹ค.

memo_text ๋Š” ์ „์—ญ๋ณ€์ˆ˜์ž„์„ ์•Œ ์ˆ˜ ์žˆ๊ณ , 

์†”์งํžˆ flask ์™€ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ฅผ ์ž์„ธํžˆ ์•Œ์ง€๋Š” ๋ชปํ•ด์„œ 

์–ด๋–ค ์ฝ”๋“œ์ธ์ง€ ์™„๋ฒฝํžˆ ์„ค๋ช…ํ•˜๊ธด ํž˜๋“ค์ง€๋งŒ,

๋งˆ์ง€๋ง‰ ์ค„์—์„œ memo_text๋ฅผ memo์— ์ €์žฅํ•˜๊ณ  return ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์•„, 

memo ํŽ˜์ด์ง€์—์„œ flag๊ฐ’์ด ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.

 


/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", "")
        if not check_csrf(param):  # check_csrf ํ•จ์ˆ˜ ํ˜ธ์ถœ.
            return '<script>alert("wrong??");history.go(-1);</script>'
            # check_csrf๊ฐ€ False ์ธ ๊ฒฝ์šฐ.

        return '<script>alert("good");history.go(-1);</script>' 
        # check_csrf๊ฐ€ True ์ธ ๊ฒฝ์šฐ.

์ด๋ฒˆ์—” flag ํŽ˜์ด์ง€์ด๋‹ค.

request ๋ฐฉ์‹์ด GET ์ธ ๊ฒฝ์šฐ์™€ POST ์ธ ๊ฒฝ์šฐ๋ฅผ ๋‚˜๋ˆ„์–ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š”๋ฐ, 

GET ์ธ ๊ฒฝ์šฐ๋Š” ๊ทธ๋ƒฅ ๋‹ค์‹œ flagํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ๋˜๋„๋ก๋˜์–ด ์žˆ์œผ๋‹ˆ ์˜๋ฏธ๊ฐ€ ์—†๋‹ค.

POST ์ธ ๊ฒฝ์šฐ๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ํ™•์ธํ•  ์ฝ”๋“œ์ธ๋ฐ,

(์‚ฌ์‹ค ์šฐ๋ฆฌ๋Š” URL ๋ง๊ณ  ๋นˆ ์ž…๋ ฅ์ฐฝ์— ์ž…๋ ฅํ–ˆ์œผ๋‹ˆ ๋‹น์—ฐํžˆ POST์ธ ๊ฒฝ์šฐ์˜ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.)

๋‚ด๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’์„ param ์ด๋ผ๋Š” ๋ณ€์ˆ˜๋กœ ๋ฐ›๊ณ  ์žˆ๊ณ ,

   ๋‘๊ฐœ๊ฐ€ ๋“ค์–ด๊ฐ€๊ฒŒ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ, ํ•˜๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’, ํ•˜๋‚˜๋Š” ๋นˆ๋ฌธ์ž์—ด์ด๋‹ค.

๊ทธ ํ›„ , check_csrf()ํ•จ์ˆ˜์— ์ธ์ž๋กœ param ์„ ๋„ฃ์–ด์„œ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ , ๋งŒ์•ฝ check_csrf()ํ•จ์ˆ˜๊ฐ€ ๊ฑฐ์ง“์ด๋ฉด wrong ์„, ์ฐธ์ด๋ฉด good์„ ์ถœ๋ ฅํ•˜๋„๋ก๋˜์–ด์žˆ์Œ์„ ํ™•์ธํ–ˆ๋‹ค.

 

๊ทธ๋Ÿผ ๋จผ์ €, check_csrf() ํ•จ์ˆ˜๊ฐ€ ๋ฌด์—‡์ธ์ง€ ํ™•์ธํ•ด๋ณด์ž!


check_csrf() ํ•จ์ˆ˜

def check_csrf(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 ํ•จ์ˆ˜ ํ˜ธ์ถœ.

check_csrf() ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ค ํ•จ์ˆ˜์ธ์ง€ ํ™•์ธํ•ด๋ณด์ž.

๋จผ์ €, param์— ์ €์žฅ๋˜์žˆ๋˜ ์šฐ๋ฆฌ๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’์€ 

url ์ด๋ผ๋Š” ๋ณ€์ˆ˜์— ์œ„์ฒ˜๋Ÿผ urlํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜๋˜์–ด ์ €์žฅ๋˜๊ณ ,

param์— ์ €์žฅ๋˜์—ˆ๋˜ ๋นˆ๋ฌธ์ž์—ด์€ name ๊ณผ value ๋ผ๋Š” ํŠน์„ฑ์ด ์ €์žฅ๋˜์—ˆ๋‹ค.

๊ทธ ํ›„ read_url() ์ด๋ผ๋Š” ํ•จ์ˆ˜์— ๊ฐ๊ฐ ์ธ์ž๋กœ ๋„˜์–ด๊ฐ€๋Š”๋ฐ, 

์ด๋•Œ, ๋˜ read_url() ์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ์— 

์ด๋ฒˆ์—”  read_url() ์ด๋ผ๋Š” ํ•จ์ˆ˜๋„ ํ™•์ธ์„ ํ•ด๋ด์•ผ๊ฒ ๋‹ค.


read_url() ํ•จ์ˆ˜

def read_url(url, cookie={"name": "name", "value": "value"}):
    cookie.update({"domain": "127.0.0.1"})
    try:
        options = webdriver.ChromeOptions()
        for _ in [
            "headless",
            "window-size=1920x1080",
            "disable-gpu",
            "no-sandbox",
            "disable-dev-shm-usage",
        ]:
            options.add_argument(_)
        driver = webdriver.Chrome("/chromedriver", 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()
        print(str(e))
        # return str(e)
        return False
    driver.quit()
    return True

read_url() ํ•จ์ˆ˜๊ฐ€ ๋ฌด์—‡์ธ์ง€ ํ™•์ธํ•ด๋ณด์ž.

 

๋จผ์ €, ์•„๊นŒ check_csrf()ํ•จ์ˆ˜์—์„œ ์ธ์ž๋กœ ๋ณด๋‚ธ ๊ฐ’ ์ค‘ ํ•˜๋‚˜์ธ cookie์˜ ์†์„ฑ์—

domain:127.0.0.1     ์ด๋ผ๋Š” ๊ฒƒ์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋Š” ์ฝ”๋“œ๊ฐ€ ๋ณด์ธ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด ์†์„ฑ์€ ์•„๊นŒ /admin/notice_flag์—์„œ ํ™•์ธํ•œ ์กฐ๊ฑด์ค‘ ํ•˜๋‚˜์ด๋‹ค.

 

๊ทธ ํ›„, ๋ญ”๊ฐ€ ๋ณต์žกํ•œ ์ฝ”๋“œ๊ฐ€ ๋ณด์ด๋Š”๋ฐ, ์ •๋ง ๋จธ๋ฆฌ๊ฐ€ ํ•˜์–˜์ง€๋Š” ์ฝ”๋“œ์ด๋‹ค.ใ…‹..

try ๋ฌธ์ด ์žˆ๊ณ , ๊ทธ ์•ˆ์— for ๋ฌธ์ด ์žˆ๋Š”๋ฐ,

            "headless",
            "window-size=1920x1080",
            "disable-gpu",
            "no-sandbox",
            "disable-dev-shm-usage"

 

์ด 5๊ฐœ์˜ ๊ฐ’์— ๋Œ€ํ•ด์„œ for๋ฌธ์„ ๋ชจ๋‘ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.

 

๊ทผ๋ฐ, ์•„๊นŒ flag ํŽ˜์ด์ง€ ์—์„œ

<img src="/admin/notice_flag">

๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๋•Œ, good ์ด ๋–ด์—ˆ์œผ๋‹ˆ๊นŒ, 

์œ„์˜ read_url() ํ•จ์ˆ˜์—์„œ๋Š” try๋ฌธ, for๋ฌธ์ด ์ฐจ๋ก€๋กœ ์‹คํ–‰๋˜๊ณ , except๋ฌธ์€ ๋„˜์–ด๊ฐ€๊ณ 

True ๊ฐ€ return ๋˜์—ˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 


์ด์ œ ์šฐ๋ฆฌ๊ฐ€ ํ™•์ธํ•  ๊ฒƒ์€ ๋น ์ง„ ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์ด๋‹ค.

์•„๊นŒ /admin/notice_flag ํŽ˜์ด์ง€์—์„œ 

์–ป์€ ์กฐ๊ฑด์€ 127.0.0.1 ๊ณผ userid=admin  ์ด์—ˆ๋Š”๋ฐ,

์œ„์˜ ์ฝ”๋“œ๋“ค์„ ํ™•์ธํ•˜๋ฉด์„œ 127.0.0.1 ์— ๋Œ€ํ•œ ์ฝ”๋“œ๋Š” ์กด์žฌํ•˜์˜€์œผ๋‚˜,

userid=admin ์œผ๋กœ ์„ค์ •ํ•œ ์ฝ”๋“œ๋Š” ์—†์—ˆ๋‹ค.

์ฆ‰, userid=admin ์ด๋ผ๋Š” ๊ฐ’๋„ ์ž…๋ ฅํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๊ฐ๋˜์–ด์ง„๋‹ค.

๋”ฐ๋ผ์„œ 

<img src="/admin/notice_flag?userid=admin">

์ด๋ผ๊ณ  flagํŽ˜์ด์ง€์— ์ž…๋ ฅํ•˜์—ฌ ๋ณด๊ฒ ๋‹ค.




flag ํŽ˜์ด์ง€์˜ ์ž…๋ ฅ์นธ์— XSS ์ž…๋ ฅ.

 


memo ํŽ˜์ด์ง€

memo ํŽ˜์ด์ง€์— FLAG ๊ฐ’์ด ์ถœ๋ ฅ๋˜์—ˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

์„ฑ๊ณต!!!

728x90

':: DreamHack ๐Ÿšฉ > wargame - web' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ dreamhack ] - [ web | login-1 ]  (0) 2022.04.25
[ dreamhack ] - [ web | csrf-2 ]  (0) 2022.04.05
[ dreamhack ] - [ web | image-storage ]  (0) 2022.03.17
[ dreamhack ] - [ web | proxy-1 ]  (0) 2022.03.17
[ dreamhack ] - [ web | command-injection-1 ]  (0) 2022.03.16

๋Œ“๊ธ€