【问题标题】:Can an .EXE file be executed on its own if it is saved in a different format as .pdf or .csv?如果 .EXE 文件以不同的格式保存为 .pdf 或 .csv,是否可以自行执行?
【发布时间】:2019-08-20 07:14:23
【问题描述】:

我们有一个 MVC 应用程序,其中有一些模块,用户可以在其中上传文件,例如 [.wav,Pdf,.csv]。

因此,我正在努力通过不允许任何有害文件(如 .exe)来确保应用程序的安全。为此,我正在检查带有扩展名的传入文件,如果它们是 3 种文件类型 [.wav,pdf,.csv] 中的任何一种,我允许它保存在文件系统中,如果它是 .exe 我不是。

因此,在这种情况下,有人可能会将 .exe 文件另存为 .csv 并通过我设置的过滤器来检查传入的扩展名,然后该文件会保存在应用服务器中。如果他们这样做,即使扩展名不是.exe,这个.exe文件是否可以在应用服务器中自行执行?

【问题讨论】:

  • 您可能想研究 Windows 如何“打开”文件。请参阅CreateProcessShellExecuteEx,与其说是他们的编程用法,不如说是他们提供的所有机会和复杂性。考虑 .cpl 和 .msc 等扩展名。这应该会导致您不将系统的文件系统用于用户数据存储系统。

标签: security


【解决方案1】:

不要检查文件扩展名,而是从文件开头读取魔法。 .exe文件都以2个字节开头,(ascii)mz/(hex)4D 5A,表示文件为DOS MZ executable(exe)。即使重命名文件,这个魔法也不会改变。

解决方案: 读取文件的前2个字节,如果等于4D 5A,则阻塞它。或者更好的是,阅读文件的魔力,看看它是wavpdf 还是csv 文件。文件魔法的完整(ish)列表可在https://en.wikipedia.org/wiki/List_of_file_signatures

【讨论】:

  • 还有一些库可以通过检查魔术字节为您提供真正的 mime 类型。依赖白名单而不是黑名单(即只允许来自已知良好列表的类型,而不是不允许来自黑名单的类型)。
  • 你会得到一个 CSV 文件的误报,其中数据的前两个字符是“mz”——如果你要使用启发式,它们应该更健壮一些,用户是上传攻击弱者数据的虫子!
  • @Rob 哦,是的,真的……我没想到。
猜你喜欢
  • 2019-09-08
  • 2021-02-11
  • 1970-01-01
  • 2015-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-11
  • 2022-08-23
相关资源
最近更新 更多