워게임 스터디

[250219] [dreamhack] ex-reg-ex

jisu0924 2025. 2. 19. 00:38

무언가를 입력하면 (예를 들어 flag)

Input에 입력값이 들어가고Flag는 여전히 ?이다. 코드는 다음과 같다.

#!/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이면 flag가 플래그가 된다는 건데 m이 

m = re.match(r'dr\w{5,7}e\d+am@[a-z]{3,7}\.\w+', input_val)

이거고 저 안에 있는 것이 매치되고 그 값을 submit하면 flag를 준다는 문제인듯. 자바를 잘 몰라서 이 글을 참고하여 풀었다.

https://zzang9ha.tistory.com/322

 

[Java] - 자바 정규 표현식(Regular Expression) + 2021 카카오 코테(신규 아이디 추천)

안녕하세요~ 이전에 운영하던 블로그 및 GitHub, 공부 내용을 정리하는 Study-GitHub 가 있습니다! • 네이버 블로그 • GitHub • Study-GitHub • 🐔 ✔ 정규 표현식(Regular Expression) 안녕하세요, 이번에 정

zzang9ha.tistory.com

우선

  1. dr은 그냥 dr이고
  2. \w은 한 개의 알파벳 또는 한 개의 숫자이고, {n, m}은 n개에서부터 m개까지이니 => 5개부터 7개까지의 알파벳 또는 숫자
  3. e
  4. \d는 한 개의 숫자인데 뒤에 +가 있으니 한 개의 숫자 이상이라는 뜻
  5. am@
  6. []은 한 개의 문자이니 a-z까지 하나의 문자인데, 뒤에 [3, 7]이 있으니 3개부터 7개까지의 a부터 z까지의 알파벳
  7. \.은 .
  8. \w+은 한 개의 알파벳 또는 한 개의 숫자 이상

저 표현식에 맞는 아무 숫자나 넣어 조합하고

draaaaae1am@aaa.a

입력값에 넣어 주었더니 flag가 나왔다~!

'워게임 스터디' 카테고리의 다른 글

[250218] SuNiNaTaS - 18번  (0) 2025.02.18
[250211] dreamhack - baby-linux  (0) 2025.02.11
[250211] dreamhack - file-download-1  (0) 2025.02.11
[250204][webhacking] old-14  (0) 2025.02.04
[250128][webhacking] old11  (0) 2025.01.29