본문 바로가기

SWLUG/CTF

[CTF/Dreamhack] php7cm4re & Flying Chars

php7cm4re

 

php7cmp4re

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

dreamhack.io

 

 

 

문제 설명

 

php 7.4

PHP란? Personal Home Page

웹 개발을 위한 프로그래밍 언어

 

 

 

 

 

문제 분석

 

링크를 타고 들어가면 아래와 같은 화면을 볼 수 있다.

 

 

 

input값 두 개를 알아내야 하는 것 같다. 다운로드 받은 파일에는 3개의 내부 파일이 있다. index, flag, check 

 

 

check.php

<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>

 

 

 

 

 

오답을 제출할 경우 아래와 같은 화면을 확인할 수 있다.

 

 

위의 코드에서 아래의 부분이 flag를 획득할 수 있는 중요한 부분인듯 하다.

 

 

 

PHP는 문자열을 아스키코드 기반으로 비교하기 때문에 위와 같은 로직을 볼 수 있는 것이다.

 

$input_1 < "8" && $input_1 < "7.A" && $input_1 > "7.9" 의 조건을 만족하기 위해서는
 

[:  ;  <  =  >  ?  @] 중 하나를 7. 뒤에 입력하면 된다.

 

$input_2 < 74 && $input_2 > "74" 의 조건을 만족하기 위해서는

문자열을 숫자로 변환할 때, 가능한 가장 큰 십진수로 대체하기 때문에 74 ~ 5552 사이의 아스키코드를 입력하면 된다.

 

77은 아스키코드로 M이라서 그 사이의 값을 입력해준다. 

 

 

그러면 아래와 같은 결과를 확인해볼 수 있다.

 

 

 

 

 

성공!

 

 

 

 

 

 

<참고>

 

 

 

 

 

 

 

 

Flying Chars

 

Flying Chars

Description 날아다니는 글자들을 멈춰서 전체 문자열을 알아내세요! 플래그 형식은 DH{전체 문자열} 입니다. ❗첨부파일을 제공하지 않는 문제입니다. ❗플래그에 포함된 알파벳 중 x, s, o는 모두

dreamhack.io

 

 

 

문제 설명

 

 

날아다니는 글자들을 멈추는 방법을 알아야 한다.

 

 

 

 

 

화면을 확인해보니 일단.. 해리포터 열쇠키 마냥 날아다녀서 눈으로는 확인할 수 없다...

 

 

 

 

문제 분석

 

 

문자를 어디서 확인할 수 있는가?

어떻게 멈출 수 있는가?

 

우선적으로 이 두 문제를 해결해야 한다.

 

 

F12를 눌러 개발자 도구를 확인해본 결과.. 아래와 같이 여러 이미지들이 떠다니는 것임을 알 수 있다.

 

 

 

아래와 같은 순서대로 그림을 조합하면 {Too_H4rd_to_sEe_th3_Ch4rs_x.x} 의 결과가 나온다!

 

 

 

 

 

 

문제 해결!

'SWLUG > CTF' 카테고리의 다른 글

[CTF/Dreamhack] pathtraversal  (0) 2024.05.11
[CTF/Dreamhack] baby-union  (0) 2024.05.06
[CTF/Dreamhack] phpreg  (0) 2024.05.06
[CTF/Dreamhack] devtools-sources & Carve Party  (1) 2024.04.27
[CTF/Dreamhack] cookie & session  (2) 2024.04.27