드림핵 CTF 출제 문제 풀기(4)

abcd·2023년 8월 22일

CTF 연습문제

목록 보기
1/4

ex-reg-ex

소스코드

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

파이썬 match 함수

  • 문자열의 앞 부분이 매치되는가를 체크, 추출 match()

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@aaa.a

Flag: DH{e64a267ab73ae3cea7ff1255b5f08f3e5761defbfa6b99f71cbda74b7a717db3}

profile
NOOOOOOOMU

1개의 댓글

comment-user-thumbnail
2023년 8월 22일

오 pwn 쪽으로 공부하시나 보네요.

답글 달기