ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Dreamhack - phpreg
    wargame/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
Designed by Tistory.