๐๏ธ Access
์ ํ๊ธฐ๋ฅผ ๋ง์ ๋๋ฆผ์ด์๊ฒ ์ฌ๋ฌผํจ์ด ๋ฐฐ์ ๋์์ต๋๋ค. ํ์ง๋ง ๊ธฐ์ต๋ ฅ์ด ์ ์ข์ ๋๋ฆผ์ด๋ ์ฌ๋ฌผํจ ๋ฒํธ์ ์๋ฌผ์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ชจ๋ ์์ด๋ฒ๋ฆฌ๊ณ ๋ง์์ด์... ๋๋ฆผ์ด๋ฅผ ์ํด ์ฌ๋ฌผํจ ๋ฒํธ์ ์๋ฌผ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์์๋ด ์ฃผ์ธ์!์ฌ๋ฌผํจ ๋ฒํธ๋ ์ํ๋ฒณ ์๋ฌธ์ ํน์ ์ซ์๋ฅผ ํฌํจํ๋ 4์๋ฆฌ ๋๋ค ๋ฌธ์์ด์ด๊ณ , ๋น๋ฐ๋ฒํธ๋ 100 ์ด์ 200 ์ดํ์ ๋๋ค ์ ์์ ๋๋ค. ๋ ๊ฐ์ ๋ง๊ฒ ์ ๋ ฅํ๋ฉด ํ๋๊ทธ๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค. ํ๋๊ทธ๋ FLAG ๋ณ์์ ์์ต๋๋ค.
ํ๋๊ทธ ํ์์ DH{...} ์ ๋๋ค.
๐พ Exploit Algorithm & Payload
> app.py
#!/usr/bin/python3
from flask import Flask, request, render_template
import string
import random
app = Flask(__name__)
try:
FLAG = open("./flag.txt", "r").read() # flag is here!
except:
FLAG = "[**FLAG**]"
rand_str = ""
alphanumeric = string.ascii_lowercase + string.digits
for i in range(4):
rand_str += str(random.choice(alphanumeric))
rand_num = random.randint(100, 200)
@app.route("/", methods = ["GET", "POST"])
def index():
if request.method == "GET":
return render_template("index.html")
else:
locker_num = request.form.get("locker_num", "")
password = request.form.get("password", "")
if locker_num != "" and rand_str[0:len(locker_num)] == locker_num:
if locker_num == rand_str and password == str(rand_num):
return render_template("index.html", result = "FLAG:" + FLAG)
return render_template("index.html", result = "Good")
else:
return render_template("index.html", result = "Wrong!")
app.run(host="0.0.0.0", port=8000)
#1
: '/' ํ์ด์ง์์ ์ฌ๋ฌผํจ ๋ฒํธ, ์๋ฌผ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅ ํ ๋ฐ์์ ํ์ธํ ์ ์๋ค.
: ์ฝ๋ ํด์์ ๋ค์๊ณผ ๊ฐ๋ค.(๋ฌธ์ ์์ ์๋ ค์ค)
1) ์ฌ๋ฌผํจ ๋ฒํธ๋ ์ํ๋ฒณ ์๋ฌธ์ ํน์ ์ซ์๋ฅผ ํฌํจํ๋ 4์๋ฆฌ ๋๋ค ๋ฌธ์์ด
2) ์๋ฌผ์ ๋น๋ฐ๋ฒํธ๋ 100์ด์ 200์ดํ ๋๋ค ์ ์
3) ๊ฐ์ ๋ง๊ฒ ์ ๋ ฅํ๋ฉด ํ๋๊ทธ๊ฐ ์ถ๋ ฅ
#2
: burp suite tool์ ์ด์ฉํ์ฌ Proxy๋ฅผ ์ก๊ณ Intruder ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ค.
: ์ฌ๋ฌผํจ ๋ฒํธ(locker_num)์ ๊ฐ์ ํ์ธํ๊ธฐ ์ํด a-z0-9(Payload count: 36)๊น์ง Brute-Forceํ๋ค.
: ๋ค์๊ณผ ๊ฐ์ด length์ ๋ณํ๋ฅผ ํ์ธํ๊ณ ๊ฐ์ ์ ์ถํ๋ค.
: 'g'๋ผ๋ ๊ฒ์์ ๋ค๋ฅธ ๊ฐ๊ณผ ๋ค๋ฅธ Length๋ฅผ ํ์ธํ ์ ์์๊ณ , Response ๊ฐ์ผ๋ก Good์ ํ์ธํ ์ ์๋ค.
#3
: 'g3d2'๊ฐ ์ฌ๋ฌผํจ ๋ฒํธ์์ด ํ์ธ๋์๋ค.
๐Analysis and results for obtaining the Flag DH{…}
: ๋ค์๊ณผ ๊ฐ์ด ์๋ฌผ์ ๋ฒํธ๋ ์์์ ์ธ๊ธํ๋ ์กฐ๊ฑด๋๋ก payload๋ฅผ ์์ฑํ๊ณ Brute-Force ์์ผ์ฃผ๋ฉด flag๋ฅผ ํ๋ํ ์ ์๋ค.
'[Dreamhack]WebHacking > Wargame&CTF' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Dreamhack] Level1: simple-ssti (0) | 2024.03.24 |
---|---|
[Dreamhack] Level1: [wargame.kr] strcmp (1) | 2024.02.25 |
[Dreamhack] Level2: login-1 (2) | 2024.02.25 |
[Dreamhack] CTF Season 5 Round #4 - BypassIF (1) | 2024.02.25 |
[Dreamhack] Level2: baby-sqlite (0) | 2024.02.23 |