학회_공부해요/워게임

[Dreamhack] Write up - php7cmp4re

yenas0 2024. 5. 28. 00:17
반응형

https://dreamhack.io/wargame/challenges/1113

 

php7cmp4re

Description php 7.4로 작성된 페이지입니다. 알맞은 Input 값을 입력하고 플래그를 획득하세요. 플래그 형식은 DH{} 입니다.

dreamhack.io


문제 서버로 들어가니까

 

웹페이지 하나 나온다.

개발자모드 봐도 특별한게 없어서 다운받은 문제파일 세개(php파일)을 열어보았다.

 

<?php
    $flag = 'flag{**Sample**}'
?>

 

flag파일인데 별 의미 없어보임

 

<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>php7cmp4re</title>
</head>
<body>
    <!-- Fixed navbar -->
    <nav class="navbar navbar-default navbar-fixed-stop">
      <div class="container">
        <div class="navbar-header">
          <a class="navbar-brand" href="/">php7cmp4re</a>
        </div>
        <div id="navbar">
          <ul class="nav navbar-nav">
            <li><a href="/">index page</a></li>
          </ul>
        </div><!--/.nav-collapse -->
      </div>
    </nav>
    <div class="container">
      <div class="box">
      <h4>Enter the correct Input.</h4>
        <p>
          <form method="post" action="/check.php">
              <input type="text" placeholder="input1" name="input1">
              <input type="text" placeholder="input2" name="input2">
              <input type="submit" value="제출">
          </form>
        </p>
      </div>

    <?php
        require_once('flag.php');
        error_reporting(0);
    ?> 
    </div> 
</body>
</html>

 

얘는 index인데 개발자모드에서 까본 프론트엔드 코드인 것 같아서 얘도 의미 없어보임

 

<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>php7cmp4re</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="/">php7cmp4re</a>
        </div>
        <div id="navbar">
          <ul class="nav navbar-nav">
            <li><a href="/">Index page</a></li>
          </ul>
        </div><!--/.nav-collapse -->
      </div>
    </nav>
    <div class="container">
    <?php
    require_once('flag.php');
    error_reporting(0);
    // POST request
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
      $input_1 = $_POST["input1"] ? $_POST["input1"] : "";
      $input_2 = $_POST["input2"] ? $_POST["input2"] : "";
      sleep(1);

      if($input_1 != "" && $input_2 != ""){
        if(strlen($input_1) < 4){
          if($input_1 < "8" && $input_1 < "7.A" && $input_1 > "7.9"){
            if(strlen($input_2) < 3 && strlen($input_2) > 1){
              if($input_2 < 74 && $input_2 > "74"){
                echo "</br></br></br><pre>FLAG\n";
                echo $flag;
                echo "</pre>";
              } else echo "<br><br><br><h4>Good try.</h4>";
            } else echo "<br><br><br><h4>Good try.</h4><br>";
          } else echo "<br><br><br><h4>Try again.</h4><br>";
        } else echo "<br><br><br><h4>Try again.</h4><br>";
      } else{
        echo '<br><br><br><h4>Fill the input box.</h4>';
      }
    } else echo "<br><br><br><h3>WHat??!</h3>";
    ?> 
    </div> 
</body>
</html>

check파일에서 input값을 찾아야 될 듯 싶다.

 

아무래도

 if($input_1 != "" && $input_2 != ""){
        if(strlen($input_1) < 4){
          if($input_1 < "8" && $input_1 < "7.A" && $input_1 > "7.9"){
            if(strlen($input_2) < 3 && strlen($input_2) > 1){
              if($input_2 < 74 && $input_2 > "74"){
                echo "</br></br></br><pre>FLAG\n";
                echo $flag;
                echo "</pre>";
              } else echo "<br><br><br><h4>Good try.</h4>";
            } else echo "<br><br><br><h4>Good try.</h4><br>";
          } else echo "<br><br><br><h4>Try again.</h4><br>";
        } else echo "<br><br><br><h4>Try again.</h4><br>";
      } else{
        echo '<br><br><br><h4>Fill the input box.</h4>';
      }

이쪽이 flag 관련 부분일 듯

 

해석해보면 input1이 4글자 미만이고 8보다 작고 7.A보다 크고 7.9보다는 크다

input2는 길이가 3보다 작고 1보다 커야된다고 한다. 길이가 아마 2여야할듯

그리고 숫자 74보다는 작고 문자열 74보다는 커야 flag가 나온다고 한다.

 

일단 7.A랑 7.9가 대체 뭔지? 모르겠어서 찾아보니 이 두 숫자가 아스키 코드라 이걸 십진수로 바꿔서 하는 것 같다. ""안에 있으니.. 

https://ko.calc-site.com/bases/ascii

 

ASCII 코드 변환 - 진수 변환 - 계산 사이트

입력된 ASCII 코드를 쉽게 변환할 수 있습니다. 2진수, 10진수, 16진수에서 문자로 변환하거나 문자를 2진수, 10진수, 16진수로 변환할 수 있습니다. 텍스트에서 ASCII 변환 변환 전은 “텍스트”을 선

ko.calc-site.com

위에 사이트에서 7.9랑 7.A랑 변환해 보았다.

 

554657에서 554665 사이의 숫자를 아스키 코드로 바꿔야 될 것 같다.

554660을 바꿔보자

 

7.<

이걸 input1로 하도록 한다.

 

input2도 동일한 방법으로 74를 십진수로 변환한다.

 

따라서 input2는 5552 보다 커야됨

input2는 두글자여야하니까 

input2는 7<로 결정..

 

 

 

답이 나왔다.

 

반응형