CTF, War game

[์›นํ•ดํ‚น] Dreamhack beginner: php7cmp4re

mnzy๐ŸŒฑ 2024. 8. 12. 03:05

1. ๋ฌธ์ œ 

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

 

php7cmp4re

Description php 7.4๋กœ ์ž‘์„ฑ๋œ ํŽ˜์ด์ง€์ž…๋‹ˆ๋‹ค. ์•Œ๋งž์€ Input ๊ฐ’์„ ์ž…๋ ฅํ•˜๊ณ  ํ”Œ๋ž˜๊ทธ๋ฅผ ํš๋“ํ•˜์„ธ์š”. ํ”Œ๋ž˜๊ทธ ํ˜•์‹์€ DH{} ์ž…๋‹ˆ๋‹ค.

dreamhack.io

 

2. ํ•ด๊ฒฐ ๊ณผ์ •

๋ฌธ์ œ ํŽ˜์ด์ง€์— ์ ‘์†ํ•˜๋ฉด ๋‘๊ฐœ์˜ input๊ฐ’์„ ์ž…๋ ฅํ•˜๋Š” ์นธ์ด ๋œฌ๋‹ค. 

์ด ๊ฐ’์— ๋”ฐ๋ผ try again ๋“ฑ์ด ๊ฒฐ๊ณผํ™”๋ฉด์œผ๋กœ ๋ณด์—ฌ์ง„๋‹ค. 

(1) ์ฝ”๋“œ ๋ถ„์„ 

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

 

์ค‘์š”ํ•œ ๋ถ€๋ถ„์€ input ๊ฐ’์— ๋Œ€ํ•œ ์กฐ๊ฑด๋ฌธ ์† ๋น„๊ต ์—ฐ์‚ฐ์ด๋‹ค. 

๊ฐ€์žฅ ์ฒซ ๋ถ€๋ถ„์—์„œ๋Š” ๋‘ ๋ณ€์ˆ˜์— ๊ฐ’์ด ํ• ๋‹น๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. post๋กœ ๋ฐ›๋Š” ์ž…๋ ฅ๊ฐ’์€ ๋ชจ๋‘ ๋ฌธ์ž์—ด๋กœ ์ž…๋ ฅ๋œ๋‹ค. 

if ($_SERVER["REQUEST_METHOD"] == "POST") {
      $input_1 = $_POST["input1"] ? $_POST["input1"] : "";
      $input_2 = $_POST["input2"] ? $_POST["input2"] : "";
      sleep(1);

 

1) input_1์— ๋Œ€ํ•ด์„œ๋Š” ๊ธธ์ด๊ฐ€ 4๋ณด๋‹ค ์ž‘์€์ง€ ํ™•์ธํ•˜๊ณ ,  

2)  input_1์˜ ๊ฐ’์ด "8"๋ณด๋‹ค ์ž‘๊ณ , "7.A"๋ณด๋‹ค ์ž‘์œผ๋ฉฐ, "7.9"๋ณด๋‹ค ์ปค์•ผ ํ•œ๋‹ค.  

์ด๋•Œ ๋น„๊ต๊ฐ’์— ""๋กœ ๋ฌธ์ž์—ด๋กœ ๋˜์–ด์žˆ๋Š” ๊ฒƒ์„ ๋ณด์•„, ๋‹จ์ˆœํ•œ ์ˆซ์ž ๋น„๊ต ๋ฌธ์ œ๋Š” ์•„๋‹ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์˜€๋‹ค.

