PHP文件\u获取\u内容漏洞

PHP文件\u获取\u内容漏洞,php,security,Php,Security,我正在为一个客户端评估webportal的安全性,发现了一个漏洞 这是PHP代码: echo(file_get_contents("template/data/" $_GET['id'])); 我能够成功地阅读../../../index.php、config.php等 但我只想证明这个bug比读取配置更重要。我读取了MySQL user/pass,但无法连接到它,因为它只在localhost上侦听。我读过的所有其他代码都没有任何结果。所以基本上我得到的只是一些没有什么秘密的源代码 我不能使用

我正在为一个客户端评估webportal的安全性,发现了一个漏洞

这是PHP代码:

echo(file_get_contents("template/data/" $_GET['id']));
我能够成功地阅读../../../index.php、config.php等

但我只想证明这个bug比读取配置更重要。我读取了MySQL user/pass,但无法连接到它,因为它只在localhost上侦听。我读过的所有其他代码都没有任何结果。所以基本上我得到的只是一些没有什么秘密的源代码

我不能使用php过滤器,因为它的字符串开头有“template/data/”

对于这段易受攻击的代码,还可以做些什么?有什么想法吗

我不能使用php过滤器,因为它的字符串开头有“template/data/”

您可以验证ID。这应始终通过POST和GET传递的值来完成:

$template_id = $_GET['id'];
if (strlen($template_id) < 1 || $template_id[0] === '.')
{
    echo 'Invalid template ID';
    die;
]
echo(file_get_contents("template/data/$template_id"));
$template\u id=$\u GET['id'];
if(strlen($template_id)<1 | |$template_id[0]=='。)
{
回显“无效模板ID”;
死亡
]
echo(文件获取内容(“模板/数据/$template\u id”);
我不能使用php过滤器,因为它的字符串开头有“template/data/”

您可以验证ID。这应始终通过POST和GET传递的值来完成:

$template_id = $_GET['id'];
if (strlen($template_id) < 1 || $template_id[0] === '.')
{
    echo 'Invalid template ID';
    die;
]
echo(file_get_contents("template/data/$template_id"));
$template\u id=$\u GET['id'];
if(strlen($template_id)<1 | |$template_id[0]=='。)
{
回显“无效模板ID”;
死亡
]
echo(文件获取内容(“模板/数据/$template\u id”);

如果您可以通过读取配置来获取有效的用户名和密码,那么我认为您在这一点上的两个主要漏洞是密码重用(例如,查看是否有其他地方可以登录并使用相同的密码,这可以提供更多访问权限)或社会工程。您可以使用对文件系统的访问来“证明”告诉某人你是管理员或什么的,并试图通过这种方式获得进一步的访问权限


乍一看,这似乎不是一个巨大的漏洞,但访问隐藏信息是一个巨大的漏洞。

如果您可以通过读取配置来获取有效的用户名和密码,我想说,在这一点上,您的两个主要漏洞是密码重用(例如,查看是否有其他地方可以登录并使用相同的密码,这样可以提供更多访问权限)或社会工程。您可以使用文件系统的访问权限向某人“证明”您是管理员或其他人,并尝试以这种方式获得进一步的访问权限


乍一看,这似乎不是一个巨大的漏洞,但对隐藏信息的访问是盔甲上的一个大洞。

漏洞就是它。你不能仅仅因为想让它变得更危险。但它给了你很多信息,正如你已经发现的那样

此外,在正确的环境中,它可能非常危险。门户中的每个SSRF错误都应该让您完全控制数据库;而这些错误本身通常被认为是低影响/低优先级的

检查同一台服务器上运行的其他应用程序也很有趣。vBulletin论坛?你可以泄漏
COOKIE\u SALT
,并用它签署任何恶意数据;你的数据将被传递到
unserialize
。wordpress博客?许多插件将机密存储为PHP常量,一旦你知道了这些常量你可以接管服务器


你必须向你的客户传达的最重要的信息是,即使这个bug现在泄露了信息,将来也会变得更加危险。即使他只是安装了主流软件。

漏洞就是它。你不能仅仅因为想让它更危险。但它会给你很多信息你早就知道了

此外,在正确的环境中,它可能非常危险。门户中的每个SSRF错误都应该让您完全控制数据库;而这些错误本身通常被认为是低影响/低优先级的

检查同一台服务器上运行的其他应用程序也很有趣。vBulletin论坛?你可以泄漏
COOKIE\u SALT
,并用它签署任何恶意数据;你的数据将被传递到
unserialize
。wordpress博客?许多插件将机密存储为PHP常量,一旦你知道了这些常量你可以接管服务器


你必须向你的客户传达的最重要的信息是,即使这个bug现在泄露了信息,将来也会变得更加危险。即使他只是安装了主流软件。

应用程序允许你上传文件吗?如果是,你能上传你自己的PHP文件吗(这确实对数据库做了一些有趣的事情)并执行它?如果没有,您可以在应用程序之外包含文件(例如,
。/../../../../../../../../../../../../../../../../../etc/passwd
)?a)我包含了/etc/passwd,但仍然没有真正的结果。b)我不能上传,但即使我可以,我怎么执行它呢?file_get_Content不执行PHP代码,它只是读取并以纯文本的形式输出。这可能是离题的,因为它不涉及特定的编程问题,而且可能更适合于我说这不是
file_get_Content
但是,编码器存在一个漏洞,无法正确保护用户给定的数据。问题在于编码器,而不是函数。函数完全按照它的意图运行。我投票将此问题作为离题来结束,因为此问题是一个广泛的一般性问题,不涉及特定的编码实例,而可以在.Do上提出此主题应用程序是否允许您上载文件?如果允许,您是否可以上载自己的PHP文件(该文件对数据库做了一些有趣的事情)并执行它?如果不允许,您是否可以将文件包含在应用程序之外(例如,
。/../../../../../../../../../../../etc/passwd
)?a)我包含了/etc/passwd,但仍然没有真正的结果。b)我无法上传,但即使可以,我如何执行它?文件\u获取\u内容没有