Dreamhack - ex-reg-ex

이지각·2023년 11월 5일
0

Dreamhack

목록 보기
3/9

Dreamhack ex-reg-ex


이번 문제는 알맞는 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)

문제에서 원하는 Input을 구하기 위해 첨부파일의 app.py 파일을 열어보았다. 코드를 대충 해석해보면 m을 입력하면 flag를 반환한다는 것 같다.

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

여기서 m은 정규 표현식으로 되어있어서 그것을 해석해보았다.

  • dr: 문자 'dr'
  • \w{5,7}: 5~7개의 문자
  • e: 문자 'e'
  • \d+: 하나 이상의 숫자
  • am@: 문자 'am@'
  • [a-z]{3-7}: 3~7개의 알파벳 소문자
  • .: 문자 '.'
  • \w+: 하나 이상의 문자


예시로 정규표현식대로 입력값을 넣었더니 Flag 값이 나온 모습이다.

Input: draaaaae1am@gmail.com
Flag: DH{e64a267ab73ae3cea7ff1255b5f08f3e5761defbfa6b99f71cbda74b7a717db3}

풀이 팁: 정규표현식

profile
정보보안학과생

0개의 댓글