티스토리 뷰

Wargame/Dreamhack

ex-reg-ex

장일영 2024. 5. 24. 12:08

문제 설명

834

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

 

코드를 보면 Flag 파일은 서버에 저장되어 있고, 하단 if문의 정규식과 매치되면 Flag 파일이 반환된다. 따라서 이 문제는 `'dr\w{5,7}e\d+am@[a-z]{3,7}\.\w+'` 이 정규식을 이해하면 풀린다.

`dr\w{5,7}e`를 먼저 보면 dr과 e 사이에 알파벳, 숫자 또는 언더스코어가 올 수 있다. 다만 5글자 이상, 7글자 이하여야 한다.

그 다음으로 `/d+am@` 부분을 보면 1개 이상의 숫자와 am@가 와야 한다.

`[a-z]{3,7}\.\w+` 부분을 보면 3글자 이상 7글자 이하의 알파벳 소문자와 마침표가 와야 한다. 그리고 적어도 1개 이상의 알파벳, 숫자 또는 언더스코어가 있어야 한다.

이 조건에 맞는 이메일 형식을 맞춰 제출하면 Flag를 얻을 수 있다.

'Wargame > Dreamhack' 카테고리의 다른 글

xss-2  (0) 2024.05.24
xss-1  (0) 2024.05.24
64se64  (0) 2024.05.24
phpreg  (1) 2024.05.24
baby-linux  (0) 2024.05.24
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함