문제 설명
문제에서 요구하는 형식의 문자열을 입력하여 플래그를 획득하세요. 플래그는 flag.txt 파일과 FLAG 변수에 있습니다.
플래그 형식은 DH{...} 입니다.
사이트에 들어가면 어떠한 값을 입력했을 때, Flag가 나오는 것을 확인할 수 있다. f12로 확인해 봤지만 딱히 볼만한 것은 없었다.
그래서 코드를 살펴보았다.
잘은 모르겠지만 입력받은 값이 input_val이고, 그 값과 m을 비교하는 것 같았다. re.match()에 관해서는 잘 몰라서 풀면서 검색을 해봤고, 자세한 설명은 아래에 정리해뒀다.
input_val의 문자열이 re.match()의 조건과 일치해야 하는 것 같았는데, 그 조건만 맞춰서 입력하면 플래그 값이 나오는 것으로 보였다.
그래서 조건에만 맞춰서 'dreeeeeeee11am@aaaaaaa.e+'와 같은 문자열을 사이트에 입력했다.
그랬더니 플래그 값이 나왔다.
re.match()에 관해서
re = 정규표현식
*정규표현식 : 특정 패턴에 상응하는 문자열을 검색, 치환, 제거하는 기능을 가짐.
기본패턴은 다양한데, 해당 문제에서 쓰인 것만 정리해봤다. 자세한 것은 검색하는 것을 추천한다.
re.match(r'dr\w{5,7}e\d+am@[a-z]{3,7}\.\w+', input_val)
- r : 문자열 앞에 r이 붙으면 해당 문자열이 구성된 그대로 문자열로 반환한다. 아래는 예시이다. \n을 문자열 그대로 반환하는 것을 볼 수 있다.
b = r'abcdef\n'
print(b)
abcdef\n
- \w : 문자[a-zA-Z0-9]와 일치
- \d : 숫자[0-9]와 일치
- + : 직전의 패턴을 1회 이상 반복(문제에서는 +앞에 \d가 쓰였으니 \d)
- [a-f] : 문자 사이에 속하는 문자 중 하나를 의미(a부터 f까지, 숫자[0-9]도 마찬가지임)
- {3,7} : 해당 숫자만큼 반복(3회부터 7회까지)
- \ : 기능 제거(문제에서 \.은 온점을 '.'으로 문자열 취급함)
match : 문자열의 시작부터 비교하여 패턴이 있는지 확인한다. (문제에서의 r'dr\w{5,7}e\d+am@[a-z]{3,7}\.\w+' 패턴과 입력한 input_val를 비교한 것)
개인 공부 목적으로 작성된 글이며, 틀린 정보나 해석이 있을 수 있음.
https://dreamhack.io/wargame/challenges/834
'슈포스 > 워게임' 카테고리의 다른 글
[web]SuNiNaTas_01 (0) | 2024.11.26 |
---|---|
[misc]Dreamhack_dreamhack-tools-cyberchef (0) | 2024.11.26 |
[misc]Dreamhack_baby-linux (1) | 2024.11.19 |
[web]Dreamhack_command-injection-1 (0) | 2024.11.12 |
[misc]Dreamhack_Exercise: Docker (2) | 2024.11.11 |