LFI 취약점(Local File Inclusion)

여기서 LFI 취약점이란 웹앱이 파일 경로를 사용자 입력으로 받아서 서버의 파일을 읽어버리는 경우, 공격자가 그 입력을 조작해서 서버 안의 임의 파일을 읽게 만드는 취약점이다. 즉, 웹 사이트가 내 컴퓨터(서버) 안의 파일을 몰래 열어보게 되는 취약점이다.

예를 들어 웹사이트에 "페이지 보기"라는 기능이 있다라고 했을 때 사용자가 page=notice 를 넣으면 => 서버가 notice.php를 보여준다.

근데 개발자가 실수로 include($GET["page"]); 라고 만들면 이건 사용자가 적는대로 파일을 열어라 라는 말과 비슷하다.

그래서 공격자가 만약 아와 같이 입력하면 서버가 원래 보여주면 안되는 내부 파일까지 열어버릴 수 있다.

PHP Wrapper

파일 경로처럼 보이지만, 사실은 특수한 기능을 가진 비밀 통로라고 생각하면 된다.

원래 include("a.php")는 "a.php 파일 열기"를 뜻한다.

php wrapper의 몇 가지 예시를 들어보자.

이제 문제 파일 속 코드들을 하나씩 살펴보자.

1. index.php

전체 페이지의 틀이다. 상단 네비게이션(홈, 리스트, 뷰 링크)과 공통 레이아웃을 만든 뒤, 주소의 ?page= ...값에 따라 그에 맞는 php 파일을 불러와 본문에 끼워 넣는다.