php7cmp4re

2024. 11. 5. 13:30·DreamHack/WEB

 

 

 

 

 

 

 

 

 

 

 

 

<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">http://host3.dreamhack.games:10711/
          <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>

 

if 문을 전부 우회하면 될 거 같다.

 

 

 

 

 

if($input_1 != "" && $input_2 != "")

 

input_1과 input_2 가 둘 다 빈 문자열이 아닌 경우에 다음 조건으로 넘어간다.

 

 

 

 

if(strlen($input_1) < 4)

 

input_1의 문자열 길이가 4보다 작은지 확인한다.

 

 

 

if($input_1 < "8" && $input_1 < "7.A" && $input_1 > "7.9")

 

input_1의 문자열 "8" 보다 작은지 확인을 한다.

그리고

input_1 < "7.A" -> 문자열 "7.A" 보다 작은지 확인한다.

input_1 > "7.9" -> 문자열 "7.9" 보다 큰지 확인한다.

결론적으로 "7.9" , "7.A" 사이의 문자열 이어야 한다.

 

PHP에서는 문자열 비교를 할 때 각 문자열의 ASCII 값에 기반하여  문자 단위로 비교를 수행한다.

 

ASCII 값으로 나열을 한다면

"7.9" -> 55 46 57

이 되는데 여기서  55 -> '7' , 46 -> '.' , 57 -> '9' 이런 식으로 ASCII 값이 나온다.

 

"7.A" -> 55 46 65

 

그렇다면 55 46 58으로 값을 올려보면 if문을 우회할 수 있다.

if(strlen($input_2) < 3 && strlen($input_2) > 1)

 

strlen으로 input_2 길이가 3보다 작은지 확인하고 1보다 큰지 확인한다.

 

 

 

if($input_2 < 74 && $input_2 > "74")

 

마지막으로 input_2 가 숫자 74 보다 작은지 확인하고 문자열 "74"보다 큰지 확인한다.

 

PHP에서는 문자열과 숫자를 비교할 때 문자열을 숫자로 받아들여 비교를 한다.

 

앞부분부터 읽어 들이기에

 

만약 "a05"라고 대입을 하면 비교할 때 0으로 받아들이게 된다.

 

"994a"라고 하는 경우에는 994로 변환이 된다.

 

따라서 알맞은 값을 넣으면 74 보다 작은 수를 충족시킬 수 있다.

 

문자열 "74"을 비교하기 위해서는 16진수로 변환을 해야 비교시키기 편하다.

 

"74" -> (h) 37 34

 

앞에 문자가 오고 "74" 보다 hex 값이 높으면 if 문을 다 우회할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

'DreamHack > WEB' 카테고리의 다른 글

sql injection bypass WAF  (0) 2024.10.29
blind sql injection advanced  (0) 2024.10.23
command-injection-chatgpt  (0) 2024.10.23
error based sql injection  (0) 2024.10.18
simple_sqli_chatgpt  (0) 2024.10.17
'DreamHack/WEB' 카테고리의 다른 글
  • sql injection bypass WAF
  • blind sql injection advanced
  • command-injection-chatgpt
  • error based sql injection
G_OM
G_OM
최대한 설명 열심히 하려고 합니다. 궁금한 거 있으면 언제든지 물어보셔도 좋습니다.
  • G_OM
    끄적끄적
    G_OM
  • 전체
    오늘
    어제
    • 분류 전체보기 (160)
      • 모의해킹 (20)
      • CTF (22)
      • Wargame (69)
        • Linux_bandit (33)
        • Webhacking.kr (36)
      • DreamHack (52)
        • WEB (14)
        • Reverising (9)
        • System (0)
      • Mobile_security (14)
        • Drozer_Android (4)
        • Frida_Android (1)
        • IOS (2)
        • tool (1)
      • 정보보안기사 (2)
      • IT? (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • hELLO· Designed By정상우.v4.10.0
G_OM
php7cmp4re
상단으로

티스토리툴바