웹 해킹 & 보안

[웹 모의해킹] File Upload - 파일 업로드 취약점 실습 - 2편

ahhyun98 2025. 6. 3. 14:29

 

이번 실습은 DVWAFile Upload 기능보안 레벨 Medium으로 설정하고, 보다 강화된 검증 로직을 우회하여 악성 파일을 업로드하고 실행하는 과정을 다뤘다. 단순한 .php 확장자 업로드 차단을 우회하기 위해 다양한 우회 기법을 시도하고, 이후 File Inclusion 기능과 연계하여 업로드된 파일을 강제로 실행하는 시나리오를 실습하였다.


1. File Upload Medium 단계의 보안 로직

보안 레벨 Medium에서는 Low 단계에 비해 아래와 같은 보안 로직이 추가되어 있다

  • .php 확장자를 직접 업로드할 수 없음
  • getimagesize()를 통해 이미지 파일로 판별되지 않으면 업로드 실패
  • 업로드 후 실행 디렉터리에 저장되므로 여전히 실행은 가능함. 

하지만 확장자 및 콘텐츠 체크는 완벽하지 않기 때문에 우회 가능하다. 


2. 확장자 우회 전략

단순히 .php 파일은 업로드가 차단되기 때문에, 아래와 같은 다양한 확장자를 실험하며 서버 측 필터링을 우회하였다. 

hello.php.jpg
hello.php.jpeg
hello.php.png
hello.php3.jpg
hello.php3.jpeg

 

실제 파일 리스트

cat.png
dog.png
hello.php
hello.php3.jpg
hello.php.jpg
hello.php3.jpeg
hello.php.jpeg
hello.php.png

 

주요 전략

 

.php를 뒤쪽 확장자로 위장하거나 .php3 등 PHP 변종 확장자 이용

=> 서버에서 이미지로 판단되도록 유도하여 업로드 통과


3. 업로드 후 File Inclusion을 통한 실행

파일 업로드 성공 이후에는 직접 URL로 접근해도 서버에서 실행되지 않을 수 있으므로, File Inclusion 취약점을 이용해 강제로 해당 파일을 include() 하도록 구성하였다. 

http://target_ip/DVWA/vulnerabilities/fi/?page=....//....//hackable/uploads/hello.php
  • ....// 는 필터링을 우회하기 위한 Directory Traversal 우회 기법
  • hello.php 또는 우회 확장자 파일이 서버에서 PHP로 해석될 경우 리버스 쉘 연결 등 실행 가능


4. 우회 업로드 후 renaming 실행

만약 .php로 업로드가 안 될 경우, 위장된 파일을 업로드한 뒤 서버 내부에서 파일명을 변경하는 방식도 가능하다.

cp /var/www/html/DVWA/hackable/uploads/hello.php3.jpeg \
   /var/www/html/DVWA/hackable/uploads/abcdefghijk.php
  • hello.php3.jpeg는 이미 업로드된 위장 파일
  • abcdefghijk.php로 이름만 변경 => 웹쉘 직접 실행 가능

5. 실습 흐름 요약

단계 설명
1단계 .php 확장자가 포함된 다양한 위장 파일 제작 (hello.php.jpg , hello.php3.jpeg 등)
2단계 Medium 보안 레벨에서 업로드 시도 및 통과
3단계 업로드된 파일을 File Inclusion 기능으로 실행 시도
4단계  우회된 파일을 .php로 복사하여 직접 실행 가능성 확보
5단계 최종적으로 서버에서 악성 PHP 코드가 실행

6. 배운 점 & 느낀 점

  • 단순 확장자 필터링은 .php.jpg , .php3.jpeg와 같은 이중 확장자 또는 유사 확장자로 충분히 우회 가능함을 실습으로 체감하였다. 
  • File Inclusion과 연계할 경우, 단순한 이미지 업로드처럼 보이는 파일도 실제로는 웹쉘로 실행될 수 있음. 
  • 서버에 접근할 수 있다면 우회된 파일을 .php로 직접 변경하여 실행하는 전략도 유효하다.
  • Medium 보안 단계라 하더라도 실제 방어는 불완전하며, 공격자 입장에서는 다양한 조합 시도가 가능하다는 점에서 위험성이 크다.

7. 대응 방안 (Medium 보안 단계 강화 관점)

보안 항목 설명
확장자 필터링 보완 .php , .php3, .php5 , .phtml 등 변종 확장자도 차단 필요
이중 확장자 차단 hello.php.jpg와 같은 이중 확장자는 .php 문자열 포함 여부로 검증
이미지 헤더 검증 강화 단순 getimagesize()를 넘어 실제 파일 콘텐츠 기반 검증 필요
실행 디렉터리 분리 업로드 파일은 PHP가 실행되지 않는 별도 디렉터리에 저장해야 함. 
웹쉘 탐지 도구 연동 업로드 디렉터리에 대해 웹쉘 탐지 스크립트나 WAF 연동 적용 필요

 

 

 

 

이 블로그는 불법 해킹 및 악의적인 활동을 지양하며, 그런 행위는 절대 권장하지 않습니다.

모든 실습은 허가된 환경에서만 진행해야 하며, 법적 책임은 사용자 본인에게 있습니다.