๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

SWUFORCE/์›Œ๊ฒŒ์ž„ ํ’€์ด

[Dreamhack] phpreg (web)

๋ฌธ์ œ ์„ค๋ช…


์‚ฌ์ดํŠธ์— ๋“ค์–ด๊ฐ€ ๋ณด๋ฉด

์ด๋ ‡๊ฒŒ Step 1๊ณผ Step 2๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ๋งŒ flag๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ํ˜•์‹์ธ ๊ฒƒ ๊ฐ™๋‹ค. 

 

 

๋ฌธ์ œ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•ด ๋ดค๋‹ค. 

<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>PHPreg</title>
</head>
<body>
  <!-- Fixed navbar -->
  <nav class="navbar navbar-default navbar-fixed-top">
    <div class="container">
      <div class="navbar-header">
        <a class="navbar-brand" href="/">PHPreg</a>
      </div>
      <div id="navbar">
        <ul class="nav navbar-nav">
          <li><a href="/">Step 1</a></li>
          <li><a href="/step2.php">Step 2</a></li>
        </ul>
      </div><!--/.nav-collapse -->
    </div>
  </nav><br/><br/><br/>
  <div class="container">
    <div class="box">
      <!-- PHP code -->
      <?php
          // POST request
          if ($_SERVER["REQUEST_METHOD"] == "POST") {
            $input_name = $_POST["input1"] ? $_POST["input1"] : "";
            $input_pw = $_POST["input2"] ? $_POST["input2"] : "";

            // pw filtering
            if (preg_match("/[a-zA-Z]/", $input_pw)) {
              echo "alphabet in the pw :(";
            }
            else{
              $name = preg_replace("/nyang/i", "", $input_name);
              $pw = preg_replace("/\d*\@\d{2,3}(31)+[^0-8\"]\!/", "d4y0r50ng", $input_pw);
              
              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>';

                $cmd = $_POST["cmd"] ? $_POST["cmd"] : "";

                if ($cmd === "") {
                  echo '
                        <p><form method="post" action="/step2.php">
                            <input type="hidden" name="input1" value="'.$input_name.'">
                            <input type="hidden" name="input2" value="'.$input_pw.'">
                            <input type="text" placeholder="Command" name="cmd">
                            <input type="submit" value="์ œ์ถœ"><br/><br/>
                        </form></p>
                  ';
                }
                // cmd filtering
                else if (preg_match("/flag/i", $cmd)) {
                  echo "<pre>Error!</pre>";
                }
                else{
                  echo "<pre>--Output--\n";
                  system($cmd);
                  echo "</pre>";
                }
              }
              else{
                echo "Wrong nickname or pw";
              }
            }
          }
          // GET request
          else{
            echo "Not GET request";
          }
      ?>
    </div>
  </div>

  <style type="text/css">
    h4 {
      color: rgb(84, 84, 84);
    }
    .box{
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
    }
    pre {
      width: 80%;
    }
    .door_box {
      position: relative;
      width: 240px;
      height: 180px;
      margin: 20px 0px;
    }
    .door_black {
      position: absolute;
      width: 140px;
      height: 180px;
      background-color: black;
      border-radius: 10px;
      right:0px;
    }
    .door {
      z-index: 2;
      position: absolute;
      width: 140px;
      height: 180px;
      background-color: #b9abf7;
      border-radius: 10px;
      right: 100px;
    }
    .door_cir{
      z-index: 3;
      position: absolute;
      border-radius: 50%;
      width: 20px;
      height: 20px;
      border: 2px solid rgba(255, 222, 113, 0.873);
      background-color: #ffea98;
      top: calc( 180px / 2 - 10px );
      right: 10px;
    }
  </style>
</body>
</html>

step2.php

 

<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>PHPreg</title>
</head>
<body>
    <!-- Fixed navbar -->
    <nav class="navbar navbar-default navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <a class="navbar-brand" href="/">PHPreg</a>
        </div>
        <div id="navbar">
          <ul class="nav navbar-nav">
            <li><a href="/">Step 1</a></li>
            <li><a href="/step2.php">Step 2</a></li>
          </ul>
        </div><!--/.nav-collapse -->
      </div>
    </nav><br/><br/><br/>
    <div class="container">
      <div class="box">
        <h4>Step 1 : Open the door & Go to Step 2 !!</h4>
        <div class="door"><div class="door_cir"></div></div>
        <p>
          <form method="post" action="/step2.php">
              <input type="text" placeholder="Nickname" name="input1">
              <input type="text" placeholder="Password" name="input2">
              <input type="submit" value="์ œ์ถœ">
          </form>
        </p>
      </div>
    </div> 

    <style type="text/css">
      h4 {
        color: rgb(84, 84, 84);
      }
      .box{
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
      }
      .door { 
        position: relative;
        margin: 20px 0px;
        width: 140px;
        height: 180px;
        background-color: #b9abf7;
        border-radius: 10px;
      }
      .door_cir{
        position: absolute;
        border-radius: 50%;
        width: 20px;
        height: 20px;
        border: 2px solid rgba(255, 222, 113, 0.873);
        background-color: #ffea98;
        top: calc( 180px / 2 - 10px );
        right: 10px;
      }
    </style>
</body>
</html>

index.php

 

