1. File Inclusion

- PHP로 구현된 웹 서버를 대상으로 PHP의 include 기능을 악용하는 방식

- PHP는 incude를 이용해 다른 PHP 파일을 현재 웹 페이지에 포함시킬 수(or 불러올 수) 있음

- 공격자는 악의적인 PHP 파일을 생성해 대상 웹 페이지에 include의 파라미터로 전송해 악성 파일을 실행시키거나, 시스템의 로컬 파일에 접근한다.

- 시스템의 로컬 파일에 접근하는 LFI(Local File Inclusion) 방식과, 외부 파일을 불러오는 RFI(Remote File Inclusion) 방식이 존재

 

2. DVWA 실습 - Low Level

2.1 RFI 방식

[캡쳐 1] 최초 페이지

- file1.php, file2.php, file3.php에 접속 시 page 매개변수의 인자값만 변경됨

[캡쳐 2] 악성 PHP 파일 생성

- 웹에서 접근이 가능하도록 /var/www/html에 악성 PHP 파일 생성

[캡쳐 3] /etc/passwd 파일 노출

- 취약한 웹 페이지에서 page 매개변수로 악성 PHP 파일 경로를 전달하면, 해당 PHP이 삽입되어 실행됨

 

2.2 LFI

[캡쳐 4] /etc/passwd 파일 노출

- 로컬 시스템의 파일에 접근 및 파일 내용 노출

 

3. DVWA 실습 - Medium

[캡쳐 5] RFI 공격 실패

- 취약한 웹 페이지에서 RFI를 시도해 보았을 때 공격에 실패한 것을 확인

[캡쳐 6] 입력값 필터링

- page 매개변수로 전달 받은 값에서 http://, https://(File Inclusion 대응), ../, ..\(Directory Traversal 대응)를 공백으로 치환을 수행

[캡쳐 7] 필터링 우회

- http:// 사이에 http://를 입력(hthttp://tp://) 시 필터링에 의해 http://가 공백으로 치환되어 최종적으로 http://가 완성됨.

 

4. DVWA 실습 - High Level

[캡쳐 8] RFI 공격 실패

- page 매개변수를 통해 RFI를 시도하면 ERROR가 출력되며, 필터링을 우회하기 위해 hthttp://tp://를 전달하여도 ERROR가 출력됨.

[캡쳐 9] 입력값 필터링

- 파라미터의 명이 file로 시작하지 않거나, include.php가 아니면 에러를 반환하도록 필터링이 적용됨.

[캡쳐 9] 필터링 우회

- 파라미터를 file로 시작하고, ../를 충분히 입력해 root 디렉터리로 이동 후 /etc/passwd에 접근 시 파일 내용을 확인할 수 있음

- [캡쳐 9]에 적용된 필터링으로는 Directory Traversal 공격에 대응하지 못함.

 

5. DVWA 실습 - Impossible Level

[캡쳐 10] RFI 공격 실패

- 앞서 확인한 필터링을 우회하기 위한 다양한 방법을 시도해 보았지만 ERROR를 출력함

[캡쳐 11] 입력값 필터링

- 소스코드를 확인해 보면 꼭 필요한 파일만 include 될 수 있도록 파일을 지정

 

6. 대응방안

6.1 RFI

1. 원격지 파일을 열지 못하도록 php.ini(php 환경설정 파일) 수정

- allow_url_fopen = OFF
- allow_url_include = OFF

 

6.2 공통

1. 입력값에 대한 필터링을 강화한다(시큐어 코딩 적용)

- hthttp://tp://, ../ 등 필터링을 우회하지 못하도록 필터링 적용

- 중요정보가 저장된 디렉터리나 파일(ex. /etc/passwd, /etc/shadow 등)에 대한 필터링

 

2. include 관련한 에러를 출력하지 않도록 php.ini 수정

- display_errors = OFF

 

3. 파일 존재 유무를 확인하는 코드 삽입

function check_validation($filename){
if (file_exists("$DOCUMENT_ROOT/common/$filename){
echo $filename;
}
else{
echo "접근경로가 올바르지 않습니다.";
exit;
}

 

4.  정기적 로그 분석 진행

 

5. 공격 IP를 탐지 및 차단할 수 있도록 Snort 정책 등 규칙 적용

+ Recent posts