ex-reg-ex
문제 링크
https://dreamhack.io/wargame/challenges/834
문제 설명
문제에서 요구하는 형식의 문자열을 입력하여 플래그를 획득하는 문제입니다. 플래그는 flag.txt 파일과 FLAG 변수에 있습니다.
플래그 형식은 DH{...} 입니다.
풀이과정
- 제시된
app.py를 확인해 보았습니다.import re
를 보니 정규표현식을 활용한 문제임을 유추해볼 수 있었습니다.
- 파이썬의 re 모듈은 정규표현식(Regular Expression) 처리를 위한 모듈입니다.
- 정규표현식이란 문자열에서 특정 패턴(규칙)을 찾거나 바꾸거나 검증하기 위한 표현 방법입니다. 패턴이 맞는 문자열 하나만 맞추면 조건을 충족합니다.
- 코드에서
m = re.match(r'dr\w{5,7}e\d+am@[a-z]{3,7}\.\w+', input_val)
을 확인할 수 있었습니다.
re.match(pattern, string) 은 pattern에 작성된 정규표현식과 string이 매치되는지 확인하는 함수입니다. 즉, 여기서 input_val 이 특정 정규표현식에 맞는지 검사하고 있습니다.
r'dr\w{5,7}e\d+am@[a-z]{3,7}\.\w+' 을 해석해보면,
- dr : dr로 시작
- \w{5,7} : 영문자/숫자/언더바 _ 가 5~7글자
- e : e 문자 1개
- \d+ : 숫자가 1개 이상
- am@ : 문자 am@ 가 반드시 옴
- [a-z]{3,7} : 소문자 3~7글자
- . : . 문자
- \w+ : 영문자/숫자/언더바 _ 가 1개 이상
란 뜻입니다.
- 정규표현식을 만족하는 랜덤한 문자열 ,
drabcdefe123am@abc.com 를 예시 입력값으로 생성할 수 있습니다.
- dr : 그대로
- abcdef : 6글자 → \w{5,7} 만족
- e : e 문자 1개
- 123 : 숫자
- am@
- abc : 3글자
- .
- com :
\w+ 는 영문자/숫자/언더바 _ 가 1개 이상만 입력하면 되지만, 형식상 이메일임을 유추할 수 있고, 사이트 내에서도 이메일 형식으로 입력을 받기에 com을 입력해주었습니다.
- 성공적으로 플래그를 획득할 수 있었습니다.
배운점
- 정규 표현식 이라는걸 알게 되었습니다. 주어진 패턴을 통해 맞는 문자열로 문제를 해결할 수 있음을 배웠습니다.
- 정규 표현식에서 사용하는 문법에 대해서 배워볼 수 있었습니다.
Summary (English)
- The challenge required input matching a regex to get the flag.
- The regex pattern was:
dr\w{5,7}e\d+am@[a-z]{3,7}.\w+.
- It means:
- starts with
dr
- 5–7 word chars
e, then digits
am@, then 3–7 lowercase letters
., then word chars
- Used input:
drabcdefe123am@abc.com
- This matched the pattern and returned the flag.
- I practiced reading regex patterns and crafting valid inputs for CTF challenges.