<문제>
<풀이>
1. step1 풀기
문제 사이트에 처음 접속하면 보이는 페이지이다.
STEP1을 클릭한다.
param과 param2 파라미터를 입력하는 폼이 있다.
@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")
코드의 32행을 보면 param 이 "getget"이고 param2가 "rerequest" 이면 step2로 redirect 되는 것을 확인할 수 있다.
폼에 getget과 rerequest를 입력했다.
step2로 넘어가진다.
2. step2 풀기
step2로 넘어가면 또 param과 param2 입력폼이 뜬다.
@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")
코드의 74행을 보면 param이 "pooost" 이고 param2가 "requeeest"이면
flag.html가 렌더링되며 FLAG 값이 주어지는 것을 확인할 수 있다.
폼에 pooost와 requeeest를 입력했다.
3. FLAG 획득
FLAG가 출력되었다.
'드림핵' 카테고리의 다른 글
[드림핵 워게임] command-injection-chatgpt (0) | 2023.08.11 |
---|---|
[드림핵 워게임] simple_sqli_chatgpt (0) | 2023.08.11 |
[드림핵 워게임] ex-reg-ex (0) | 2023.08.09 |
[드림핵 워게임] Flying Chars (0) | 2023.08.09 |
[드림핵 워게임] phpreg (0) | 2023.08.08 |