김민주

ex-reg-ex 본문

SWUFORCE/[공통] 드림핵 스터디

ex-reg-ex

7alswn 2023. 11. 28. 23:00

문제는 다음과 같다.

 

#!/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_var 값을 넣을 박스와 제출 버튼이 있다.

 

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)

위 소스코드에서 중요한 부분은 이 부분인 것 같다.

 

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

이를 해석해보면


1. dr: dr문자열을 의미한다.
2. \w{5,7}: 5개에서 7개의 문자를 의미한다.
3. e: 'e' 문자를 의미한다.
4. \d+: 하나 이상의 숫자를 의미한다.
5. am@: "am@" 문자열을 의미한다.
6. [a-z]{3,7}: 3개에서 7개 사이의 소문자 알파벳 문자를 의미한다.
7. \.: 마침표 문자를 의미한다.
8. \w+: 하나 이상의 문자를 의미한다.

 

따라서 해당 조건대로 문자열을 만들면 draaaaae1am@mail.com 이고, 이를 사이트에 입력해보면

flag 값이 뜬다.

문제 풀이 성공

'SWUFORCE > [공통] 드림핵 스터디' 카테고리의 다른 글

Flying Chars  (0) 2023.11.28
[web] web-misconf-1  (0) 2023.11.21
[web] session  (0) 2023.11.21
[pwnable] ssp_001  (0) 2023.11.13
[pwnable] ssp_000  (1) 2023.11.13