상세 컨텐츠

본문 제목

DVWA : File Inclusion - Impossible level

Vulnerability Assessment/Web Application

by DarkSoul.Story 2025. 1. 4. 16:28

본문

반응형

[ 환경 ]

DVWA v1.9
Burp Suite Community Edition v2024.11.2

1. Source code analysis

[그림 1] Impossible level Source code

입력값 검증

if( $file != "include.php" && $file != "file1.php" && $file != "file2.php" && $file != "file3.php" ) {
  • $file 값이 허용된 파일 이름(include.php, file1.php, file2.php, file3.php)이 아닌 경우 실행을 차단 

에러 메시지 출력

echo "ERROR: File not found!";
exit;
  • 유효하지 않은 파일 요청이 들어오면 "ERROR: File not found!" 메시지를 출력하고 실행을 중단(exit)한다.

허용된 파일 이름을 명시적으로 지정하여 제한다며, 예기치 않은 파일 요청을 방지한다. 하지만 새로운 파일을 허용하려면 조건문에 파일 이름을 추가해야 하므로 관리가 어려운점이 존재한다. 또한 파일이 실제로 존재하는지 확인하지 않고, 허용된 파일 목록을 조건문으로 관리하기 때문에 코드가 길어질 가능성이 있다. 

2. Source code improvements

아래는 앞서 살펴본 코드를 개선한 코드의 예제로 보안 강화와 기능 개선을 목표로 기존 코드의 한계를 극복하고, 더욱 안전한 구현을 제공한다. 

<?php

$allowed_files = ['include.php', 'file1.php', 'file2.php', 'file3.php'];

$file = $_GET['page'] ?? 'include.php'; // 기본값 설정


if (in_array($file, $allowed_files)) {
    $file_path = realpath('/var/www/html/pages/' . $file);

    if ($file_path && strpos($file_path, '/var/www/html/pages/') === 0 && file_exists($file_path)) {
        include($file_path);
    } else {
        echo "ERROR: File not found!";
    }
} else {
    echo "ERROR: Invalid file!";
    exit;
}

?>
  • Whitelist 관리 : $allowed_files 배열에 허용된 파일 목록을 저장하여 관리가 용이하며, 새로운 파일 추가 시 배열에만 항목 추가
  • 기본값 설정 : 사용자가 page 파라미터를 전달하지 않으면 기본값(include.php)을 사용
  • 경로 검증 : realpath()로 파일의 실제 경로를 확인하며, 요청된 파일이 지정된 디렉토리(/var/www/html/pages/) 내에 있는지 확인
  • 파일 존재 여부 확인 : file_exists()로 파일이 실제로 존재하는지 확인
반응형

관련글 더보기