(CTF 출제) simple-web-request

2024. 10. 9. 11:29·DreamHack/CTF

 

 

 

 

 

 

 

 

 

 

 

 

 

 

문제화면이다.

 

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' 카테고리의 다른 글

chockshop  (0) 2024.12.10
Secure Secret  (0) 2024.11.07
(CTF 출제) Tomcat Manager  (1) 2024.09.05
(CTF 출제) amocafe  (2) 2024.09.05
(CTF 출제) Whis-is-my-ip  (0) 2024.09.04
'DreamHack/CTF' 카테고리의 다른 글
  • chockshop
  • Secure Secret
  • (CTF 출제) Tomcat Manager
  • (CTF 출제) amocafe
G_OM
G_OM
최대한 설명 열심히 하려고 합니다. 궁금한 거 있으면 언제든지 물어보셔도 좋습니다.
  • G_OM
    끄적끄적
    G_OM
  • 전체
    오늘
    어제
    • 분류 전체보기 (139)
      • 모의해킹 (8)
      • Wargame (69)
        • Linux_bandit (33)
        • Webhacking.kr (36)
      • DreamHack (52)
        • WEB (14)
        • Reverising (9)
        • System (0)
        • CTF (22)
      • Android_security (5)
      • 정보보안기사 (2)
      • IT? (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • DreamHack 에 대한 문제들...
  • 인기 글

  • 태그

    webhacking.kr
    bandit30
    bandit18
    리눅스 워게임
    php
    php wrapper
    워게임
    정보보안기사
    Dreamhack
    lfi
    wargame
    union
    overthewire
    Cookie
    insecurebankv2
    drozer
    cookies
    url encode
    bandit
    Linux
    CTF
    sql injection
    안드로이드
    난독화
    bandit20
    Android
    webhacking
    bandit17
    리눅스
    Linux wargame
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
G_OM
(CTF 출제) simple-web-request
상단으로

티스토리툴바