php로 작성된 페이지입니다.
알맞은 Nickname과 Password를 입력하면 Step 2로 넘어갈 수 있습니다.
Step 2에서 system() 함수를 이용하여 플래그를 획득하세요.
플래그는 ../dream/flag.txt에 위치합니다.
플래그의 형식은 DH{...} 입니다.

문제 서버에는 닉네임과 비밀번호를 입력하는 폼이 있다.

Step2 페이지로 이동하면 Not GET request라는 메세지가 뜬다.

주어진 step2.php 코드를 살펴보면 닉네임과 비밀번호 조건을 알 수 있다.

위 정규식을 풀이해보자
$name = preg_replace("/nyang/i", "", $input_name);
nyang → 문자열 "nyang"을 찾는다.i → 대소문자 구분 없이 검색한다.→ $input_name에서 대소문자 구분 없이 nyang을 찾아서 제거한다.
$pw = preg_replace("/\d*\@\d{2,3}(31)+[^0-8\"]\!/", "d4y0r50ng", $input_pw);
\d* → 0개 이상의 숫자\@ → @ 문자를 필수로 포함한다.\d{2, 3} → 2~3자리 숫자(31) → "31"이 1번 이상 반복한다.[^0-8\"] → 0~8과 "를 제외한 문자 1개[\!] → ! 문자가 필수 포함→ 위 패턴과 일치하는 문자열을 "d4y0r50ng"으로 변환한다.

Live Regex 페이지에서 해당 정규식에 맞는 문자열을 검증할 수 있다.
닉네임 검증하기
✔️ dnyanyangng0310

비밀번호 검증하기
✔️ 1@12319!+1+13

Live Regex 사이트에서 검증한 문자열을 입력한 후 제출 버튼을 누르면

Step2로 넘어간다.

다시 step2.php 코드를 보면 커맨드에 필터링이 걸린 것을 알 수 있다.
이를 우회하기 위해 flag 대신 *를 사용한다.

따라서 cat ../dream/*.txt 를 입력하면

플래그를 알 수 있다.
DH{ad866c64dabaf30136e22d3de2980d24c4da617b9d706f81d10a1bc97d0ab6f6}