这个文件上传攻击的下一步是什么?

信息安全 Web应用程序 应用安全 iis 上传文件
2021-09-04 21:19:28

昨天我发现有人通过我的 asp.net MVC 应用程序的“上传您的个人资料图片”表单将此 PHP 代码作为 .jpg 文件上传到我的服务器。我相信攻击失败的原因有很多(图像被赋予随机文件名,然后调整大小,并且它们存储在非执行目录中)。该文件是剩余的,因为如果调整大小失败,我无法清理临时文件,我现在已经修复了。

但让我担心的是,我不明白这次攻击的下一步是什么……假设他成功地将一个包含恶意 PHP 代码的 .jpg 文件上传到我的 Windows/IIS 服务器,他知道文件的 URL。怎么办?他需要让 IIS 将该 .jpg 文件解释为 PHP 代码而不是图像,对吗?他的计划可能是什么来实现这一目标?

我唯一能想到的是如果它是一个 apache 服务器并且 .php 文件被过滤掉但 .htaccess 文件没有被过滤掉,他也许可以管理它。是否有任何等效的方法可能在 IIS 中有效?

3个回答

一种可能的途径是尝试以某种方式将其包含在内。许多附加框架可以运行任意 PHP 代码文件。如果攻击者能够找到这样的附加框架,他们可以给它文件的路径,并且无论文件扩展名如何,它都会作为 PHP 执行。

这是你在那里找到的一个有趣的脚本。我注意到的一件事是它显然会提供图像——如果你注册了 mod-php 来处理 .jpg 文件:

在此处输入图像描述

我不知道这张照片的用途是什么,但这是一个有趣的功能。

无论如何,该脚本似乎是一个远程外壳。我几乎在每一点上都强烈反对 Manishearth。AJ Henderson 有一个更好的答案:无论文件扩展名是什么或存储在哪里,如果被告知,PHP 都会尝试执行它。如果攻击者可以控制包含文件的路径,那么攻击者就可以执行该脚本。

只要您可以控制文件名及其存储位置1,这不是问题。他们基本上可以尝试替换现有的 php 文件,这样下次运行时,他们的代码就会运行。

他们可以尝试的另一个技巧是强制您的服务器运行该文件。PHP 以黑客无法通过普通 HTTP 获得的权限运行。攻击者可以上传foo.php,您的服务器会将其移动到images/foo.php. 现在,攻击者访问了该页面。这可以通过控制文件名(再次)和/或.htaccess在图像目录中设置禁用 PHP 来防止。

run.php?name=abc.php当您的站点采用访问表单页面将显示或包含“abc.php”的表单时,您需要特别注意这一点。在这种情况下,请保持对GET参数的限制,以便只能运行某些文件。这适用于应用程序的任何部分,其中包含或运行基于用户输入的一些 PHP 文件。仔细检查这些并确保用户不能强制系统运行您想要运行的文件之外的文件。

1 这包括阻止他们将文件另存为../../foo.jpg或(不寒而栗)../index.php