본문 바로가기

Dreamhack/웹해킹

[🌱Beginner] ex-reg-ex

문제 설명 : 문제에서 요구하는 형식의 문자열을 입력하여 플래그를 획득하세요. 플래그는 flag.txt 파일과 FLAG 변수에 있습니다.

 

웹 서비스에 접속하면 아래와 같은 화면이 표시됩니다.

해당 입력란에 값을 넣으면, 입력한 내용이 그대로 반영되는 것을 확인할 수 있습니다.

보다 명확한 이해를 위해 문제 파일을 직접 받아 코드 내용을 확인해 보았습니다.

 

app.py

#!/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)

 

📌 정규식 패턴 분석

dr\w{5,7}e\d+am@[a-z]{3,7}\.\w+
  • dr → dr
  • \w{5,7} → 영문/숫자/밑줄 조합으로 된 5~7글자 문자열
  • e → e
  • \d+ → 한개 이상의 숫자
  • am@ → am@
  • [a-z]{3.7} → 소문자 알파벳만 3~7글자
  • \. → 점(.)
  • \w+ → 영문/숫자/밑줄 한 글자 이상

정규표현식의 조건을 분석했으니, 이제 해당 패턴에 맞는 값을 직접 입력해 보겠습니다.

drabcdefe123am@hello.com
  • dr + abcdef(6글자) + e + 123 + am + @ + hello(5글자) + . + com
  •  

결과적으로 정규표현식 조건을 만족하는 입력을 주었을 때, 정상적으로 플래그가 출력되는 것을 확인할 수 있었습니다.

'Dreamhack > 웹해킹' 카테고리의 다른 글

[🌱Beginner] phpreg  (0) 2025.08.27
[🌱Beginner] Flying Chars  (0) 2025.08.25
[🌱Beginner] simple-web-request  (0) 2025.08.22
[🌱Beginner] session  (0) 2025.08.22
[🌱Beginner] command-injection-1  (0) 2025.08.19