์•„์Šคํ‚ค ์ฝ”๋“œ๊ฐ€ ์ƒ๊ฐ๋‚˜์„œ ์ด๋ฅผ ํ†ตํ•ด ๋น„๊ต ์—ฐ์‚ฐ์„ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์•˜๋‹ค. 

     if($input_1 != "" && $input_2 != ""){
        if(strlen($input_1) < 4){
          if($input_1 < "8" && $input_1 < "7.A" && $input_1 > "7.9"){

 

"8"์€ 10์ง„์ˆ˜์˜ ์•„์Šคํ‚ค ๊ฐ’์œผ๋กœ ์น˜ํ™˜ํ•ด์„œ ์ƒ๊ฐํ•˜๋ฉด 56, "7.A"๋Š” 55 46 65, "7,9"๋Š” 55 46 57์ด๋‹ค.

์ฆ‰, 56 ๋ณด๋‹ค ์ž‘๊ณ , 55 46 57 -  55 46 65 ์‚ฌ์ด์˜ ๊ฐ’์ด์–ด์•ผ ํ•œ๋‹ค. 

[10์ง„์ˆ˜ <-> ๋ฌธ์ž์—ด] https://ko.calc-site.com/bases/ascii

 

์ด์— ํ•ด๋‹นํ•˜๋Š” 55 46 60 ์˜ ๊ฐ’์„ ๋ฌธ์ž๋กœ ์น˜ํ™˜ํ•ด๋ณด๋ฉด 7.<์ด ๋‚˜์˜จ๋‹ค. 

์ด๋Š” ๋ฌธ์ž์—ด์ด ๊ธธ์ด๊ฐ€ 4 ๋ฏธ๋งŒ์ด๋ฉฐ, ์กฐ๊ฑด๋ฌธ์— ํ•ด๋‹นํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 


+) 

ํ•˜์ง€๋งŒ ์ด 55 46 60์˜ ๊ฐ’์ด 56๋ณด๋‹ค ์ž‘์€์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์•„ ์‹ค์ œ๋กœ php ์ฝ”๋“œ๋กœ ๋น„๊ต๋ฌธ์„ ๋งŒ๋“ค์–ด ํ™•์ธํ•ด๋ณด์•˜๋‹ค. 

<?php

    function compareStrings($str1, $str2) {
        if ($str1 < $str2) {
            echo "\"$str1\" < \"$str2\"<br>";
        } elseif ($str1 > $str2) {
            echo "\"$str1\" > \"$str2\"<br>";
        } else {
            echo "\"$str1\" = \"$str2\"<br>";
        }
    }


    // ๋น„๊ตํ•  ๋ฌธ์ž์—ด๋“ค
    $input = "7.<";
    $input1 = "7.9";
    $input2 = "7.A";
    $input3 = "8";

    // ๋ฌธ์ž์—ด ๋น„๊ต ๊ฒฐ๊ณผ ์ถœ๋ ฅ
    compareStrings($input, $input1); // "7.9" ๋น„๊ต
    compareStrings($input, $input2); // "7.A" ๋น„๊ต
    compareStrings($input, $input3); // "8" ๋น„๊ต


?>

 

[๊ฒฐ๊ณผ]

"7.<" > "7.9"

"7.<" < "7.A"

"7.<" < "8"

 

PHP์—์„œ ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•  ๋•Œ์—๋Š” ๋ฌธ์ž์—ด์˜ ์ „์ฒด๋ฅผ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ˆœ์ฐจ์ ์œผ๋กœ ๋น„๊ตํ•œ๋‹ค.

์ด๋–„, ๋น„๊ต๋Š” ๋ฌธ์ž์—ด์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ ๋ฌธ์ž์˜ ASCII ๊ฐ’์— ๋”ฐ๋ผ ์ด๋ฃจ์–ด์ง„๋‹ค. ๋”ฐ๋ผ์„œ, ๋‘ ๋ฌธ์ž์—ด์˜ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž๊ฐ€ ๋™์ผํ•˜๋‹ค๋ฉด, ๊ทธ ๋‹ค์Œ ๋ฌธ์ž๋ฅผ ๋น„๊ตํ•˜๊ณ , ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด ์ „์ฒด ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•œ๋‹ค.

  1. "7.<"์™€ "8"์˜ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž๋Š” ๊ฐ๊ฐ '7'๊ณผ '8'์ด๋‹ค
  2. '7'์˜ ASCII ๊ฐ’์€ 55์ด๊ณ , '8'์˜ ASCII ๊ฐ’์€ 56์ด๋‹ค. 

์—ฌ๊ธฐ์„œ ๋‘ ๋ฒˆ์งธ ๋ฌธ์ž๋Š” ๋น„๊ตํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž์—์„œ ์ด๋ฏธ ์ฐจ์ด๊ฐ€ ๋‚˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. '7'(55)๋ณด๋‹ค '8'(56)์ด ํฌ๊ธฐ ๋•Œ๋ฌธ์—, "7.<"๋Š” "8"๋ณด๋‹ค ์ž‘์€ ๊ฒƒ์œผ๋กœ ํŒ๋‹จ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

๋”ฐ๋ผ์„œ, ๋ฌธ์ž์—ด ๋น„๊ต๋Š” ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž์—์„œ ์ด๋ฏธ ๊ฒฐ์ •๋˜์—ˆ๊ณ , ๋” ์ด์ƒ ๋‹ค๋ฅธ ๋ฌธ์ž๋“ค์„ ๋น„๊ตํ•˜์ง€ ์•Š๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Š” PHP๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ๋„ ๋Œ€๋ถ€๋ถ„ ๋น„์Šทํ•˜๊ฒŒ ๋™์ž‘ํ•œ๋‹ค. 


๋‹ค์Œ์œผ๋กœ input_2์— ๋Œ€ํ•œ ๋น„๊ต์—ฐ์‚ฐ์ด๋‹ค. 

1) input_2์— ๋Œ€ํ•ด์„œ๋Š” ๊ธธ์ด๊ฐ€ 3๋ณด๋‹ค ์ž‘์•„์•ผ ํ•˜๋ฉฐ, 1๋ณด๋‹ค ์ปค์•ผ ํ•œ๋‹ค (์ฆ‰ 2์—ฌ์•ผ ํ•œ๋‹ค.)

2) ๊ฐ’์€ 74๋ณด๋‹ค ์ž‘๊ณ  "74"๋ณด๋‹ค ์ปค์•ผ ํ•œ๋‹ค. 

    if(strlen($input_2) < 3 && strlen($input_2) > 1){
              if($input_2 < 74 && $input_2 > "74"){

 

๋‹ค์Œ input_2๋Š” 2์ž๋ฆฌ ์ˆ˜๋กœ ๊ฐ’์ด 74๋ณด๋‹ค ์ž‘๊ณ , ์•„์Šคํ‚ค๊ฐ’ "74" ์ฆ‰, 55 52๋ณด๋‹ค ์ปค์•ผ ํ•œ๋‹ค. 

PHP์—์„œ๋Š” ์ •์ˆ˜์™€ ๋ฌธ์ž์—ด ๋น„๊ต์‹œ, ๋ฌธ์ž์—ด์ด ์ •์ˆ˜(์•„์Šคํ‚ค๊ฐ’)๋กœ ์ „ํ™˜ํ•ด์„œ ๋น„๊ตํ•œ๋‹ค. 

์ฆ‰ 55 52 - 74 ์‚ฌ์ด์˜ ์ˆ˜ ์ค‘ 2์ž๋ฆฌ์ธ ๋ฌธ์ž์—ด์„ ์ฐพ์œผ๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค. 

๋”ฐ๋ผ์„œ 55 74 (7J) ์˜ ๊ฐ’์„ ์ƒ๊ฐํ•ด๋ƒˆ๋‹ค. 

 

7J๊ฐ€ 74๋ณด๋‹ค ์ž‘์€ ์ด์œ ๋Š” ์•„๋ž˜ ์ฝ”๋“œ์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

7J๋Š” ๋ฌธ์ž์—ด๋กœ ์ •์ˆ˜ํ˜•์œผ๋กœ ๋ฐ”๋€Œ๋ฉด 7๋กœ ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค. ์ฆ‰ 74๋ณด๋‹ค ์ž‘์€ ๊ฐ’์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค. 

<?php

function convertAndCompare($str, $int) {
    // ๋ฌธ์ž์—ด์„ ์ˆซ์ž๋กœ ๋ณ€ํ™˜
    $converted = (int)$str;

    // ๊ฒฐ๊ณผ ์ถœ๋ ฅ
    echo "Original string: \"$str\"\n";
    echo "Converted to integer: $converted\n";

    // ๋น„๊ต ๊ฒฐ๊ณผ ์ถœ๋ ฅ
    if ($converted == $int) {
        echo "The converted value ($converted) is equal to $int.\n";
    } elseif ($converted < $int) {
        echo "The converted value ($converted) is less than $int.\n";
    } else {
        echo "The converted value ($converted) is greater than $int.\n";
    }
    echo "----------------------------\n";
}
// ํ…Œ์ŠคํŠธ ๋ฌธ์ž์—ด๊ณผ ์ •์ˆ˜
$str1 = "7J";
$str2 = "12.34abc";
$str3 = "abc123";
$str4 = "00056xyz";
$int = 74;

convertAndCompare($str1, $int);
convertAndCompare($str2, $int);
convertAndCompare($str3, $int);
convertAndCompare($str4, $int);

?>

(2) ์ต์Šคํ”Œ๋กœ์ž‡ 

์ด์— ๋”ฐ๋ผ  input_1์—๋Š” 7.< , input_2์—๋Š” 7J๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค. 

 

ํ”Œ๋ž˜๊ทธ ํš๋“ ์„ฑ๊ณต

 

 

ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์œผ๋ฉด ์ œ๋ฐœ ์•Œ๋ ค์ฃผ์„ธ์š”