파일 업로드 취약점이란?
- 파일 업로드 취약점 (File Upload Vulnerability)
- 파일 업로드 취약점은 웹 사이트의 파일 업로드 기능에서 발생하는 취약점이다.
- 좀 더 자세히 말하면, 공격자가 파일 업로드 기능을 통해
비정상 파일을 업로드하여 공격할 수 있게 되는 취약점이다.
- 여기서 비정상 파일은 서버 사이드 스크립트로 작성된 웹 쉘 코드를 의미한다.
- 서버 사이드 스크립트 (Server-Side Script)
- 웹의 구조는 크게 Server Side와 Client Side로 나눌 수 있다.

- Client Side, 즉 웹 브라우저에서 해석되는 언어를 클라이언트 사이드 스크립트라 한다.
ex) HTML, CSS, Javascript - Server Side, 즉 웹 서버에서 해석되는 언어를 서버 사이드 스크립트라 한다.
ex) PHP, JSP, ASP - 웹 서버에서 해석된다는 말의 의미는
클라이언트 측의 요청을 받아와, 서버에서 이를 실행하고,
그 결과를 다시 클라이언트 측에 전송하는 것이다. - 예를 들어, 다음과 같이 서버 사이드 스크립트인 PHP로 작성된 코드를 실행하면
웹 사이트 측에서는 실행 결과만 확인할 수 있다.
웹 브라우저에서 개발자 도구를 통해 확인해도 HTML 코드만 확인할 수 있고,
전체 코드는 확인할 수 없다.
이렇게 서버 측에서 실행되어 클라이언트 측으로 결과를 전송해주는 것이
바로 서버 사이드 스크립트다.
- 웹의 구조는 크게 Server Side와 Client Side로 나눌 수 있다.
- 웹 쉘 (Web Shell)
- 웹 쉘은 웹과 쉘의 합성어다. Web + Shell
- Shell은 운영체제에서 사용자와 커널을 연결하는 인터페이스이다.

운영체제는 그림과 같이 하드웨어, 커널, 쉘, 사용자가 연결되어 동작한다.
여기서 커널은 하드웨어와 직접 상호작용하며 자원을 관리하는 부분이다.
커널과 사용자가 직접 상호작용하기는 복잡하고 어렵기 때문에 쉘이 이 둘을 연결해준다.
사용자가 쉘에 명령을 입력하면 쉘이 이를 커널이 이해할 수 있도록 해석하여 전달한다.
커널은 해당 명령을 실행하고 쉘에 결과를 반환하고
쉘이 그 결과를 사용자에게 출력해주는 방식으로 작동한다.
쉘을 통해 사용자는 프로세스, 메모리, 디바이스, 파일 시스템, 네트워크 등을
관리할 수 있는 시스템 명령을 실행하게 된다. - 웹 쉘은 이러한 쉘의 기능을 웹 환경에서 제공하는 도구이다.
원래 시스템 명령을 실행하기 위해서는 사용자가 로컬 PC에서 쉘을 열어 명령어를 입력해야 한다. 하지만, 웹 쉘을 이용하면 웹 쉘을 통해 멀리 떨어져 있는 웹 서버에 시스템 명령을 실행할 수 있게 된다. - 주로 시스템 함수를 악용하여 만들어지고,
서버에서 실행되므로 서버 사이드 스크립트로 작성된다. - 시스템 명령은 해킹에서 최고의 행위로 매우 큰 피해를 가져올 수 있다.

하나의 웹 서버에 침투하게 되면, 내부망과 개인 PC에 2차, 3차 침투하여
중요한 정보를 열람하거나 서버 운영에 지장을 줄 수 있고,
랜섬웨어 유포도 가능해진다.
(여기서 침투한다는 것이 시스템 명령 실행을 의미한다.) - 시스템 명령 실행은 매우 큰 피해를 가져올 수 있으므로
파일 업로드 취약점은 매우 중요한 취약점이라 할 수 있다.
- OS Command Injection과 비교하면?
- OS Command Injection을 통해서도 시스템 명령을 실행할 수 있다.
웹 페이지에서 시스템 명령을 실행할 수 있는 기능이 있는 경우에만
발생하는 취약점인데 이러한 기능은 자주 사용되지 않는다. - 반면에 파일 업로드 기능은 최근 거의 모든 웹 사이트에서 사용되고 있기 때문에
발생 빈도가 높아 동일한 효과를 가져옴에도 더 중요하다고 할 수 있다.
- OS Command Injection을 통해서도 시스템 명령을 실행할 수 있다.
공격 원리

