문제화면이다.
STEP 1을 들어가 보자.
문제코드도 한번 보자.
#!/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)
step1 , step2에 대한 코드들이 나와있다.
step1 get 방식으로 요청을 받으며 if and를 로그인을 확인하고 prm1, prm2를 입력받는다
step2에서 step2_num 이 생성된다 이 값은 플래그 값인 거 같다.
/flag에 보면 step2에 대한 param, param2에 대한 설정이 있다.
이것은 순서대로 step을 밟고 왔냐를 확인하는 과정이기 때문인 거 같다.
해보자
get 방식 특징인 URL에 그대로 나온다.
알맞게 입력하면 그대로 Step2로 넘어가게 된다.
Step2에 알맞은 값을 입력하면
끝이다.
소스코드에 다 나와있어서 설명할 게 없다.
'DreamHack > CTF' 카테고리의 다른 글
(CTF 출제) Tomcat Manager (1) | 2024.09.05 |
---|---|
(CTF 출제) amocafe (2) | 2024.09.05 |
(CTF 출제) Whis-is-my-ip (0) | 2024.09.04 |
(CTF 출제) BypassIF (0) | 2024.09.04 |
(CTF 출제) Random-Test (0) | 2024.09.04 |