[2. File Upload Vulnerability]
File Upload Vulnerability
: 웹 서비스를 통해 이용자의 파일을 서버의 파일 시스템에 업로드하는 과정에서 발생하는 보안 취약점
- 이용자가 업로드될 파일의 이름을 임의로 정할 수 있을 때 발생함. (파일 이름에 이용자가 입력한 문자열을 그대로 사용하거나, 이용자의 이메일, 닉네임 등을 포함시키는 등의 소스 코드 패턴)
- 파일 업로드 취약점은 크게 Path Traversal과 악성 파일 업로드로 분류됨.
Path Traversal 취약점
- 파일 업로드를 허용하는 대개의 서비스는 보안을 위해 특정 디렉터리에만 업로드를 허용하지만, 이러한 제한이 없다면, 악의적인 이용자가 웹 서버의 소스 코드나 서버에 있는 중요 시스템 파일을 덮어 쓸 위험이 있음.
- Path Traversal 취약점은 업로드에 존재하는 이러한 제약을 우회하여, 임의 디렉터리에 파일을 업로드할 수 있는 취약점을 말함.
악성 파일 업로드 취약점
:이용자가 파일을 업로드할 때, 이를 제대로 검사하지 않아서 발생하는 취약점
- 웹 셸 : .php, .jsp, .asp와 같은 확장자의 파일을 Common Gateway Interface(CGI)로 실행하고, 그 결과를 이용자에게 반환한다 -> 많은 웹 서버들이 php파일에 대해 위와 같은 핸들링을 지원 -> 따라서 공격자가 임의의 php 소스 파일을 .php 확장자로 업로드하고, GET 요청을 보낼 수 있다면 CGI에 의해 해당 코드가 실행되도록 할 수 있음
- 악의적인 웹 리소스 : 웹 브라우저는 파일의 확장자나 응답의 Content-Type에 따라 요청을 다양하게 처리함. -> 만약 요청한 파일의 확장자가 .html 이거나, 반환된 Content-Type 헤더가 text/html일 경우 응답은 HTML 엔진으로 처리되고, 파일의 확장자가 .png, .jpg등의 이미지 확장자이거나, Content-Type이 image/png일 경우에는 이미지로 렌더링됨.
=> 만약 공격자가 서버에 exploit.html을 업로드하고, 이에 접근하는 URL이 https://dreamhack.io/uploads/exploit.html이라면, 브라우저는 이를 HTML로 해석 -> exploit.html에 악의적인 스크립트를 삽입하면, Cross-Site-Scripting (XSS) 공격으로 이어질 수 있음
[3. File Download Vulnerability]
: 서비스를 통해 서버의 파일 시스템에 존재하는 파일을 내려 받는 과정에서 발생하는 보안 취약점
- 이용자가 다운로드할 파일의 이름을 임의로 정할 수 있을 때 발생함.
- 웹 서비스는 이용자가 업로드한 파일을 다운로드 받거나 이미지를 불러올 때 특정 디렉터리에 있는 파일만 접근하도록 해야 함.
- Path Traversal을 이용한 파일 다운로드 취약점은 파일 이름을 직접 입력 받아 임의 디렉터리에 있는 파일을 다운로드 받을 수 있는 취약점을 말함.
업로드 취약점을 막으려면..
- 개발자는 업로드 디렉터리를 웹 서버에서 직접 접근할 수 없도록 하거나, 업로드 디렉터리에서는 CGI가 실행되지 않도록 해야 하고 업로드된 파일 이름을 그대로 사용하지 않고 basepath와 같은 함수를 통해 파일 이름을 검증한 후 사용해야 함.
- 또, 허용할 확장자를 명시해 그 외 확장자는 업로드될 수 없도록 해야 함.
다운로드 취약점을 막으려면..
- 요청된 파일 이름을 basepath과 같은 함수를 통해 검증하거나 파일 이름과 1:1 맵핑되는 키를 만들어 이용자로부터 파일 이름이 아닌 키를 요청하도록 해야 함
* file-download-1
* image-storage
'웹해킹 스터디' 카테고리의 다른 글
ServerSide: Command Injection (0) | 2024.02.28 |
---|---|
ClientSide: CSRF(Cross Site Request Forgery) (0) | 2024.02.15 |
ClientSide: XSS (0) | 2024.02.15 |
Background: Cookie & Session (0) | 2024.02.02 |
Introduction of Webhacking & Background:Web (1) | 2024.01.24 |