[Dreamhack-웹해킹] ex-reg-ex

Sungwuk·2024년 9월 14일
0

dreamhack

목록 보기
1/17

❓정규표현식 문제

문제 설명

문제에서 요구하는 형식의 문자열을 입력하여 플래그를 획득하세요. 플래그는 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

profile
보안전문가 꿈나무

0개의 댓글