문제정보
문제에서 요구하는 형식의 문자열을 입력하여 플래그를 획득하세요. 플래그는 flag.txt 파일과 FLAG 변수에 있습니다.
플래그 형식은 DH{…} 입니다.
Keypoint
정규표현식
app.py
#!/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_val" 즉, 입력값을 "m = re.match(r'dr\w{5,7}e\d+am@[a-z]{3,7}\.\w+', input_val)" 코드를 통해 입력값을 검증하고
해당 값이 위의 정규표현식 조건과 일치할경우 FLAG를 보여준다.
1. dr: "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+: 하나 이상의 문자가 입력되어야 한다.
위의 조건들을 만족하는 값을 입력하면 FLAG가 보여진다.
"dr+words+e+2+am@+ran+.+com" 위의 조건을 순서대로 입력한 값이다.
"drwordse2am@ran.com" 이 값을 입력하게 되면 re.match 함수를 통해 참이 나오게 되고
FLAG가 나온다.
FLAG
'DreamHack > web' 카테고리의 다른 글
[wargame] simple_sqli_chatgpt (0) | 2023.07.15 |
---|---|
[wargame] 🌱 simple-web-request (0) | 2023.07.15 |
[wargame] Flying Chars (0) | 2023.07.15 |
[wargame] phpreg (0) | 2023.07.14 |
[wargame] web-ssrf 풀이 (0) | 2023.06.26 |