Owasp Testing Guide v4

非预期类型文件上传测试 (OTG-BUSLOGIC-008)

综述

许多应用的业务逻辑允许通过文件上传数据或修改数据。但这个业务过程必须检查文件,并只允许特定的,“支持”的文件类型。业务逻辑到底“支持”哪些文件是应用程序/系统相关的。允许用户上传文件可能存在风险,攻击者可能上传未预期的文件类型的文件,而且这些文件可能能被执行,对应用程序造成不利的影响,如丑化站点,执行远程命令,浏览系统文件,浏览本地资源,攻击其他服务器,或利用本地漏洞进行攻击,等等。

上传非预期文件类型的文件的相关漏洞是独特的,因为这个过程本应该在不是特定类型的文件中拒绝上传。此外,区别于恶意文件上传,在大多数的错误文件类型可能本身没有“恶意”,但是保存的文件内容存在问题。举例来说,如果应用程序接受windows excel文件,如果相似的数据库文件被上传,可能这些数据也能被读取,但可能会提取到不正确的位置。

应用程序可能期待某个特定的文件类型被上传处理,如.cvs,.txt文件。应用程序可能不通过后缀(低可信的文件验证)或内容(高可信的文件验证)进行上传文件的验证。这可能导致非预期的系统或数据库结果,或给攻击者额外攻击系统/应用的渠道。

案例

假设一个图片分享应用允许用户上传.gif或.jpg图形文件。万一攻击者能够上传含有<script>标签的html文件或者php文件会如何?系统可能将这些文件从临时目录移动到最终目录,在这目录中,可能就能执行php代码。

如何测试

通用测试方法

  • 审阅项目文档,查找那些文件类型不应该被应用程序/系统支持。
  • 尝试上传这些“不支持”的文件,验证是否被拒绝。
  • 如果可以同时上传多个文件,测试是不是每个文件都被有效验证了。

特定测试方法

  • 学习应用程序的逻辑需求。
  • 准备一系列的不被支持的文件用于上传,可能包括:jsp,exe,或包含脚本的html文件。
  • 在应用程序中找到文件提交页面或文件上传页面。
  • 尝试上传一系列“不被支持”的文件,确认他们没有被成功上传。

相关测试用例

参考资料

整改措施

应用程序应该含有只允许“可接受”的文件机制,这些文件会被其他的应用程序使用或处理。一些特定的例子包括:文件类型黑白名单,在http头使用“Content-Type”,或使用文件类型识别程序。目标都是只允许特定类型的文件进入系统。