문제에서 요구하는 형식의 문자열을 입력하여 플래그를 획득하세요. 플래그는 flag.txt 파일과 FLAG 변수에 있습니다.
플래그 형식은 DH{...} 입니다.
난 이것만 보고 뭐지 싶어서 바로 코드를 다운 받았다.
#!/usr/bin/python3
from flask import Flask, request, render_template
import re
app = Flask(__name__)
try:
FLAG = open("./flag.txt", "r").read() # flag is here!
except:
FLAG = "[**FLAG**]"
@app.route("/", methods = ["GET", "POST"])
def index():
input_val = ""
if request.method == "POST":
input_val = request.form.get("input_val", "")
m = re.match(r'dr\w{5,7}e\d+am@[a-z]{3,7}\.\w+', input_val)
if m:
return render_template("index.html", pre_txt=input_val, flag=FLAG)
return render_template("index.html", pre_txt=input_val, flag='?')
app.run(host="0.0.0.0", port=8000)
문제 이름(reg)만 봐도 정규표현식 문제이다.
m = re.match(r'dr\w{5,7}e\d+am@[a-z]{3,7}\.\w+', input_val)
if m:
return render_template("index.html", pre_txt=input_val, flag=FLAG)
이 부분이 핵심. 내 입력값을 처리하는 부분이다
re.match()는 입력된 값(input_val)이 특정 정규식 패턴과 일치하는지 확인합니다.
패턴: dr\w{5,7}e\d+am@[a-z]{3,7}.\w+
dr: 입력이 dr로 시작해야 한다
\w{5,7}: 5~7개의 알파벳 또는 숫자가 온다.
e\d+am: 그 다음에는 e, 한 자리 이상의 숫자, 그리고 am이 나온다.
@[a-z]{3,7}: 뒤에 세 글자에서 일곱 글자의 소문자가 있는 이메일 도메인이 나온다.
.\w+: 그 뒤에는 도메인 끝부분이 나옵니다 (예: .com, .net 등).
입력값이 이 정규식에 맞으면 index.html 템플릿을 렌더링하며, pre_txt에 입력값을, flag에 읽은 FLAG 값을 넘겨준다.
draaaaae11am@aaa.aa