상세 컨텐츠

본문 제목

[Dreamhack] phpreg (WEB)

WEB HACKING/Dreamhack

by koharin 2025. 3. 28. 19:30

본문

728x90
반응형

step 1에서 id, pw를 입력해야 한다.

주어진 파일 중 step2.php를 보면 어떤 id,pw를 입력해야 step2로 넘어갈 수 있는지 알 수 있다.

if ($name === "dnyang0310" && $pw === "d4y0r50ng+1+13") {
                echo '<h4>Step 2 : Almost done...</h4><div class="door_box"><div class="door_black"></div><div class="door"><div class="door_cir"></div></div></div>';

id는 dnyang0310, pw는 d4y0r50ng+1+13를 만족하면 Step 2로 간다.

그러나, preg_replace에서 필터링이 존재한다.

              $name = preg_replace("/nyang/i", "", $input_name);
              $pw = preg_replace("/\d*\@\d{2,3}(31)+[^0-8\"]\!/", "d4y0r50ng", $input_pw);

name에 nyang이 있으면 없앤다. 그러나 정확히 nyang인 경우에만 없애므로 이 부분만 우회하면 된다.

즉, 아래와 같이 nyang을 넣고 양 옆에 nyang을 나눠놓으면 된다.

dnnyangyang0310

패스워드의 regex는 더 복잡하다.

\d* 0~9 숫자 0회 이상 반복
\@ @이 옴
\d{2,3}(31) 0~92,3회 반복 후 31이 옴
[^0-8] 0-8 이외 문자가 옴
! !이 옴

위 조건을 모두 만족하는 경우 d4y0r50ng으로 대체된다.

즉, 위 조건을 만족시키는 문자를 입력한 후, +1+13을 주면 d4y0r50ng+1+13을 만들 수 있다.

9@99319!+1+13

필자의 경우 위와 같이 패스워드를 구성했다.

                // cmd filtering
                else if (preg_match("/flag/i", $cmd)) {
                  echo "<pre>Error!</pre>";
                }
                else{
                  echo "<pre>--Output--\n";
                  system($cmd);
                  echo "</pre>";
                }

Step 2에서는 cmd를 입력받는데, flag가 매칭되면 에러가 발생하고, 그렇지 않으면 system으로 명령어를 실행한다.

즉, command injection이 가능하다.

preg_replace가 없기 때문에 id를 우회한 것과 같은 방법은 사용하지 못한다.

이때 flag를 주지 못해도, *lag, f*lag와 같이 패턴에 매칭되는 게 있으면 플래그 파일을 출력할 수 있다.

위와 같은 원리이다.

따라서 위 사진과 같이 명령어를 주면 플래그를 획득할 수 있다.

728x90
반응형

'WEB HACKING > Dreamhack' 카테고리의 다른 글

Dreamhack CTF Season 7 Round #7 (🚩Div1) Pybrid write up  (0) 2025.04.07
[Dreamhack] baby-ai  (0) 2025.04.01
[Dreamhack] csrf-1  (0) 2022.12.10
[Dreamhack] file-download-1  (1) 2022.11.24
[Dreamhack] proxy-1  (0) 2022.01.04

관련글 더보기