소학회/Dreamhack

[Dreamhack] ServerSide: File Vulnerability

도아돵 2023. 11. 14. 09:14

 File Upload Vulnerability

-공격자의 파일을 웹 서비스의 파일 시스템에 업로드하는 과정에서 발생하는 보안 취약점

-파일 시스템 상 임의 경로에 원하는 파일을 업로드하거나 악성 확장자를 갖는 파일을 업로드할 수 있을 때 발생

(이용자가 업로드될 파일의 이름을 임의로 정할 수 있을 때 발생)

-원하는 시스템 커맨드를 실행하는 원격 코드 실행 취약점을 유발

 

-파일 업로드 취약점은 Path Traversal과 악성 파일 업로드로 분류
-파일 업로드를 허용하는 대개의 서비스는 보안을 위해 특정 디렉터리에만 업로드를 허용가능

 

만약 제한이 없다면, 악의적인 이용자가 웹 서버의 소스 코드나 서버에 있는 중요 시스템 파일을 덮어 쓸 위험이 있음!!

* Path Traversal 취약점: 업로드에 존재하는 이러한 제약을 우회하여, 임의 디렉터리에 파일을 업로드할 수 있는 취약점

 

.  : 현재 디렉리

.. : 상위 디렉터리

 

 

 


 File Download Vulnerability

-웹 서비스의 파일 시스템에 존재하는 파일을 다운로드 하는 과정에서 발생하는 보안 취약점

-공격자는 웹 서비스의 파일 시스템에 존재하는 임의 파일을 다운로드 받을 수 있음

-설정 파일, 패스워드 파일, 데이터 베이스 백업 본 등을 다운로드 하여 민감한 정보를 탈취할 수 있고 2차 공격을 수행가능

 

Common Gateway Interface(CGI)
: 동적인 컨텐츠를 처리하기 위해서 웹 서버와 php 같은 외부의 프로그램에 사이에서 인터페이스를 제공하는 프로토콜

 

업로드 취약점을 막기 위해서, 개발자는 업로드 디렉터리를 웹 서버에서 직접 접근할 수 없도록 하거나, 업로드 디렉터리에서는 CGI가 실행되지 않도록 해야 하고 업로드된 파일 이름을 그대로 사용하지 않고 basepath와 같은 함수를 통해 파일 이름을 검증한 후 사용해야 하며 허용할 확장자를 명시해 그 외 확장자는 업로드될 수 없도록 해야 한다.

다운로드 취약점을 막기 위해서, 요청된 파일 이름을 basepath과 같은 함수를 통해 검증하거나 파일 이름과 1:1 맵핑되는 키를 만들어 이용자로부터 파일 이름이 아닌 키를 요청하도록 해야 한다.

 


Q1. php 확장자를 가진 파일이 정상적으로 php 스크립트 엔진에 실행되고자 한다. (A)와 (B)에 들어갈 말로 올바른 것은?
<FilesMatch ".+\.ph(p[3457]?|t|tml)$">
    (A) (B)
</FilesMatch>
SetHandler, application/x-httpd-php