티스토리 뷰
문제 설명
문제에서 요구하는 형식의 문자열을 입력하여 플래그를 획득하세요. 플래그는 `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를 얻을 수 있다.
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Spring Security
- test
- askers
- math
- webgoat
- JPA
- sqli
- oauth2
- Dreamhack
- Bandit
- CSRF
- Database
- SEO
- 회고
- Spring
- WEB
- Framework
- Misc
- opengraph
- WarGame
- XSS
- React
- PS
- linux
- DP
- java
- Transaction
- sql injection
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
글 보관함