<FilesMatch ".+\.ph(p[3457]?|t|tml)$">
(A) (B)
</FilesMatch>
1. Apache 웹 서버 기본 개념
Apache HTTP Server는 전 세계에서 널리 사용되는 오픈 소스 웹 서버입니다. Apache는 HTTP 요청을 처리하고, 웹 페이지 및 리소스를 클라이언트(주로 웹 브라우저)에게 제공하는 역할을 합니다.
2. 웹 서버의 동작 방식
웹 서버는 클라이언트로부터 HTTP 요청을 받아들여, 해당 요청에 대한 응답을 반환합니다. 이 과정에서 웹 서버는 정적 파일(HTML, CSS, 이미지 등)을 제공하거나, PHP와 같은 서버 사이드 스크립트 언어를 사용하여 동적 콘텐츠를 생성할 수 있습니다.
3. PHP 기본 개념
**PHP (Hypertext Preprocessor)**는 서버 사이드 스크립트 언어로, 주로 동적 웹 페이지를 생성하는 데 사용됩니다. PHP 파일은 .php 확장자를 가지며, PHP 코드가 포함된 파일은 서버에서 실행되어 HTML 등의 콘텐츠를 생성합니다.
4. Apache와 PHP 통합
Apache 웹 서버가 PHP 스크립트를 실행하기 위해서는 PHP를 핸들러로 설정해야 합니다. 이를 위해 Apache는 SetHandler 지시어를 사용하여 특정 파일 확장자를 PHP 엔진으로 처리할 수 있도록 설정합니다.
5. Apache 설정 파일
Apache의 설정 파일은 주로 httpd.conf 또는 apache2.conf로 불리며, 이 파일을 통해 서버의 동작을 제어할 수 있습니다. 설정 파일에는 서버의 전반적인 설정, 가상 호스트 설정, 디렉토리 설정, 모듈 로드 설정 등이 포함됩니다.
6. <FilesMatch> 디렉티브
<FilesMatch> 디렉티브는 정규 표현식을 사용하여 특정 파일 패턴에 설정을 적용할 수 있게 합니다. 예를 들어, .php 확장자를 가진 모든 파일에 대해 특정 처리를 하려면 <FilesMatch> 디렉티브를 사용하여 해당 파일들을 매칭할 수 있습니다.
7. SetHandler 지시어
SetHandler 지시어는 Apache가 특정 파일 타입을 처리하는 방식을 지정합니다. PHP 파일을 PHP 엔진으로 처리하도록 설정할 때 사용됩니다.
예시 설정:
apache
- .ph(p[3457]?|t|tml)$: 정규 표현식을 사용하여 .php, .php3, .php4, .php5, .php7, .pht, .phtml 등의 확장자를 가진 파일을 매칭합니다.
- SetHandler application/x-httpd-php: 매칭된 파일에 대해 PHP 핸들러(application/x-httpd-php)를 사용하여 PHP 엔진으로 처리합니다.
기타 관련 지식
8. 정규 표현식
정규 표현식(Regular Expression)은 문자열 패턴을 매칭하기 위한 강력한 도구입니다. Apache 설정 파일에서 파일 이름 패턴을 지정할 때 자주 사용됩니다. 예를 들어, .+\.php$는 .php로 끝나는 모든 파일을 매칭합니다.
9. 핸들러(Handler)
핸들러는 Apache가 요청된 리소스를 처리하는 방식을 정의합니다. PHP 파일의 경우, application/x-httpd-php 핸들러를 사용하여 PHP 엔진이 해당 파일을 처리하도록 합니다.
10. 모듈
Apache는 모듈을 사용하여 기능을 확장합니다. PHP를 Apache에서 실행하기 위해서는 PHP 모듈(mod_php)을 로드해야 합니다. 이는 PHP 코드를 처리하고 실행하는 데 필요한 기능을 제공합니다.
다음은 악성 파일 업로드를 통해 수행할 수 있는 행위들입니다:
- Cross Site Scripting (XSS)
- Remote Code Execution (RCE)
- Cross Site Request Forgery (CSRF)
- Cookie Hijacking
각 항목 설명:
- Cross Site Scripting (XSS)
- 악성 파일 업로드를 통해 XSS 공격이 가능합니다. 공격자가 악의적인 스크립트를 포함한 파일(예: HTML 파일)을 업로드하고, 다른 사용자가 이를 열람할 때 스크립트가 실행되도록 할 수 있습니다. 이를 통해 세션 하이재킹, 크로스 사이트 스크립팅 등의 공격을 수행할 수 있습니다.
- Cookie Hijacking
- 악성 파일 업로드 그 자체로는 직접적으로 Cookie Hijacking을 수행하지는 않지만, XSS를 통해 쿠키 탈취를 할 수 있습니다. XSS를 통해 사용자의 쿠키 정보를 훔쳐내어 세션 하이재킹을 수행할 수 있습니다.
- Remote Code Execution (RCE)
- 악성 파일 업로드를 통해 RCE 공격이 가능합니다. 예를 들어, PHP 파일을 업로드하여 서버에서 임의의 코드를 실행하도록 할 수 있습니다. 이를 통해 서버에 대한 완전한 제어권을 획득할 수 있습니다.
- Cross Site Request Forgery (CSRF)
- 악성 파일 업로드 그 자체로는 CSRF 공격을 직접 수행하지는 않지만, 업로드된 파일이 사용자에게 표시되거나 실행되는 경우, XSS 등을 통해 CSRF 공격을 유도할 수 있습니다.
정답:
악성 파일 업로드를 통해 할 수 있는 행위는 다음과 같습니다:
- Cross Site Scripting (XSS)
- Remote Code Execution (RCE)
- Cross Site Request Forgery (CSRF)
- Cookie Hijacking
Cookie Hijacking은 악성 파일 업로드로 직접 수행되는 것은 아니지만, XSS 공격을 통해 간접적으로 수행될 수 있습니다.
@app.route("/download")
def download():
filename = request.args.get("filename")
content = open("/data/uploads/" + filename, "rb").read()
return content
- @app.route("/download"):
- 이 줄은 "/download" 경로로 들어오는 HTTP 요청을 download 함수로 연결합니다.
- 예를 들어, 클라이언트가 http://localhost:5000/download?filename=test.txt로 요청을 보내면, Flask는 /download 경로에 매핑된 download 함수를 실행합니다.
- def download()::
- 이 함수는 /download 경로에 대한 요청을 처리합니다.
- 함수 내부에서 request.args.get("filename")를 사용하여 쿼리 문자열에서 filename 인자를 가져옵니다. 예를 들어, URL이 http://localhost:5000/download?filename=test.txt인 경우, filename은 test.txt가 됩니다.
- content = open("/data/uploads/" + filename, "rb").read():
- filename 변수에 저장된 파일명을 사용하여 /data/uploads/ 디렉토리에서 해당 파일을 엽니다.
- 파일을 읽어서 content 변수에 저장합니다.
- return content:
- 파일의 내용을 클라이언트에게 응답으로 반환합니다.
- Flask는 이 반환값을 HTTP 응답으로 전송합니다.
정답:
- ../../proc/self/maps:
- /data/uploads/에서 두 번 상위 디렉토리로 이동하여 루트 디렉토리에 도달한 후, /proc/self/maps 파일에 접근합니다.
/data/uploads/../../proc/self/maps -> /proc/self/maps - ../../../proc/self/maps:
- /data/uploads/에서 세 번 상위 디렉토리로 이동하여 루트 디렉토리에 도달한 후, /proc/self/maps 파일에 접근합니다. 세 번 올라가는 경우도 루트 디렉토리에 도달할 수 있지만, 두 번 올라가도 충분합니다.
/data/uploads/../../../proc/self/maps -> /proc/self/maps
'컴퓨터보안 > 웹서버' 카테고리의 다른 글
Server-side Request Forgery (SSRF) (0) | 2024.05.29 |
---|---|
File Vulnerability (0) | 2024.05.28 |
파일 취약성 (0) | 2024.05.24 |
서버 관련 정리(간단히) (0) | 2024.05.23 |
서버 관련 정리(자세히) (0) | 2024.05.23 |