Можно ли прочитать любой файл (не только с расширением)? .HTML) с сервера в следующем скрипте?
<?php
echo file_get_contents($_GET['display'].'.html');
?>
Я знаю про фантики (php://
, file://
и т. д.) но достигнуто не так уж и много.
Я жажду услышать все возможные векторы атаки.
Конфигурация PHP по умолчанию:
allow_url_fopen On
и давайте предположим, что версия >= 7.0
нулевой символ %00
не работает
Нет, это будет когда-либо читать только файлы, оканчивающиеся на «.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 и вернет вам несколько паролей (если повезет).