【问题标题】:PHP file renamed to JPG and uploaded to server a threat?PHP文件重命名为JPG并上传到服务器有威胁吗?
【发布时间】:2015-09-16 18:41:27
【问题描述】:

我们有一台运行 WordPress 和 Magento 的服务器遭到入侵,并且在同一台服务器上的大约 5 个域上运行它们。

黑客一直在通过数百个位置的所有文件系统上传恶意脚本。在这个阶段简直是一场噩梦,我仍然无法找到切入点。

我刚刚注意到我们的 AJAX 图像上传字段之一允许我将 PHP 文件重命名为 .jpg 并将文件上传到服务器。

当我在浏览器中访问 PHP .jpg 文件时,会出现损坏的图像。

所以我不确定黑客是否能够在此处上传 PHP 文件并将其作为 PHP 文件访问,或者它是否会像在浏览器中为我所做的那样将其作为损坏的图像提供?

您对这可能造成多大的安全威胁有任何想法吗?这可能是我获得黑客初始访问权限的切入点吗?或者当我在浏览器中加载时它用作损坏的图像而不是处理 PHP 文件这一事实是否意味着它有点安全?

感谢您的帮助,谢谢

【问题讨论】:

  • 除非你告诉你的服务器 .jpg 文件应该通过 php 运行,否则它是完全无害的。请记住,没有“php 脚本”之类的东西。其中只有带有 php 代码块的文件。如果文件永远不会靠近 php 解释器,则 php 代码将保持其真实状态:纯文本。
  • 如果文件名为.jpg,服务器将不会运行其中的PHP代码。
  • 你得到一个损坏的图像,因为它只是将 PHP 源代码发送到浏览器,这不是一个有效的 JPEG 文件。
  • 好吧,如果您遇到类似 sql 注入漏洞或用户提供的输入以某种方式在命令中使用的其他问题,那么当然可以以某种方式包含该文件。然后那里的命令将被执行。但通常对 wordpress 的攻击要原始得多。这一切都始于代码本身对代码本身是可写的,这就是典型的 wordpress 安装的样子......

标签: php linux security ubuntu


【解决方案1】:

如果没有实际检查那里的内容,很难说黑客是否做了某事。

关于如何保护未来的图像上传,我建议在 PHP http://php.net/manual/en/function.finfo-file.php 中使用类似 finfo 的函数来查找文件是否属于任何已批准的 mime 类型,顺便说一句,您应该仅限于有限的类型图像类型。

此外,您应该考虑不允许使用原始图像,而是允许使用它的调整版本,以避免用户最终下载巨大的图像或类似的东西。

答案:
通常(取决于 Web 服务器配置)如果 PHP 文件具有不同的扩展名,则没有人可以执行它,他们可以上传它,但他们不能运行它,至少在任何常见配置中是这样。

因此,理论上您不必担心具体的事情,但要担心有人花时间试图入侵您,这意味着您应该花时间保护网站和服务器。

我建议您搜索有关如何保护您的特定服务器和配置的文章,并确保您将软件、操作系统等更新到最新的安全更新。

【讨论】:

  • 这意味着如何回答这个问题?这只是一些一般性的提示......
  • 在那里,我强调了实际答案在哪里。但总的来说,我试图理解完整的问题,并尝试不仅回答问题,而且回答在这种情况下如何处理他自己。我想那我应该更多地限制在这个问题上。
  • 抱歉,您在问题中标记为“答案”的内容是错误的。我同意“通常”这样的文件不应被解释为代码。但是这样一个笼统的陈述有什么价值呢?在某些情况下可能会发生这种情况。例如,请参阅我上面的评论。不太可能,不太常见,但这不是重点。有可能的。所以你的答案是错误的。对不起。
【解决方案2】:

能够上传带有 .jpeg 文件扩展名但 PHP 内容的文件本身并不是漏洞。然而:

    1234563 /li>
  1. 当您让用户上传内容以使用与站点相同的主机名提供服务时,跨站点脚本还会出现其他问题;

  2. 可能值得使用getimagesize() 之类的方式检查上传的文件,以确保您拥有 JPEG 文件和非可笑的尺寸,但考虑到“变色龙”文件可能会被解释为多个不同的文件类型这不一定是无懈可击的,所以这充其量是一种“纵深防御”措施。

让网络服务器以 PHP 代码的形式运行 .jpeg 文件可能通过以下方式发生:

  1. 能够写入服务器配置以将 .jpeg 与 PHP 处理程序相关联。通常会发生这种情况,因为另一个易受攻击的文件上传功能允许攻击者在同一目录中写入 .htaccess 文件以供 Apache 获取。

  2. 具有本地文件包含安全漏洞的 PHP 脚本。通常这将是这样的代码:

    include("include/$variable");

攻击者可以将内容获取到$variable,以指向something.jpeg。一般来说,include/require 不应该与变量一起使用,除非这些变量被明确限制为几个已知良好的值。

如果您将大量恶意页面上传到您的服务器,另一种可能的可能性是您的服务器登录被盗用。

【讨论】:

    猜你喜欢
    • 2014-12-19
    • 1970-01-01
    • 2012-06-19
    相关资源
    最近更新 更多