写点什么

软件测试 | web 测试—上传带有恶意文件名的文件

  • 2023-08-26
    北京
  • 本文字数:1886 字

    阅读完需:约 6 分钟

问题

除了常规 HTTP 的常规请求 - 响应接触以外,允许上传文件的应用提供了另一种攻击途径。在你上传文件时,你的浏览器会随同文件内容一起发送一个文件名。文件名本身可以为注入攻击提供一种潜在的机会。你需要测试你的应用对这种文件名的处理方式。本秘诀将演示如何将文件上传作为一种特殊的输入表单进行测试。

解决方案

这个测试可以用于任何允许用户上传文件的表达,如果这个文件之后会被下载或显示为图像,那么这个测试将特别有用。

首先,在你本地计算机上创建一个测试图像文件。将这个文件复制复制若干份,在文件名中使用各种非法或可以的字符,比如单引号,等号或者圆括号。例如,在 Windows NTFS 文件系统中,‘onerror=’alert(‘XSS’)‘a='.jpg 是个合法的文件名。微软的画图软件就足以创建这个图像,或者你可以复制并重命名现有的图像。Unix 和 Linux 文件系统可能会允许更多的特殊字符,比如管道符号(|)和斜线号。

通过应用的表单上传这个文件,并完成必要的步骤以找出文件鄂弼显示或下载的位置。在显示这个文件或者列出其下载链接的页面中,找出源代码中的文件名。

对于文件被下载的应用,你很可能会找到指向文件在服务器上的位置的链接。如果文件时图像并直接显示在应用中,你应该找到引用这个文件的图像标签。要确保链接或图位置并不是简单地回显示完全相同的文件名。理论上,URL 中会包含 ID 编号而不是实际文件名。或者,文件名中的特殊字符可以通过斜号线或某种编码进行转义处理,简单地回显完全相同的文件名可能会使你的应用容易遭受攻击。

例如,图 5-8 中所显示的基于 Web 的邮件应用通过反斜线将文件名进行转义处理。

讨论

文件上传可能会揭露出一些重要环境的漏洞。其中包括操作系统代码注入,跨站式脚本。SQL 注入或者文件处理的滥用。服务器层次的代码注入不是典型的应用层次安全所关心的事。不过,因为文件提供了一种如此简单的到服务器的路径,所以值得在这里提一下。

代码注入

通常情况下,可以通过相应头来辨别服务器操作系统,正如我们在 3.6 节中所讨论的。特别是在一些 Unix 或 Linux 文件系统重,文件名可以包含特殊字符,比如斜线号、管道符号和引号。例 5-5 中显示了使用 Mac OS X 和与之关联的 HFS 文件系统时的一些不常见和可能存在危险的文件名。相反,如果头信息揭露了应用框架或语言,那么你可以尝试一下这种语言的特殊符号。在上传文件名中包含这些特殊字符的文件时,如果应用不自动地将这些特殊字符转义或者替换掉,那么你的应用就可能存在危险。请对这些特殊字符进行实验——如果你可以让应用崩溃护着表现出不正确的行为,那么进一步的操纵很可能足以充分利用你的服务器或应用。

例 5-5:一些包含特殊字符的文件名

基于 Unix 或 Linux 的服务器的一个普通例子是文件名| 1s -al。如果未经转义或重命名就上传,那么尝试打开这个文件的服务器脚本可能反而会返回该目录的内容(类似于 DOS 中的 dir 命令)。存在要坏的多的攻击,其中包括一些会在文件系统中删除或创建文件的攻击。

对于那些在不允许文件名中出现特殊字符的操作系统(比如 Windows)中进行的测试而言,要记住,即使你无法再磁盘上以特殊字符作为文件名来保存文件,在你上传文件的时候是可以更改文件名。

跨站式脚本。即使代码注入不可能实现,如果文件名没用被正确地转义处理,跨站式脚本将仍然是个潜在的问题。在保存到磁盘之前,所有文件名都需要进行转义处理或编码成 HTML 特殊字符。最好能将整个文件名替换为一个唯一的标识符。

如果将原始的,未经更改的文件名发送到浏览器,那么下面的 HTML 输出可能会由<IMGSRC='' onerrror='alert('XSS')'变成<IMG SRC='' onerrror='alert( 'XSS')' a='jpg'/>。这是非常简单的 JavaScript 注入的一个极好的例子,而 JavaScript 注入是实现跨站式脚本攻击的一种重要方法。

SQL 注入。代码注入攻击的是运行应用的服务器或语言,跨站式脚本的目标是浏览器,而 SQL 注入则集中在恶意访问数据库。如果上传的文件存储在数据库中,而不是作为服务器上的文件,那么你应该测试的领域是 SQL 注入,而不是代码注入。

SQL 注入所需要的最常见的特殊字符是单引号。试着在文件名中添加单引号,看看在文件被保存到数据库时会发生什么。如果你的应用返回错误,那么很可能它容易遭受 SQL 注入攻击。

警告:上传和处理文件这种行为为文件名之外的其他安全问题做好了准备。所有以这种方式上传的文件都是应用的输入,应该像 HTTP 驱动的输入那样进行全面细致的测试。每种文件格式都需要根据这种格式应有的内容进行测试,不过我们可以就与文件内容有关的风险给出一份简要汇总。在将这些文件存储到你的计算机上时,要当心。你可能会引起防病毒软件的古怪行为,冻结你的计算机,或者违反公司政策。要小心!

用户头像

社区:ceshiren.com 微信:ceshiren2023 2022-08-29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
软件测试 | web测试—上传带有恶意文件名的文件_测试_测吧(北京)科技有限公司_InfoQ写作社区