드림핵 CTF 출제 문제 풀기(3)

abcd·2023년 8월 21일

CTF 연습문제

목록 보기
2/4

simple-web-request

소스 코드
#!/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 -Flag로 넘어가는 방식이다

STEP1
매우 간단하게 step2로 넘어갈수 있다
if prm1 == "getget" and prm2 == "rerequest":
return redirect(url_for("step2", prev_step_num = step1_num))
STEP2
if prm1 == "pooost" and prm2 == "requeeest":
return render_template("flag.html", flag_txt=FLAG)
else:
매우 간단하게 넘어갈수 있따

DH{c46b414ddba26adfa4606c59655bda0a18fbe260606b042b52d865e0160eea0e}

profile
NOOOOOOOMU

0개의 댓글