Information Security/Hacking

파일 삽입 취약점 (File Inclusion Vulnerability)

Project_S 2021. 2. 15. 20:19
반응형

DVWA File Inclusion

* 파일 삽입 취약점 : 공격자가 악성 서버 스크립트를 서버에 전달, 해당 페이지를 통해 악성 코드가 실행 되도록 하는 취약점

- 악성 스크립트가 삽입되는 위치에 따라, LFI(Local File Inclusion), RFI(Remote File Inclusion)으로 분류

- 경로 제한 또는, 파라미터 변조 등에 대한 필터링의 부재로 경로 접근, 파일 실행, 외부 파일 다운로드 등의 다양한 공격으로 활용 가능

 

 

 

* RFI (Remote File Inclusion) : 공격자가 외부 서버(공격자 서버 등)에 있는 원격 파일을 URL 파라미터에 포함, 전달하여 실행

- ex) 원격지 웹쉘 경로) http://192.168.10.5/hacker/webshell.php
- 공격할 대상 페이지 URL의 파라미터에 원격지 웹쉘 경로 삽입

fname 파라미터에 원격지 주소의 파일을 포함시켜 전달 (웹쉘 실행)

 

 

 

* LFI (Local File Inclusion) : 공격자가 공격 대상 서버에 업로드 되어 있는(위치한) 파일을 실행, 공격에 활용하는 취약점

- ex) include, require 등외부 파일을 URL 형식으로 읽어올 수 있도록 하는 함수가 활성화된 페이지 확인

불필요한 에러 구문 노출(include 함수에 대한 정보 및 경로에 대한 확인 가능)

- ex) GET으로 특정 파라미터를 이용하여 include 될 수 있는 페이지 코드 일부(취약한 대상) 유추 및 공격 수행

~~~
if(isset($_GET['submit'])){
	$target=$_REQUEST['fname'];
    ~~~
    // 외부로부터 입력 받은 $target 파라미터를 이용, include 수행
    include($target);
    ~~~
}
~~~

- 이후 경로 유추, 추가 정보 획득 등을 통해 실제 file에 대한 URL로 파라미터를 이용한 include 수행
- 혹은, 프록시 툴 등을 이용하여, User-Agent 헤더 필드에 "<?php passthru('명령어'); ?" 같은 명령어 수행 구문 삽입, Submit 등 수행

* 외부 경로 파일을 URL상 삽입해서 공격을 한다(RFI)는 와닿지만, LFI는 공격 대상에 파일을 삽입...? 개념이 모호한 느낌이다. 사실 악성 파일을 서버 관리자가 로컬에 자의로 올려놓진 않기 때문이다.
- 하지만, 위치만 다를 뿐 공격 대상 서버(로컬)에 파일을 사전에 위치 시키는 방법은 다양하다.

- 사전에 File Inclusion이 성립할 조건만 확인 된다면, FTP, wget, curl 등을 이용해 악성 파일을 위치 시키는 등... 성립만 되면 Local File Inclusion이 되는 것이다.

 

 

 

* 대응책

1) 관리자는 소스코드 상 include, require 등의 구문/함수가 존재하는지 사전 검증, 사용자 입력값을 통한 원격 파일 접근을 차단해야함.

fopen 및 include OFF로 설정

- php.ini 파일에서, allow_url_fopen = Off 및 allow_url_include = Off 설정을 통해 외부 사이트의 악성 스크립트 파일을 URL 형태로 include 되지 않도록 함

include : 오류 발생 시 에러 메세지를 출력 후, 스크립트를 계속해서 실행

require : 오류 발생 시 에러 메세지를 출력 후, 스크립트 실행 중지

 

 

 

2) 단순 접근 차단 외, 경로 변경에 대한 방지(경로 이동 문자열 필터링)에러 구문 노출 방지(추가 정보 습득에 대한 방지)를 적용하여, 보안을 강화함

PHP 에러구문 노출 여부 설정

- php.ini에서 display_errors = Off 설정 시, 에러구문 노출되지 않음

// PHP 상 문자 필터링(이스케이프 처리)
str_replace(".", "", $path);
str_replace("/","", $filename):

- httpd.conf에서 사용자 정의 에러 페이지 설정 (정보 노출 없는 에러페이지 출력)

httpd.conf 에러페이지 설정

 - 지정 디렉터리 외부로 이동할 필요가 없으므로, 경로 변경 등에대한 문자가 전달 되었을 경우, 이스케이프 처리

반응형