📜  Web 应用程序的文件上传漏洞

📅  最后修改于: 2022-05-13 01:56:28.935000             🧑  作者: Mango

Web 应用程序的文件上传漏洞

在本文中,我们将详细了解另一种攻击向量,这在这个拥有大量 Web 和移动应用程序的世界中非常重要。

文件上传漏洞:

在几乎每个 Web 应用程序中都有上传文件的功能。该文件可能是文本、视频、图像等形式。然而,许多 Web 应用程序在上传文件期间没有适当的安全检查,这导致了称为文件上传漏洞的漏洞。这个简单的漏洞导致服务器端脚本、任意代码执行、跨站点脚本、CSRF 攻击。

即使某些应用程序对上传文件进行了适当的检查,但这些安全检查仍然有绕过方法来利用此漏洞,这些绕过方法如下 -

1. 区分大小写的扩展绕过: Web/Mobile 应用程序开发者可能会根据开发者添加某些有害扩展的黑名单。但是有时开发人员忘记了他们的扩展安全检查是否区分大小写,任何人都可以通过将文件扩展名作为小写和大写字符的组合绕过安全检查来绕过安全检查。作为开发人员,检查扩展名验证始终考虑文件扩展名的大小写敏感性是一种很好的做法。示例:.PDf、.XmL、.Sh、 PHP。

2. 图像内容验证绕过:出于安全考虑,开发人员始终检查图像内容以匹配其中一种有效的文件类型。在PHP中有可能验证文件的函数,其中一个函数是 getgetimagesize() 这个函数基本上读取文件并返回大小,以防无效文件返回错误消息。有一些技术可以绕过这种保护。考虑以下上传文件的代码。

PHP


攻击者可以通过在 JPG 文件的注释部分嵌入PHP代码,然后使用 . PHP扩展,这可以轻松绕过上面代码中提到的检查。还有更多技术可用于文件验证绕过,因为开发人员在实现文件上传功能期间始终处理所有这些绕过。

使用恶意图像文件的像素泛滥:

这是文件上传漏洞下的子攻击,该攻击主要利用图像解析的方法。在执行此攻击期间,恶意用户获取具有原始尺寸的有效 JPG 或 JPEG 文件,然后攻击者通过上传此类大文件图像解析器为其分配非常大的内存,使用一些自动化工具将图像的尺寸更改为非常大的尺寸,例如 1000000 × 1000000并导致服务器崩溃或内存不足的情况。

PNG文件的恶意zTXT字段:

PNG 文件格式包含一个称为 zTXT 的部分,它允许将 zlib 压缩数据添加到 PNG 文件中。这里的技术是创建大量重复数据,例如一系列零,权重超过 70MB,然后通过 zlib 进行 DEFLATE 压缩,从而得到几 KB 的压缩数据。然后将其添加到任何常规 PNG 文件的 zTXT 部分。发送此类重复请求会导致类似的内存耗尽,就像我们在前两个示例中看到的那样。这个问题也影响了 Paperclip gem。

恶意 GIF 文件 – 帧泛滥:

该技术与之前的技术类似,使用恶意 GIF 分配大量内存,最终使用大量服务器内存。 GIF 文件包含一组不同图像帧形式的动画。我们没有翻转像素,而是添加了大量的 GIF 帧,比如 45,000-90,000。解析每一帧时,都会分配内存并最终阻塞服务器。

如何避免文件上传漏洞:

  • 始终检查文件的扩展名是否区分大小写。
  • 在上传到服务器之前过滤文件的内容。
  • 不要给上传文件的可执行权限。
  • 始终将上传的文件存储在非公共目录中。