๐ฟ Simple-web-request ๋๋ฆผํต ์๊ฒ์ ๋ฌธ์ ํ์ด
1. ๋ฌธ์ ์ ๋ํ ์ค๋ช ์ ์ฝ์ ํ ๋ฌธ์ ํ์ผ ๋ค์ด๋ก๋
2. ๋ค์ด๋ฐ์ app.py ํ์ผ ์คํ ํ ์ฝ๋ ๋ถ์
#!/usr/bin/python3
import os
from flask import Flask, request, render_template, redirect, url_for
import sys
app = Flask(__name__)
try:
# flag is here!
FLAG = open("./flag.txt", "r").read()
except:
FLAG = "[**FLAG**]"
@app.route("/")
def index():
return render_template("index.html")
@app.route("/step1", methods=["GET", "POST"])
def step1():
#### ํ์ด์ ๊ด๊ณ์๋ ์นํ
๋ฐฉ์ง ์ฝ๋
global step1_num
step1_num = int.from_bytes(os.urandom(16), sys.byteorder)
####
if request.method == "GET":
prm1 = request.args.get("param", "")
prm2 = request.args.get("param2", "")
step1_text = "param : " + prm1 + "\nparam2 : " + prm2 + "\n"
if prm1 == "getget" and prm2 == "rerequest":
return redirect(url_for("step2", prev_step_num = step1_num))
return render_template("step1.html", text = step1_text)
else:
return render_template("step1.html", text = "Not POST")
@app.route("/step2", methods=["GET", "POST"])
def step2():
if request.method == "GET":
#### ํ์ด์ ๊ด๊ณ์๋ ์นํ
๋ฐฉ์ง ์ฝ๋
if request.args.get("prev_step_num"):
try:
prev_step_num = request.args.get("prev_step_num")
if prev_step_num == str(step1_num):
global step2_num
step2_num = int.from_bytes(os.urandom(16), sys.byteorder)
return render_template("step2.html", prev_step_num = step1_num, hidden_num = step2_num)
except:
return render_template("step2.html", text="Not yet")
return render_template("step2.html", text="Not yet")
####
else:
return render_template("step2.html", text="Not POST")
@app.route("/flag", methods=["GET", "POST"])
def flag():
if request.method == "GET":
return render_template("flag.html", flag_txt="Not yet")
else:
#### ํ์ด์ ๊ด๊ณ์๋ ์นํ
๋ฐฉ์ง ์ฝ๋
prev_step_num = request.form.get("check", "")
try:
if prev_step_num == str(step2_num):
####
prm1 = request.form.get("param", "")
prm2 = request.form.get("param2", "")
if prm1 == "pooost" and prm2 == "requeeest":
return render_template("flag.html", flag_txt=FLAG)
else:
return redirect(url_for("step2", prev_step_num = str(step1_num)))
return render_template("flag.html", flag_txt="Not yet")
except:
return render_template("flag.html", flag_txt="Not yet")
app.run(host="0.0.0.0", port=8000)
++ ํน์ ํ์ด์ง๊น์ง ์ ๊ทผํ๋ ๋ฌธ์ ์ด๋, ์๋์ ์ฝ๋์ ์ฃผ๋ชฉ
ํ๋ผ๋ฏธํฐ 1์ ๊ฐ | ํ๋ผ๋ฏธํฐ 2์ ๊ฐ | |
Step 1 --> Step 2 | getget | rerequest |
Step 2 --> FLAG | pooost | requeeest |
3. ๋ค์ ๋ฌธ์ ํ์ด์ง๋ก ๋์์ ์๋ฒ ์์ฑ
4. Step 1 ํ์ด์ง๋ก ์ด๋ ํ ๊ฐ ํ๋ผ๋ฏธํฐ์ ์๋์ ๊ฐ์ด ์ ๋ ฅ --> Step 2 ํ์ด์ง๋ก ์ด๋ํ ๊ฒ์ ํ์ธ
5. Step 2 ํ์ด์ง๋ก ์ด๋ ํ ๊ฐ ํ๋ผ๋ฏธํฐ์ ์๋์ ๊ฐ์ด ์ ๋ ฅ --> FLAG ํ์ธ ๊ฐ๋ฅ
'โ๏ธ Web Hacking > Dreamhack' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Dreamhack] ex-reg-ex ๋๋ฆผํต ์๊ฒ์ ๋ฌธ์ ํ์ด (0) | 2023.11.24 |
---|---|
[Dreamhack] Web-Deserialize-Python ๋๋ฆผํต ์๊ฒ์ ๋ฌธ์ ํ์ด (0) | 2023.08.15 |
[Dreamhack] Command-Injection-ChatGPT ๋๋ฆผํต ์๊ฒ์ ๋ฌธ์ ํ์ด (0) | 2023.08.15 |
[Dreamhack] Flying Chars ๋๋ฆผํต ์๊ฒ์ ๋ฌธ์ ํ์ด (0) | 2023.08.13 |
[Dreamhack] Session ๋๋ฆผํต ์๊ฒ์ ๋ฌธ์ ํ์ด (0) | 2023.08.12 |