[DreamHack] [web] [LEVEL 1] Type c-j 풀이

2024. 11. 21. 13:13Information Security 정보보안/DreamHack

728x90

배울내용 

dreamhack,

web hacking,

개발자도구,

dreamhack 풀이,

dreamhack Type c-j 문제,

dreamhack web 풀이 ,

burfsuite,  

Type c-j,

sha-1

 

 

문제

 

 

 

문제는 id 와 Pw 를 입력해서 플레그를 획득하는 방법인가? 일단 제목을 봤을때 힌트라는건 Type C-j 밖에 없다 그럼 이걸 검색 해보면 어떨까?  

 

검색했더니 문제의 write up 말고는 딱히 없는걸로 봐서는 문제파일을 다운받아봐야지 힌트를 알것같다

 

 

<?php
    function getRandStr($length = 10) {
        $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $charactersLength = strlen($characters);
        $randomString = '';
    
        for ($i = 0; $i < $length; $i++) {
            $randomString .= $characters[mt_rand(0, $charactersLength - 1)];
        }
        return $randomString;

    }
    require_once('flag.php');
    error_reporting(0);
    $id = getRandStr();
    $pw = sha1("1");
    // POST request
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
      $input_id = $_POST["input1"] ? $_POST["input1"] : "";
      $input_pw = $_POST["input2"] ? $_POST["input2"] : "";
      sleep(1);

      if((int)$input_id == $id && strlen($input_id) === 10){
        echo '<h4>ID pass.</h4><br>';
        if((int)$input_pw == $pw && strlen($input_pw) === 8){
            echo "<pre>FLAG\n";
            echo $flag;
            echo "</pre>";
          }
        } else{
          echo '<h4>Try again.</h4><br>';
        }
      }else {
      echo '<h3>Fail...</h3>';
     }
    ?>

 

이중 키 포인트만 뽑아내자면

    $id = getRandStr();
    $pw = sha1("1");

 

id 에는 랜덤한 문자열을 얻고있으면 이걸 조건문에 비교하자면 문자열을 받아서 (int) 로형변환시키는데 이때 문자열은 0 으로 받아들이기에  id 는 0 으로 10개를 채워주면 된다 

 if((int)$input_id == $id && strlen($input_id) === 10)

 

 

 

 

그렇게  0 을 10개를 넣어서 id 에 넣어주면 아래처럼 ID 가 통과한걸 볼수있고 ID는 알아낸것이다.

 

 

    $pw = sha1("1");

 

pw 에서는 는 sha1을 1로 해싱한 값이 저장되어있다.

그러면 sha1("1") 을 해싱한값을 얼마일까? GPT 를써서 알아도 되고 사이트에서 검색해서 변환하는 사이트를 사용해도 된다

 

$pw는 sha1("1")을 통해 생성된 고정값 356a192b7913b04c54574d18c28d46e6395428ab

 

위와같이 356...8ab 로 되어있고 여기서 조건문이 아래와 같이 8 글자 이여야하기 때문에 pw 에서 앞 8 글자만 옮겨주면 된다

 

 if((int)$input_pw == $pw && strlen($input_pw) === 8){
            echo "<pre>FLAG\n";
            echo $flag;
            echo "</pre>";
          }

 

356a192b  7913b04c54574d18c28d46e6395428ab

 

앞에 8글자인 356a192b 가 비밀번호인걸 알수있다.

 

 

그러면 아까 알아낸 ID 와 PW를 넣어주면 성공플레그를 뛰울수있을것이다 

 

728x90