* 파일업로드 취약점 대응방안
1) 블랙리스트 필터링 : 전부 허용하고 리스트 목록만 차단
- 우회 방법 : 확장자 대소문자 치환, PHP 기본 설정 확장자(아래 1.1 참고), htaccess 분산 설정 파일
2) 화이트리스트 필터링 : 전부 차단하고 리스트 목록만 허용
- 우회 방법 : Multiple Extensions 취약점
1.1 PHP 기본 설정 확장자
: PHP는 버전별로 초기 설정에 "php" 외 다른 확장자가 등록되어 있다. 버전에 따라서 확장자 우회가 가능하거나 또는 운영자가 추가한 확장자 명을 알 수 있다면 웹쉘 업로드가 가능.
1.1.1 PHP 인터프리터 확장자 설정
- 설정 파일 : php.conf 파일
ex) CentOS 5.5버전의 경우 = /etc/httpd/conf.d/php.conf
버전 |
초기 설정된 확장자 |
PHP 3.X |
.php, .php3, .phtm3 |
PHP 4.X ~ 5.X |
.php |
PHP 7.X |
.php, .php3, .php4, .php5, .php7, .pht, .phtml |
1.1.2. "mod_mime" 모듈 이용
: 아파치 웹 서비스는 파일의 미디어 유형 처리와 관련된 "mod_mime" 모듈의 확장자 처리 규칙을 악용하여 PHP 스크립트 파일로 인식 시킬 수 있는 문제점 존재
* mod_mime 모듈 : 파일에 하나 이상의 확장자가 지정되어 있을 경우 국가 코드와 인코딩을 제외하고 메타 데이터에 미디어 타입에 매핑된 확장자가 하나 이상일 경우에 최우측에 있는 확장자로 인식
ex) c99.php.kr => 아파치에서는 c99.kr.php로 처리
c99.php.cmd 혹은 c99.php.rootable 등 "/etc/mime.types"와 "httpd.conf", "php.conf" 등에 정의가 없는 확장자는 제외하고 인식
- 만약 서버에서 블랙리스팅이 아닌 화이트리스팅으로 확장자를 막고 있다면 ?
(참고 : http://coffeenix.net/board_print.php?bd_code=1671)
* 기본 설정된 확장자 외에 관리자가 추가 등록할 가능성이 있는 확장자
"htm" , "html" , "inc", "phtml", "bak"
* "httpd.conf"에 cgi-script에 다양한 CGI 인터프리터가 등록되어 있을 가능성이 있음
- ".cgi" , "pl", ".pm" , "py" 등 해당 확장자가 등록되어 있다면 해당 언어로 웹쉘 업로드가 가능함.
1.2. htaccess 분산 설정 파일
- 아파치 분산 설정 파일인 ".htaccess"를 이용하여 우회 시도.
- ".htaccess"를 이용하려면 "httpd.conf"에 "AllowOverride" 설정이 허용되어 있어야만 기능이 활성화되어 PHP 인터프리터에 임의의 확장자 지정이 가능
ex) .htaccess 코드
AddType application/x-httpd-php .cmd
-> .cmd 확장자는 php로 실행이 됌.
2.1 Multiple Extensions 취약점
: 다중 확장자 파일에서는 확장자 순서에 무관하게 메타 정보에 매핑되는 최우측의 확장자로 매핑됌.
ex) rootable.jpg.php.cmd => 매핑되는 확장자는 jpg와 php, 이 중 최우측에 있는 php로 확장자가 인식됌.
2.1.1. "AddType 지시자" 혹은 "AddHandler 지시자"
- 만약 php.conf 파일에서 AddType 지시자 혹은 AddHandler 지시자를 사용할 경우 파일명에 ".php" 확장자가 포함되어있다면 핸들러가 우선하여 PHP 스크립트로 매핑된다.
ex) rootable.php.jpg의 경우 php와 jpg 모두 메타 정보에 매핑되어 있어 최우측의 jpg로 확장자가 결정되어야 할 것 같지만 php.conf 파일에 "AddType 지시자"나 "AddHandler" 지시자로 되어있다면 해당 파일은 php로 확장자가 결정됌.
- 대응방안 : <FilesMatch> 블록을 이용하여 최우측의 확장자가 ".php"일 경우에만 PHP 스크립트로 처리하도록 설정
<FilesMatch \.php$> //최우측의 확장자가 .php일 경우에만 적용
SetHandler application/x-httpd-php
</FilesMatch>
출처 : 웹 모의해킹 시나리오의 완성 WEB HACKING 서버 침투 기법