-
Dreamhack - phpregwargame/Dreamhack 2023. 10. 3. 16:32
[beginner - phpreg - web]
이 문제는 php로 작성된 페이지이고, 알맞은 Nickname과 Password를 입력하면 Step2로 넘어갈 수 있다.
Step2에서 system() 함수를 이용해 플래그를 획득하면 된다.
플래그는 ../dream/flag.txt에 위치한다고 한다.
접속 정보로 접속하면 나오는 첫 화면이다.
요구되는 Nickname와 Password를 제대로 입력해야 하는데 정보가 없으므로 문제 파일을 다운로드 해준다.
파일을 다운로드하면 index.php와 step2.php 총 두 개의 php 파일을 얻을 수 있다.
먼저 index.php를 살펴보면 닉네임과 패스워드를 입력받아 step2.php로 넘기는 걸 볼 수 있다.
그리고 step2.php를 열어보면 위와 같이 이 문제에서 중요한 코드를 확인할 수 있다.
우선 위 코드는 정규표현식(Regular Expression)을 통해 필터링을 하고 그걸로 name과 pw를 확인한다.
name을 살펴보면 nyang 문자열을 공백으로 치환시키는데, name의 값은 dnyang0310이 나와야하므로 dnynyangang0310이어야 한다.
그다음 pw를 살펴보면 pw 필터링으로 pw에 알파벳이 들어갈 수 없도록 해놓았다.
또한 pw은 \d*\@\d{2,3}(31)+[^0-8]\! 패턴과 일치하면 d4y0r50ng 로 치환시킨다.
패턴을 해석하면,
\d는 숫자
*는 모든 문자열(필터링때문에 알파벳은 올 수 없음)
\@는 @
\d{2,3}은 숫자 2개 이상 3개 이하
(31)+는 31이 1개 이상
[^0-8]은 0-8이 아닌 숫자
\!는 !
와 같다.
pw는 d4y0r50ng+1+13 가 나와야하므로 22@34319!+1+13 으로 입력했다.
제출했더니 step2로 넘어왔고 명령어를 입력할 수 있는 창이 나타났다.
step2.php의 cmd 코드 부분을 보면 아무런 명령도 입력하지 않을 경우 로그인 페이지로 돌아간다.
그리고 flag 문자열을 포함시키면 error가 뜬다.
이를 우회하기 위해선 문자열 결합을 이용해야 한다.
var1과 var2 두 개의 변수에 flag를 쪼개서 각각 문자열 "fla"와 "g"를 넣어준다.
이를 합쳐서 "flag" 문자열을 만들어야 하고, 맨처음 문제 설명에서 알려준 flag.txt 파일 내용을 확인해야하므로,
var1 = "fla"; var2 = "g"; cat "../dream/$var1$var2.txt"; 와 같이 명령어를 적어 제출하면 된다.
플래그를 획득했다!
'wargame > Dreamhack' 카테고리의 다른 글
Dreamhack - blue-whale (0) 2023.11.03 Dreamhack - Exercise : SSH (0) 2023.10.10 Dreamhack - Exercise : Welcome-Beginners (0) 2023.10.10 Dreamhack - ex-reg-ex (0) 2023.10.03 Dreamhack - baby-linux, 64se64 (0) 2023.09.27