개념정리
Apache 서버에서 발생하는 파일업로드 취약점에 대해서 다루는 문제다.
기본 개념을 익히고 가보자.
○ .htaccess
.htaccess
는 hypertext access
의 약자로, Apache 웹 서버의 디렉토리를 설정하는 기본 파일이다.
보통 웹사이트 root 디렉토리에 위치하며, 특정 디렉토리에 위치할 경우 해당 디렉토리 및 모든 하위 디렉토리에 설정에 대한 영향을 행사한다.
.htaccess
파일을 사용하면 웹 서버 설정을 개별적으로 지정할 수 있기 때문에 공격자가 업로드할 수 있다면 웹 서버 설정을 건드릴 수 있는 위험한 취약점이다.
○ .htaccess 설정 정보
- URL 재작성:
.htaccess
을 사용하면 URL을 재작성할 수 있다. 이를 통해 동적인 URL을 검색 엔진 최적화(SEO)에 적합한 형태로 변경하거나, URL 경로를 단순화할 수 있다. - 인증 및 보안:
.htaccess
을 사용하여 인증 및 보안 설정을 지정할 수 있다. 예를 들어, 사용자 인증 설정, IP 차단 설정 등을 지정할 수 있다. - MIME 타입 설정:
.htaccess
을 사용하여 MIME 타입 설정을 변경할 수 있다. 이를 통해 다양한 파일 형식을 처리할 수 있다. - 오류 페이지 설정:
.htaccess
을 사용하여 오류 페이지를 지정할 수 있다. 예를 들어, 404 오류 페이지를 지정하여 존재하지 않는 페이지에 접근할 때 표시되는 페이지를 변경할 수 있다. - 캐시 설정:
.htaccess
을 사용하여 캐시 설정을 지정할 수 있다. 이를 통해 브라우저 캐시를 사용하여 페이지 로딩 속도를 개선할 수 있다.
공격자는 .htaccess
설정을 변경하고 내부 파일 시스템을 탐색, 보안 설정 우회, 코드 인젝션 등을 수행할 수 있다.
예제 문제에서는 Type 처리와 관련된 설정을 악용해서 PHP 파일 업로드에 대한 검증을 우회하는 실습을 할 것이다.
문제풀이
파일 업로드 기능이 있다.
파일업로드 취약점으로 웹쉘을 업로드하고 flag를 획득하면 될 것 같다. 하지만 파일을 업로드해보면 알 수 있듯이 php 파일을 업로드 할 수 없다.
php 파일을 업로드할 수 없는 이유를 분석하기위해 코드를 분석하자.
$deniedExts = array("php", "php3", "php4", "php5", "pht", "phtml");
upload.php
에서 php 관련 확장자를 모두 필터링하고 있다. 따라서 php 확장자 파일을 업로드 할 수 없었던 것이다.
개념정리
에서 언급한 것처럼 .htaccess
파일을 업로드해서 웹 서버의 설정을 바꾸는 방식으로 우회해야한다.
.htaccess
파일이다.
AddType
설정으로 .xxx
확장자도 php
로 실행하도록 했다.
해당 파일을 업로드하면 .xxx
확장자도 php 파일로 실행한다.
즉, php 확장자가 아니어도 웹쉘을 업로드할 수 있는 것이다.
flag.xxx
파일이다. php로 작성된 웹쉘 코드다.
업로드하고 flag를 획득하면된다.
○ 공격 시나리오
.htaccess
파일을 업로드하고.xxx
확장자가php
로 실행되도록 한다.flag.xxx
를 업로드하고 flag를 획득한다.
.htaccess
와 flag.xxx
를 순서대로 업로드해보자.
정상적으로 업로드된 것을 확인할 수 있다.
/upload/flag.xxx
에 접속해서 웹쉘을 실행해보자.
flag.xxx?cmd=ls ../../../../../
를 실행한 결과다.
flag는 최상위 디렉토리에 있다.
실행해보자.
flag.xxx?cmd=../../../../../../flag
대응방안
○ 파일 업로드 제한
파일 업로드 기능을 제공할 때, 업로드 가능한 파일의 확장자나 크기를 제한하는 등의 보안 설정을 추가한다.
○ 파일 업로드 경로 제한
파일 업로드 경로를 웹 서버의 루트 디렉토리 이외의 다른 경로로 지정하여, .htaccess
파일이 업로드되지 않도록 한다.
○ 주기적인 보안 업데이트
웹 서버와 관련된 보안 업데이트를 정기적으로 수행하여 보안 취약점을 최소화한다.
○ 파일 권한 설정
.htaccess
파일을 업로드한 후, 파일 권한을 적절하게 설정하여 악의적인 사용자가 파일 내용을 변경할 수 없도록 한다.
○ 웹 방화벽 사용
웹 방화벽을 사용하여 악성 .htaccess
파일이 업로드 되는 것을 방지한다.