- 공격자가 파일 업로드 기능을 통해 웹 서버에 웹 쉘 파일을 업로드한다.
- 웹 브라우저를 통해 자신이 업로드한 웹 쉘 파일에 접근한다.
- 웹 쉘 파일이 실행되면 시스템 명령을 실행할 수 있는 쉘이 화면에 출력된다.
공격자는 이를 통해 시스템 명령을 실행하여, 다양한 공격을 수행하게 된다.
대응 방안
- 파일 업로드 취약점은 악의적인 사용자가 웹 쉘 파일을 업로드하여 실행할 수 있게 되는 취약점이다. 즉, 이에 대응하기 위해서는 웹 쉘 파일을 업로드할 수 없게 하거나
업로드하더라도 실행할 수 없게 하면 된다. - 파일 업로드 취약점의 대응 방안은 크게 두 가지로 나눌 수 있다.
1. 파일명에 대한 검증
- 파일명을 기준으로 정상 파일인지 검증한 뒤, 정상인 경우에만 업로드할 수 있게 하는 것
- 확장자 검증, 서버 측에서 파일명 생성, 두 가지 단계로 이루어진다.
- 1. 확장자 검증
- 파일의 확장자를 기준으로 해당 파일이 정상 파일인지를 검증하는 방식
- (1) 블랙 리스트 방식
- 허용하지 않을 확장자를 정해놓고 해당 확장자인 경우에는 업로드 실패,
그 확장자가 아닌 경우에 업로드 성공시키는 방식
ex) jsp, asp, php - 장점 : 다양한 파일 업로드 가능
- 단점 : 다양한 우회 가능성 존재
- 허용하지 않을 확장자를 정해놓고 해당 확장자인 경우에는 업로드 실패,
- (2) 화이트 리스트 방식 (권장)
- 허용할 확장자를 정해놓고 해당 확장자인 경우에 업로드 허용하는 방식
ex) png, gif, jpg - 장점 : 우회 가능성 제한적
- 단점 : 다양한 파일 업로드 불가능
- 허용할 확장자를 정해놓고 해당 확장자인 경우에 업로드 허용하는 방식
- ex) 사용자가 운동화.png라는 파일을 업로드하는 경우
(1) 파일 업로드 기능이 파일명을 받아들이고,
(2) 파일명에서 확장자 png 를 파싱하여,
(3) 화이트 리스트 또는 블랙 리스트 방식으로 검증하여,
(4) 파일 업로드 여부를 결정
- ex) 공격자가 webshell.jsp라는 파일을 업로드하는 경우
(1) 파일 업로드 기능이 파일명을 받아들이고,
(2) 파일명에서 확장자 jsp 를 파싱하여,
(3) 화이트 리스트 또는 블랙 리스트 방식으로 검증하여,
(4) 파일 업로드 여부를 결정
- 2. 서버 측에서 파일명 생성

- 사용자가 파일을 업로드하면, 서버 측에서 새로운 파일명을 생성한다.
- 주로 시간이나 랜덤 문자열을 이용해 파일명이 생성된다.
- 이렇게 하면 사용자가 파일명을 조작할 수 없어 더욱 안전하다.
- 사용자가 다시 파일을 다운로드 할 때는
기존 파일명으로 다운 받을 수 있게 DB에 저장한다.
- 검증된 확장자와 생성된 파일명을 조합하여 파일명 검증이 완료되면,
파일을 업로드할 수 있다.
2. 올바른 업로드 경로 설정
- 웹 쉘과 같은 서버 사이드 스크립트가 실행될 수 없는 경로에
파일을 업로드하도록 설정하는 것
(1) 웹 디렉토리 이외의 경로
웹 디렉토리 이외의 경로에 업로드하면, 공격자가 웹 브라우저를 통해 파일에 직접 접근할 수 없어 안전하다.
(2) 스크립트 실행 권한 제거
웹 디렉토리에 업로드해야 한다면 스크립트 실행 권한을 제거한다.
경로가 세분화되어 있는 경우
경로 변조를 통해 사용자가 웹 디렉토리에 접근할 수도 있기 때문에
경로 변경 검증 로직이 추가되어야 한다.
정리
- 파일 업로드 취약점이란?
파일 업로드 기능을 통해,
악의적인 사용자가 웹 쉘 파일을 업로드하여 실행할 수 있게 되는 취약점
시스템 명령 실행을 통해 매우 큰 피해를 가져올 수 있음 - 대응 방안
1. 파일명에 대한 검증 : (1) 확장자 검증 (2) 서버 측에서 파일명 생성
2. 올바른 업로드 경로 설정 : 웹 디렉토리 이외의 경로 or 스크립트 실행 권한 제거
'Security > Web Hacking' 카테고리의 다른 글
| [Web Hacking] 파라미터 변조 취약점 (Parameter Tampering Vulnerability) (0) | 2024.08.20 |
|---|---|
| [Web Hacking] OS Command Injection (0) | 2024.08.19 |
| [Web Hacking] URL 접근 제한 미흡 취약점 (Failure to Restrict URL Access Vulnerability) (0) | 2024.08.15 |
| [Web Hacking] XXE Injection (0) | 2024.04.30 |
| [Web Hacking] Dreamhack - devtools-sources 문제 풀이 (0) | 2024.04.30 |