문제정보
알맞은 Nickname과 Password를 입력하면 Step 2로 넘어갈 수 있습니다.
Step 2에서 system() 함수를 이용하여 플래그를 획득하세요.
플래그는 ../dream/flag.txt에 위치합니다.
플래그의 형식은 DH{…} 입니다.
Keypoint
정규표현식
index.php <code>
step2.php
메인 페이지
Step 2로 넘어가기 위해서는 아래 구문이 중요하다.
위 구문은 정규표현식으로 위를 해석하면
1. $name = preg_replace("/nyang/i", "", $input_name);
정규식 패턴뒤에 i가 붙어있으므로 대소문자를 구분하지 않고, "nyang" 문자를 빈문자열로 대한다.
따라서 'dnyang0310' 이 나와야 하므로 "nyang" 문자열 사이에 해당 문자를 한번 더 집어넣어 "nyanyangng" 와 같은
문자열을 입력한다. 최종적으로 "dnyanyangng0310" 을 집어넣으면 된다.
2. $pw = preg_replace("/\d*\@\d{2,3}(31)+[^0-8]\!/", "d4y0r50ng", $input_pw);
우선 위 구문에 나와있는것 처럼 pw에는 알파벳이 있으면 안된다.
하지만 우리가 최종적으로 나와야 하는 결과 값은 "d4y0r50ng113" 이므로 정규표현식으로 통하여 치환시켜주면 된다.
1. \d : 0개 이상의 숫자를 매치
2. \@ : "@" 문자를 매치
3. \d{2,3} : 2개 또는 3개의 숫자를 매치
4. (31)+ : "31"문자열이 한번 이상 반복
5. [^0-8] : 0부터 8사이의 숫자를 제외한 문자 매치
6. \! : "!" 문자를 매치
위와 같은 조건을 만족하는 값을 넣을시 "d4t0r50ng" 값을 치환해줍니다.
따라서 위의 조건에 맞는 "1@43319!+1+13" 을 입력하여주면 "d4t0r50ng+1+13" 으로 치환하여 준다.
STEP2
시스템 명령어에 "/flag" 문자열을 필터링 해놓았다.
문제 정보에 나와있는것 처럼 "ls ../dream" 구문을 통하여 "flag.txt" 위치를 알았고,
"cat ../dream/flag.txt" 구문을 필터링에 걸리기 때문에 "cat ../dream/*.txt" 구문을 통하여 txt 확장자 파일을 읽었다.
'DreamHack > web' 카테고리의 다른 글
[wargame] simple_sqli_chatgpt (0) | 2023.07.15 |
---|---|
[wargame] 🌱 simple-web-request (0) | 2023.07.15 |
[wargame] ex-reg-ex (0) | 2023.07.15 |
[wargame] Flying Chars (0) | 2023.07.15 |
[wargame] web-ssrf 풀이 (0) | 2023.06.26 |