반응형

File Upload Vulnerability를 실무 관점에서 정리할게.
이번에도 원리 → 공격 예시 → 공격 목표 → 방어 방법/WAF 대응까지 포함했어.


🔥 1. File Upload Vulnerability 개념

정의:
File Upload Vulnerability는 웹 애플리케이션에서 사용자가 파일을 업로드할 수 있는 기능을 악용하여, 서버에 악성 파일(웹쉘 등)을 업로드하고 실행하는 공격을 말해.

쉽게 말하면:

  • 사용자가 업로드할 수 있다고 허용된 파일을 공격자가 서버에서 임의 실행 가능하도록 조작
  • 서버 장악, 정보 탈취, 악성코드 배포 가능

🔹 2. 공격 원리

 
[웹 업로드 기능][서버에 파일 저장][웹에서 실행 가능]
  • 웹 애플리케이션이 파일 확장자·내용 검증 미비
  • 업로드 후 서버 접근 경로를 통해 실행 가능
  • PHP, JSP, ASP 등의 웹쉘 업로드가 대표적

🔹 3. 실무 공격 예시

1) 웹쉘 업로드

 
<?php system($_GET['cmd']); ?>
  • 파일명: shell.php
  • 공격자 브라우저에서:

2) 확장자 우회

  • .php.jpg, .php;.jpg, .phtml
  • MIME 타입 검증 회피

3) 이미지 파일 변조

  • 정상 이미지에 PHP 코드를 삽입 (GIF89a<?php ... ?>)
  • 서버에서 이미지 처리 시 코드 실행 가능

🔹 4. 공격 목표

  • 서버 원격 제어(RCE)
  • 민감 정보 탈취
  • 악성코드/랜섬웨어 배포
  • 내부 네트워크 추가 공격

🔹 5. WAF / 보안관제 대응

  1. 확장자/파일 타입 검사
  • 허용된 확장자만 업로드
  • MIME 타입 검증
  1. 파일 내용 검사
  • Magic Number 검사
  • 스크립트 코드 삽입 탐지
  1. 업로드 경로 제한
  • 웹에서 직접 실행 불가한 디렉토리 사용
  • 서버 실행 권한 없는 디렉토리 설정
  1. 이상 행위 탐지
  • /uploads/*.php 접근 시 경고
  • 반복 공격 IP 차단
  1. 실시간 격리 / 백신 스캔
  • 업로드 파일 자동 검사
  • 악성코드/웹쉘 탐지

🔹 6. 개발 단계 방어

  • 확장자 Whitelist: .jpg, .png, .pdf 등
  • 파일 이름 변경: 원본 이름 대신 랜덤 문자열로 저장
  • 업로드 경로 제한: 실행 불가, 읽기 전용 디렉토리
  • 파일 내용 검증: Magic Number + MIME 타입
  • 웹쉘 탐지 룰 적용: PHP, JSP, ASP 코드 패턴 차단
 
// PHP 예시: 실행 불가 디렉토리에 저장 $targetDir = '/var/www/uploads/'; $targetFile = $targetDir . bin2hex(random_bytes(8)) . '.' . $ext; move_uploaded_file($_FILES['file']['tmp_name'], $targetFile);

🎯 한 문장 요약

File Upload Vulnerability = 업로드 기능을 악용해 서버에 악성 파일을 넣고 실행시키는 공격이며, 확장자/내용 검증, 실행 불가 디렉토리, WAF 룰로 방어 가능하다.

반응형

+ Recent posts