step1.php๋Š” ์™œ ์—†๋Š” ๊ฑด์ง€ ์˜๋ฌธ์ด๊ธด ํ•˜์ง€๋งŒ.. ์šฐ์„  ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๊ทธ๋žฌ๋“ฏ์ด index.php ํŒŒ์ผ์—๋Š” ์œ ์šฉํ•œ ์ •๋ณด๊ฐ€ ์—†๋Š” ๊ฒƒ ๊ฐ™๋‹ค. 

step2.php๋ฅผ ์‚ดํŽด ๋ณด๋‹ˆ, ๊ฐ๊ฐ Nickname๊ณผ Password์— ๋“ค์–ด๊ฐ€์•ผ ํ•˜๋Š” ๊ฐ’์„ ์ง์ ‘์ ์œผ๋กœ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ๋‹ค.

else{
              $name = preg_replace("/nyang/i", "", $input_name);
              $pw = preg_replace("/\d*\@\d{2,3}(31)+[^0-8\"]\!/", "d4y0r50ng", $input_pw);
              
              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>';

                $cmd = $_POST["cmd"] ? $_POST["cmd"] : "";

name์ด "dnyang0310", pw๊ฐ€ "d4y0r50ng+1+13"์ด๋ฉด step2๋กœ ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜, ์ž…๋ ฅ๊ฐ’์— ํ•„ํ„ฐ๋ง์ด ๊ฑธ๋ ค์žˆ๋Š” ๊ฒƒ ์—ญ์‹œ ์ฝ”๋“œ์—์„œ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์œ„ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ name๊ฐ’์—์„œ nyang์„ ๋นˆ ๋ฌธ์ž์—ด๋กœ ํ•„ํ„ฐ๋งํ•œ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— name๊ฐ’์— dnyangnyang0310์„ ์ž…๋ ฅํ•ด nyang์ด ์ •์ƒ์ ์œผ๋กœ ๋“ค์–ด๊ฐ€๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค. 

            // pw filtering
            if (preg_match("/[a-zA-Z]/", $input_pw)) {
              echo "alphabet in the pw :(";

์•ŒํŒŒ๋ฒณ ๋Œ€์†Œ๋ฌธ์ž ๋ชจ๋‘ ์ž…๋ ฅ ์‹œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ๋œฌ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. 

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ ์ด๋ฆ„๋Œ€๋กœ php ์ •๊ทœ์‹์„ ์ด์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•ด์•ผ ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

pw์˜ ์ •๊ทœ ํ‘œํ˜„์‹์„ ํ•˜๋‚˜์”ฉ ํ•ด์ฒดํ•ด ๋ณด๋ฉด, 

 

\d* : 0~9 ์‚ฌ์ด ์ˆซ์ž๊ฐ€ 0๊ฐœ ์ด์ƒ ๋‚˜ํƒ€๋‚˜์•ผ ํ•จ

\@ : @

\d{2, 3}(31) : 0~9 ์‚ฌ์ด์˜ ์ˆซ์ž 2~3ํšŒ ํ›„์— 31์„ ์”€

+ : ์ง€๊ธˆ๊นŒ์ง€์˜ ํ‘œํ˜„์„ 1ํšŒ ์ด์ƒ ๋ฐ˜๋ณต

[^0-8] : 0~8 ์ด์™ธ์˜ ๋ฌธ์ž๊ฐ€ ์žˆ์œผ๋ฉด ํŒจํ„ด์ด ๋งค์นญ

! : !

 

๋ชจ๋“  ์š”์†Œ๋ฅผ ์กฐํ•ฉํ•ด ๋ณด๋ฉด 1@12319!๋ผ๋Š” ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” d4y0r50ng+1+13์ด ๋˜์–ด์•ผ ํ•ด์„œ 1@12319!+1+13์„ ๋น„๋ฐ€๋ฒˆํ˜ธ์— ์ž…๋ ฅํ•ด ๋ณด์ž. 

 

Step2๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ์— ์„ฑ๊ณตํ–ˆ๋‹ค. 

 

์ด ์—ญ์‹œ step2.php ์ฝ”๋“œ์—์„œ ์ž…๋ ฅ๊ฐ’์— ๋Œ€ํ•œ ํ•„ํ„ฐ๋ง์ด ์ ์šฉ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

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

์ด๋ฅผ ์œ ์˜ํ•ด์„œ ๋ช…๋ น์–ด๋ฅผ ์ž‘์„ฑํ•ด ๋ณด๋ฉด,

cat ../dream/f?ag.txt

๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค. ํ•ด๋‹น command๋ฅผ ์ž…๋ ฅํ•ด ๋ดค๋”๋‹ˆ,

ํ”Œ๋ž˜๊ทธ ํš๋“์— ์„ฑ๊ณตํ–ˆ๋‹ค!

'SWUFORCE > ์›Œ๊ฒŒ์ž„ ํ’€์ด' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Dreamhack] web-misconf-1 (web)  (0) 2024.05.14
[Dreamhack] devtools-sources (web)  (0) 2024.05.14
[Dreamhack] php7cmp4re (web)  (0) 2024.05.07
[Dreamhack] Carve Party (web)  (0) 2024.05.01
[Dreamhack] simple-web-request (web)  (0) 2024.05.01