测试敏感信息的文件扩展名处理
ID |
---|
WSTG-CONF-03 |
总结
Web 服务器通常使用文件扩展名来确定必须使用哪些技术、语言和插件来满足 Web 请求。虽然此行为与 RFC 和 Web 标准一致,但使用标准文件扩展名可为渗透测试人员提供有关 Web 设备中使用的基础技术的有用信息,并大大简化了确定要用于特定技术的攻击场景的任务。此外,Web 服务器的错误配置很容易泄露有关访问凭据的机密信息。
文件扩展名检查通常用于在将文件上传到服务器之前对其进行验证。不受限制的文件上传可能会导致不可预见的结果,因为内容可能不是预期的内容,或者由于意外的操作系统文件名处理。
了解 Web 服务器如何处理对具有不同扩展名的文件的请求,可以根据访问的文件类型阐明服务器行为。例如,它可以帮助了解哪些文件扩展名以文本或纯文本形式返回,哪些文件扩展名以文本或纯文本形式返回,哪些文件扩展名导致服务器端执行。后者表示 Web 服务器或应用程序服务器使用的技术、语言或插件。此信息可以提供有关 Web 应用程序设计方式的更多见解。例如,虽然“.pl”扩展名通常与服务器端Perl支持相关联,但文件扩展名本身可能会产生误导,并不完全表示底层技术。以用Perl编写的服务器端资源为例,这些资源可能会被重命名以掩盖Perl的使用。有关识别服务器端技术和组件的更多信息,请参阅下一节“Web 服务器组件”。
测试目标
- 暴力破解可能包含原始数据(如脚本、凭据等)的敏感文件扩展名。
- 验证已设置的规则是否存在系统框架绕过
如何测试
强制浏览
提交具有不同文件扩展名的请求,并验证它们的处理方式。验证应基于每个 Web 目录。验证允许脚本执行的目录。Web 服务器目录可以通过查找已知目录存在的扫描工具来识别。此外,镜像站点结构有助于测试人员重建应用程序提供的目录树。
如果 Web 应用程序体系结构是负载平衡的,则评估所有 Web 服务器非常重要。此任务的难易程度取决于平衡基础结构的配置。在具有冗余组件的基础结构中,单个 Web 或应用程序服务器的配置可能会略有不同。如果 Web 体系结构采用异构技术(想想负载平衡配置中的一组 IIS 和 Apache Web 服务器,这可能会在它们之间引入轻微的不对称行为,并且可能出现不同的漏洞),则可能会发生这种情况。
例
测试人员已识别出名为 connection.inc
的文件是否存在。尝试直接访问它会返回其内容,它们是:
<?
mysql_connect("127.0.0.1", "root", "password")
or die("Could not connect");
?>
测试人员确定MySQL DBMS后端的存在以及Web应用程序用于访问它的弱凭据。
Web 服务器不应返回以下文件扩展名,因为它们与可能包含敏感信息的文件或没有正当理由的文件有关。
.asa
.inc
.config
以下文件扩展名与访问时由浏览器显示或下载的文件有关。因此,必须检查具有这些扩展名的文件,以验证它们确实应该被提供(而不是剩菜),并且它们不包含敏感信息。
.zip
,.tar
,.gz
,.tgz
,.rar
, 等(压缩)存档文件.java
: No reason to provide access to Java source files(没有理由提供对 Java 源文件的访问).txt
: Text files.pdf
: PDF documents.docx
,.rtf
,.xlsx
,.pptx
, etc.: Office documents.bak
,.old
和以及其他指示备份文件的扩展名(例如:~
用于 Emacs 备份文件)
上面给出的列表仅详细介绍了几个示例,因为文件扩展名太多,无法在此处全面处理。请参阅 FILExt 以获取更全面的扩展数据库。
为了识别具有给定扩展名的文件,可以采用多种技术。这些技术可以包括使用漏洞扫描程序、爬取和镜像工具以及查询搜索引擎(请参阅测试: 爬虫和谷歌搜索)。对应用程序的手动检查也可能是有益的,因为它克服了自动爬取的限制。另请参阅测试 旧的、备份的和未引用的文件 ,其中涉及与“忘记”文件相关的安全问题。
文件上传
Windows 8.3 旧版文件处理有时可用于破坏文件上载筛选器。
使用示例:
file.phtml
作为 PHP 代码进行处理。FILE~1.PHT
提供,但不由 PHP ISAPI 处理程序处理shell.phPWND
可以上传。SHELL~1.PHP
将由操作系统外壳扩展并返回,然后由 PHP ISAPI 处理程序处理。
灰盒测试
文件扩展名处理的白盒测试涉及检查 Web 应用程序体系结构中的服务器配置并验证提供不同文件扩展名的规则。
如果 Web 应用程序依赖于负载平衡的异类基础结构,请确定这是否会引入不同的行为。
工具
漏洞扫描程序(如 Nessus 和 Nikto)会检查是否存在已知的 Web 目录。它们可能允许测试人员下载站点结构,这在尝试确定 Web 目录的配置以及如何提供单个文件扩展名时很有帮助。可用于此目的的其他工具包括: