
여기서 LFI 취약점이란 웹앱이 파일 경로를 사용자 입력으로 받아서 서버의 파일을 읽어버리는 경우, 공격자가 그 입력을 조작해서 서버 안의 임의 파일을 읽게 만드는 취약점이다. 즉, 웹 사이트가 내 컴퓨터(서버) 안의 파일을 몰래 열어보게 되는 취약점이다.
예를 들어 웹사이트에 "페이지 보기"라는 기능이 있다라고 했을 때 사용자가 page=notice 를 넣으면 => 서버가 notice.php를 보여준다.
근데 개발자가 실수로 include($GET["page"]); 라고 만들면 이건 사용자가 적는대로 파일을 열어라 라는 말과 비슷하다.
그래서 공격자가 만약 아와 같이 입력하면 서버가 원래 보여주면 안되는 내부 파일까지 열어버릴 수 있다.
파일 경로처럼 보이지만, 사실은 특수한 기능을 가진 비밀 통로라고 생각하면 된다.
원래 include("a.php")는 "a.php 파일 열기"를 뜻한다.
php wrapper의 몇 가지 예시를 들어보자.
이제 문제 파일 속 코드들을 하나씩 살펴보자.
1. index.php

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