1. File Upload Vulnerability

웹 서비스를 통해 이용자의 파일을 서버의 파일 시스템에 업로드하는 과정에서 발생하는 보안 취약점이며, 이용자가 업로드될 파일의 이름을 임의로 정할 수 있을 때 발생한다.

악용 가능 대상 파일 예시

운영체제 파일 경로 설명
Linux /etc/passwd 사용자 계정 정보
Linux /etc/shadow 암호화된 비밀번호
Windows C:\\Windows\\System32\\drivers\\etc\\hosts 호스트 파일
공통 .env 환경설정 파일 (DB 계정, API 키 포함 가능)
공통 config.php 설정 파일 및 데이터베이스 정보

대응 및 방어 방법

  1. 파일명 화이트리스트 제한

  2. 경로 정규화 및 검증

    $base = realpath("files/");
    $path = realpath("files/" . $_GET['file']);
    if (strpos($path, $base) !== 0) {
        die("허용되지 않은 접근입니다.");
    }
    
  3. ../, ..\\\\ 등의 문자열 필터링

  4. 파일 경로 하드코딩 또는 DB 매핑

  5. 웹 서버 설정을 통한 디렉토리 접근 제한


업로드 가능한 공격 파일 예시

파일명 설명
shell.php PHP 웹쉘 파일 (명령어 실행 기능 포함)
cmd.asp ASP 기반 명령 실행 스크립트
image.jpg.php 이중 확장자 우회를 위한 파일
shell.ph%00p 널바이트 우회 시도 (PHP 해석 방지 우회)

대응 및 방어 방법

  1. 확장자 화이트리스트 적용
  2. MIME 타입 검사 및 일치 여부 검증
  3. 업로드 디렉토리에서 실행 제한
  4. 파일명 무작위화 및 경로 은닉