是否可以在以下脚本中从服务器读取任何文件(不仅仅是扩展名为.html的文件)?
<?php
echo file_get_contents($_GET['display'].'.html');
?>我知道包装器(php://,file://等)但没有取得多大成就。
我很想听听所有可能的攻击信号。
PHP是默认的:allow_url_fopen On,让我们假设版本是>= 7.0,所以空字符%00不能工作。
发布于 2018-01-27 08:47:01
不,这只会读取以‘..html’结尾的文件,但这并不一定意味着它是安全的!一般来说,你越能净化和限制输入,越好。
另外,对于任何打算像这样使用file_get_contents的人来说,记住从file_get_contents提供服务时,您可以提供通常无法访问的文件--或者是由于服务器配置(例如.htaccess ),或者是文件权限。
发布于 2018-01-27 09:20:06
正如@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;
?>发布于 2018-11-14 21:33:21
作为代理人的开发:
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机器上,并返回一些密码(当幸运的时候)。
https://stackoverflow.com/questions/48474048
复制相似问题