본문 바로가기

Dreamhack/웹해킹

File Upload Vulnerability

파일 업로드 취약점은 웹 애플리케이션이나 서버가 사용자가 업로드하는 파일을 적절하게 검증하지 않아서 악의적인 사용자가 악성 파일을 업로드하고 실행할 수 있는 보안 취약점을 말합니다. 이 취약점은 웹 애플리케이션에서 사용자가 파일을 서버에 업로드할 수 있는 기능을 제공할 때 발생할 수 있습니다.


1. Path Traversal 공격의 개념

Path Traversal 공격은 공격자가 웹 애플리케이션에서 파일 경로를 조작하여, 파일을 업로드하거나 다운로드하는 과정에서 상위 디렉터리로 이동하는 방식입니다. 공격자는 ../와 같은 특수 문자를 사용하여 현재 디렉터리에서 상위 디렉터리로 이동하고, 이를 통해 웹 애플리케이션이 정상적으로 접근할 수 없는 시스템 파일에 접근할 수 있습니다.

예시 1: 파일 읽기

웹 애플리케이션에서 사용자가 파일을 다운로드할 때, /uploads/ 디렉터리에 저장된 파일을 다운로드한다고 가정합니다. 공격자는 경로를 조작하여 시스템의 중요한 파일을 다운로드할 수 있습니다.

  1. 경로 조작: ../../../../etc/passwd와 같이 경로를 조작하여, 업로드 된 파일 대신 /etc/passwd 파일을 읽을 수 있습니다.
  2. 명령: http://example.com/download?file=../../../../etc/passwd
  3. 공격자는 passwd 파일을 통해 시스템 사용자 정보를 탈취할 수 있습니다.

예시 2: 파일 덮어쓰기

웹 애플리케이션에서 파일 업로드 기능을 제공하고, 공격자는 Path Traversal을 통해 app.py와 같은 중요한 서버 파일을 덮어쓸 수 있습니다.

  1. 경로 조작: ../../../../app.py와 같이 경로를 조작하여, 공격자는 app.py 파일을 덮어쓸 수 있습니다.
  2. 명령: http://example.com/upload?file=../../../../app.py
  3. 덮어쓴 app.py 파일이 실행되면, 공격자가 삽입한 악성 코드가 실행될 수 있습니다. 예를 들어, 웹 쉘을 삽입하여 서버를 제어할 수 있습니다.

방어 방법

경로 정규화

  • 사용자가 제공하는 파일 경로정규화하여, ../와 같은 경로 탐색 문자를 제거해야 합니다.
  • 예를 들어, realpath() 함수를 사용하여 경로를 절대 경로로 변환하고, 해당 경로가 안전한지 확인할 수 있습니다.

2. 악성 파일 업로드의 개념(서버의 입장)

악성 파일 업로드 공격은 사용자가 웹 애플리케이션의 파일 업로드 기능을 통해 악성 파일을 서버에 업로드하고 이를 실행하여 서버를 제어하거나 시스템을 침해하려는 공격입니다. 이 공격은 파일 업로드 기능에 대한 보안 검증이 부족할 때 발생합니다. 공격자는 PHP 웹 쉘, 악성 매크로가 포함된 문서 파일, 스크립트 파일 등을 업로드하여 서버에서 명령어를 실행하거나 민감한 정보를 탈취할 수 있습니다.

공격 예시: PHP 웹 쉘 업로드 후 명령어 실행

  1. 공격자는 웹 애플리케이션의 파일 업로드 기능을 사용하여 shell.php와 같은 악성 PHP 파일을 업로드합니다.
  2. 업로드 된 파일에는 다음과 같은 PHP 웹 쉘이 포함되어 있을 수 있습니다
<?php
if (isset($_REQUEST['cmd'])) {
    echo "<pre>" . shell_exec($_REQUEST['cmd']) . "</pre>";
}
?>
  1. 공격자는 웹 브라우저에서 http://example.com/uploads/shell.php?cmd=ls와 같은 URL을 호출하여 서버의 디렉터리 목록을 확인할 수 있습니다.
  2. 추가적으로 이 웹 쉘을 통해 공격자는 cat /etc/passwd와 같은 명령어를 실행하여 시스템의 사용자 정보를 탈취할 수 있습니다.

악성 파일 업로드 공격 방어 방법

파일 저장 위치 제한

  • 업로드 된 파일은 웹 서버의 실행 가능한 디렉터리가 아닌 별도의 디렉터리에 저장해야 하며, 이를 통해 업로드 된 파일이 실행되지 않도록 해야 합니다.
  • 예를 들어, 웹 루트 디렉터리(예: /var/www/html/) 외의 디렉터리에 파일을 저장하고, 업로드 된 파일이 실행되지 않도록 처리합니다.

파일 권한 설정

  • 업로드 된 파일에 대해 실행 권한을 부여하지 않도록 설정합니다. 파일에 대해 읽기/쓰기 권한만 부여하고, 실행 권한을 차단합니다.
  • 이를 통해 악성 파일이 서버에서 실행되지 않도록 방지할 수 있습니다.

 

'Dreamhack > 웹해킹' 카테고리의 다른 글

(드림핵) Carve Party  (0) 2025.04.01
(드림핵) SSRF  (0) 2025.04.01
File Download Vulnerability  (0) 2025.03.24
(드림핵) File-download-1  (0) 2025.03.24
(드림핵) Image-Storage  (0) 2025.03.24