반응형
☆ Beginner - ex-reg-ex ☆
[1] 문제
♣ ex-reg-ex는 Dreamhack CTF Season 3 Round #2 (Div2)에 출제된 문제이다.
♣ 위 문제는 정규표현식으로 작성된 문자열을 해석하여 플래그를 얻어내는 문제이다.
[2] 풀이
♣ 서버를 생성하고 생성된 URL을 클릭하여 웹 서버에 접속한다.
♣ 접속한 웹 페이지의 모습을 확인할 수 있다.
> 주어진 웹 페이지에 Regex가 표시되어있고, 이를 통해 '정규 표현식'을 사용해야 한다는 것을 유추할 수 있다.
> 또한 올바른 입력값을 전달하면 Flag값을 얻어낼 수 있다는 것을 알 수 있다.
♣ 주어진 문제 파일을 다운받아 코드를 확인한다.
# 다운받은 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)
# 주요 코드 해석
- FLAG = open("./flag.txt", "r").read() "문제의 코드 속 FLAG 변수에 플래그 값이 저장되어 있다.
- input_val = "" : input_val 변수는 사용자가 제출한 데이터를 저장하기 위한 변수이다. 기본값으로 빈 문자열을 설정한다.
- if request.method == POST: : 이 조건문은 사용자가 데이터를 제출했을 때(POST 요청)만 내부 로직을 실행한다.
- request.form.get("input_val", "") : input_val 변수에 사용자가 제출한 input_val 폼 데이터를 가져온다.
- re.match(r'', input_val) : 입력 값이 특정 패턴과 일치하는지 확인한다.
- if m :
return ... : 사용자의 입력이 정규표현식에 매칭되면 index.html 템플릿을 렌더링한다. 렌더링 시 사용자 입력값(pre_txt)와 플래그 변수를 전달한다. - return render_template("index.html", pre_txt=input_val, flag='?') : 입력이 매칭되지 않으면 플래그 대신 ?를 반환한다.
# 정규 표현식 해석
re.match(r'dr\w{5,7}e\d+am@[a-z]{3,7}\.\w+', input_val)
- dr : 문자열 dr을 매치한다.
- \w{5, 7} : 숫자, 알파벳(대소문자), _(underscore) 5개 이상 7개 이하를 매치 한다.([A-Za-z0-9_])
- e : 문자열 e를 매치한다.
- \d+ : 숫자가 1개 이상 매치한다.
- am@ : am@를 매치한다.
- [a-z]{3,7} : 소문자 알파벳 3개 이상 7개 이하의 문자를 매치한다.
- \.\w+ : . 이후 숫자, 알파벳(대소문자), _(underscore)가 1개 이상이면 매치한다.
♣ 해석된 정규 표현식에 맞추어 문자열을 작성한다.
1. drxxxxxe0am@xxx.000
2. dr12345e1am@abc.net
3. dr_____e0am@xxx.___
♣ 작성된 입력값을 input에 넣어 submit한다.
♣ 플래그 값을 얻어냈다. 문제의 답을 제출한다.
DH{e64a267ab73ae3cea7ff1255b5f08f3e5761defbfa6b99f71cbda74b7a717db3}
♣ 제출 결과
반응형
'정보보안 > Dreamhack' 카테고리의 다른 글
[Dreamhack Wargame] Beginner - dreamhack-tools-cyberchef (0) | 2024.12.06 |
---|---|
[Dreamhack Wargame] Beginner - phpreg (0) | 2024.12.04 |
[Dreamhack Wargame] Beginner - blue whale (0) | 2024.11.29 |
[Dreamhack Wargame] Beginner - Exercise : Docker (0) | 2024.11.28 |
[Dreamhack Wargame] Beginnger - Exersice : SSH (0) | 2024.11.26 |