Эксплуатация file_get_contents()

Можно ли прочитать какой-либо файл (не только с расширением .html) с сервера в следующем сценарии?

<?php
echo file_get_contents($_GET['display'].'.html');
?>

Я знаю про фантики (php://, file://и т. д.) но добились не слишком многого.

Я жажду услышать все возможные векторы атаки.

Конфигурация PHP по умолчанию:allow_url_fopen Onи давайте предположим, что версия >= 7.0нулевой символ %00 не работает

3 ответа

Нет, это будет когда-либо читать только файлы, заканчивающиеся на ".html", но это не обязательно означает, что это безопасно! Как правило, чем больше вы можете дезинфицировать и ограничивать входные данные, тем лучше.

Также для тех, кто планирует использовать file_get_contents так всегда полезно помнить, что при подаче из file_get_contentsвы можете обслуживать файлы, которые обычно не доступны - либо из-за конфигурации сервера, например .htaccessили файл разрешений.

Как сказал @David, файлы будут заканчиваться только на ".html", но это не очень хорошая практика, если у вас есть html папку, и вы хотите, чтобы пользователь получал только файлы из этой папки, вы не должны этого делать, используя этот метод, хакер может получить доступ к любому .html файл на вашем сервере, а не только те, которые вы хотите, чтобы он увидел.

Мое предложение, если у вас есть определенная папка, из которой вы хотите, чтобы пользователь мог получать файлы, отсканируйте папку и проверьте имя файла.

вот пример:

<?php 

$paths = scandir('/html');

$file  = isset($_GET['display']) : $_GET['display'] ? null;

if(!$file) 
{
 die('no display provided');
}

$html = '';

foreach($paths as $path) {

   if($path !== '.' && $path !== '..' && $path === $file.'.html') {
     $html = file_get_contents($path);
   }

}


echo $html;

?>

Exploidale в качестве прокси:

http://example.com/script.php?display=https://hackme.com/passwords%3Extension%3D

echo file_get_contents("https://hackme.com/passwords?Extension=.html")

Ваш IP будет зарегистрирован на компьютере hackme.com и вернет вам несколько паролей (если повезет).

Другие вопросы по тегам