1. 문제 설명

문제는 간단하다. php로 작성된 페이지에서 알맞게 입력하고 flag를 찾으면 되는 문제이다.
2. 문제 풀이

페이지에 접속하면 다음과 같이 페이지가 출력된다.

step2.php를 보면, dnyang0310이 name으로, d4y0r50ng+1+13이 pw로 가야되는 것을 확인할 수 있다. 다만 위에 보면 알겠지만 preg_replace에서 name에는 nyang을 공백으로, /\d*\@\d{2,3}(31)+[^0-8\"]\!/"를 d4y0r50ng으로 치환해준다는 것을 확인 가능하다. 나아가 pw에 알파벳이 들어가면 오류 메시지를 출력하도록 코딩되어 있다.
name의 dnyang0310에서 nyang이 치환 당해도 남아있을 수 있도록 하려면 dnnyangyang0310처럼 nyang이란 문자열 양끝에 떨어뜨려서 한번더 넣어주면, 사이에 낀 nyang이란 단어가 공백으로 치환되며 양끝에 떨어져 있던 nyang이 합쳐지면서 name에 성립하게 된다.
pw의 /\d*\@\d{2,3}(31)+[^0-8\"]\!/은 php 정규표현식을 알아야 한다.
\d : (0-9) 사이의 숫자
* : 0번 이상 반복
\@ : @
\d{2,3} : (0-9) 사이의 숫자를 2번 이상, 3번 이하 반복
(31) : 숫자 31
+ : 바로 앞문자 1회 이상 반복
[^0-8\"] : 0에서 8사이 숫자와 "를 제외한 문자(즉, 이 문제에서는 숫자 9나 다른 특수기호를 사용하면 된다.)
\! : !
즉, 여러 가지 조합이 나올 수 있는데, 여기서는 6@11319!로 정해서 하면 pw에는 6@11319!+1+13를 입력해야 한다.


실제로 입력해보면 정상적으로 Step 2로 넘어간 것을 확인할 수 있다. Step 2는 command를 입력하면 작동하는 구조이다. ../dream/flag.txt를 찾으면 되는 문제이니, 파일을 읽을 수 있는 cat명령어를 사용하면 될것 같다.

다만 문제가 있는데, command창에 flag라는 문자열을 입력하면 오류 메시지를 띄운다는 것이다. 이럴때에는 flag단어를 직접 사용할 필요 없이, fla*.txt나 fl*.txt 정도로 입력해줘도 실행이 된다.


cat ../dream/fl*.txt를 입력했더니 정상적으로 실행이 가능한 것을 확인할 수 있다.
3. 정리
정규식 해석과, php의 preg_replace나 preg_match가 어떤 기능을 하는지만 알면 손쉽게 풀 수 있는 문제이다.
'컴퓨터 > Dreamhack' 카테고리의 다른 글
| Dreamhack ex-reg-ex 문제 풀이 (0) | 2025.12.31 |
|---|---|
| Dreamhack Flying Chars 문제 풀이 (0) | 2025.12.30 |
| Dreamhack php7cmp4re 문제 풀이 (0) | 2025.12.30 |
| Dreamhack simple-web-request 문제 풀이 (0) | 2025.12.30 |
| Dreamhack file-download-1 문제 풀이 (0) | 2025.12.30 |
댓글