문제를 들어가 보자.
123을 submit을 하면 input에 출력된다.
문제파일을 확인해 보자.
#!/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)
정규표현식에 대한 문제이다.
중요한 부분을 보자.
m = re.match(r'dr\w{5,7}e\d+am@[a-z]{3,7}\.\w+', input_val)
"re.match" 함수가 있다.
이 함수는 안에 들어있는 패턴에 대해서 일치하는지 확인하는 함수이다.
정규표현식 패턴을 한번 살펴보자.
dr: 문자열이 "dr"로 시작해야 합니다
\w{5,7}: 5에서 7개의 알파벳이나 숫자 문자가 있어야합니다.
e: 그 다음에는 문자열에 "e"가 나와야 합니다.
\d+: 그 다음에는 하나 이상의 숫자가 나와야 합니다.
am: 그 다음에는 "am"이 나와야 합니다.
@: 그 다음에는 "@" 문자가 나와야 합니다.
[a-z]{3,7}: 그 다음에는 3에서 7개의 소문자 알파벳이 나와야 합니다.
\.: 그 다음에는 "." 문자가 나와야 합니다.
\w+: 그 다음에는 하나 이상의 알파벳이나 숫자 문자가 나와야 합니다.
순서가 있으니 잘 확인해 보자.
해당되는 패턴을 찾으면 플래그 값이 나온다.
정답이 하나만 해당되는 게 아니라 풀기 쉬울 것이다.
'DreamHack > CTF' 카테고리의 다른 글
(CTF 출제)DreamHack - Easy Login (1) | 2024.05.01 |
---|---|
(CTF 출제)DreamHack - Mango (0) | 2024.04.30 |
(CTF 출제)DreamHack - Carve Party (수정) (0) | 2024.04.05 |
(CTF 출제)DreamHack - PHPreg (수정) (0) | 2024.04.05 |
(CTF 출제)dreamhack - Baby Linux (수정) (0) | 2024.04.05 |