Chapter07-信息披漏
1.信息披露(敏感信息暴露)
学会发现和利用泄露的信息,是一项重要的技能。
1.1 什么是information disclosure
信息泄露,又称信息泄露,是指网站无意中向用户泄露敏感信息。根据上下文的不同,网站可能会向潜在的攻击者泄露各种信息,如:
- 其他用户的数据,如用户名或财务信息
- 敏感的商业或企业数据
- 关于网站和底层架构(infrastructure)的技术细节
泄露敏感用户或业务数据的危险相当明显,但泄露技术信息有时也同样严重。尽管其中一些信息的用途有限,但它可能是扩大攻击面的起点,其中可能包含其他具有破坏性的漏洞。
这些零散的信息泄露,可能正是攻击者构建复杂、高危攻击链的拼图。
常规的网站交互中,偶尔会因为网站疏忽导致敏感信息泄露。更常见的情况是,攻击者通过与网站进行意想不到的交互来诱导信息泄露,分析网站的响应,并挖掘潜在漏洞。
1.2 信息泄露的例子
一些常见的信息泄露案例;
- robots.txt文件或目录列表,揭示隐藏目录的名称、结构和内容
- 临时备份暴露源代码
- 报错消息明确提到数据库表名或列名
- 不必要地暴露高度敏感信息,如银行卡信息
- 在源代码中硬编码(明文写入源码)API密钥、IP地址、数据库凭据等
- 通过Web网站行为上的细微差别来暗示资源、用户名是否存在
一切的响应包都有可能包含网站信息泄露
1.3 信息泄露是如何产生的
敏感信息泄露可能以无数种不同的方式出现,但大致可以分为以下几种。
- 未能从公共内容中删除内部内容。 例如,在生产环境中,用户有时可以看到标记中的开发人员注释。
- 网站及相关技术配置不安全。例如,未能禁用调试和诊断功能有时会为攻击者提供有用的工具,帮助他们获取敏感信息。默认配置也会让网站容易受到攻击,例如,显示过于冗长的错误消息。
- Web应用程序的设计和行为有缺陷。例如,如果一个网站在不同的错误状态下返回不同的响应,这也允许攻击者枚举敏感数据,例如有效的用户凭据。
1.4 信息泄露的危害
信息泄露的危害,取决于攻击者能够利用信息做什么。只有在特定情况下,信息泄露才是一个严重的问题。
通常,只有在证明攻击者能够利用技术信息进行有害操作时,技术信息的泄露才会引起人们的兴趣。例如,已知一个网站使用的是一个特定的框架版本,如果该版本已经打了补丁,那么它的危害就有限了。然而,当网站使用包含已知漏洞的旧版本,并且没有修复漏洞时,实施破坏性攻击就很容易了。
在许多网站的测试上,都可能以各种方式发现一些小的技术细节。因此,您的主要关注点应该是泄漏信息的影响和可利用性,而不仅仅是作为一个独立问题存在的信息披露。如果泄露的是敏感信息,那么就需要引起注意了。
2.如何检测信息泄露
敏感信息可能在各种地方泄露,应该避免关注某个特定的漏洞,“扩展视野”。
2.1 Fuzzing
模糊测试,通过自动化或半自动化方式,向目标输入非预期、畸形或随机数据,以探测潜在漏洞。
(1)分析所有用户可控输入点(url、POST表单、headers)定位感兴趣的参数
(2)输入测试用例
可以通过HTTP状态码、响应时间、响应包长度等,进行响应分析。
可以使用自动化的Fuzzing测试工具,如ffuf、sqlmap等。
Burpsuite的intruder能够自动化大部分过程:快速持续测试大量输入;轻松识别响应差异;使用grep match 响应规则自动标记特定关键字的响应包;grep extract 数据提取,从响应包中提取特定数据,如Token等
burpsuite还有一些扩展,有助于过滤感兴趣的条目。
burpsuite Scanner,实时扫描站点,并提醒邮件、私钥、号码等敏感信息
此外,右键请求、响应包可以使用engagement tools快速找到感兴趣的信息。
3.信息泄露的常见来源
- Files for web crawlers,许多网站提供 /robots.txt 和 /sitemap.xml(少见但是可尝试) 文件来帮助爬虫导航他们的网站。例如,这些文件通常列出爬虫应该跳过的特定目录,因为它们可能包含敏感信息。
- Directory listings,如果网站没有实施适当的访问控制,攻击者可能通过Fuzz未授权访问到敏感API或目录。
- Developer comments,开发过程中的注释,在部署到生产环境时没有清除,有时会包含敏感目录信息或网站代码逻辑。
- Error messages,信息泄露最常见的原因之一是过于详细的错误消息。应该密切关注测试过程中的所有错误消息。错误消息可能提供的消息:
(1)参数期望的输入或数据类型,缩小攻击范围;
(2)网站使用的技术、组件,如数据库类型、模板引擎等,有助于查找已知漏洞以及是否存在可以利用的常见配置错误或危险的默认设置(官方文档);
(3)网站使用的开源框架,可以搜索已知漏洞,或根据开源代码审计出自己的宝贵攻击资源。
观察错误消息的差异是许多测试的一个重要方面,例如SQL注入、用户名枚举等。 - Debugging data,出于调试目的,许多网站会生成自定义错误消息和日志。调试信息可能包括:
(1)用户可控的关键会话变量的值,如role=admin
(2)后端组件的主机名和凭据,如Access Key
(3)服务器上的文件和目录名
(4)客户端数据传输的加密密钥泄露
调试信息有时可能记录在单独的文件中。如果攻击者能够获得该文件的访问权限,那么它可以作为了解应用程序运行时状态的有用参考。 - User account pages,一些网站包含逻辑缺陷,可能允许攻击者利用这些页面来查看其他用户的数据。攻击者可能无法完整加载其他用户的账户页面,但例如,获取和显示用户注册电子邮件地址的逻辑可能不会检查用户参数是否与当前登录用户匹配。在这种情况下,攻击者只需更改用户参数,就能在其自己的账户页面上显示任意用户的电子邮件地址。
- Backup files,开源技术可以轻松访问源码,使用备份文件扩展名请求代码文件有时可以获取文件内容。例如,文本编辑器通常在编辑原始文件时生成临时备份文件。这些临时文件通常以某种方式指定,例如在文件名后面添加波浪线( ~ )或添加不同的文件扩展名。例如vim的备份文件。
- Insecure configuration,网站有时由于配置不当而容易受到攻击。由于广泛使用第三方组件,这种情况尤其常见,开发人员不一定能很好地理解大量配置选项。如,TRACE方法未关闭,反向代理时可能会将内部身份验证header的名称通过响应包返回。
- Version control history,**几乎所有的网站都是以某种形式的版本控制系统开发的,如Git。**默认情况下,Git项目的版本控制数据存储在.git文件夹中。如果网站不小心泄露了这个目录,可以通过/.git访问,并下载整个目录。能阅读一小段版本更新的代码就有可能发现敏感数据。
Linux下载指令
wget -r path/.git
,下载后拉入Windows打开,会有不属于当前用户的问题,重建一个.git文件将内容转移过来即可。git可以看到过去的提交,可能看到之前硬编码的密码。
演示:
(1)burpsuite的scanner,自动扫描到了cgi-bin目录,也可以通过intruder功能进行目录扫描。
(2)在传参值插入引号,触发报错信息
(3)生产环境99%的网站都禁用了TRACE,但是这题可以看一下
使用TRACE方法,发现有个自定义请求头,识别来源IP
伪造IP成功登录内网网页,这个可以视为TRACE(配置不当)导致的信息泄露
4.如何防范敏感信息泄露
完全防止信息泄露是非常棘手的,因为它可能以各种各样的方式发生。
可以遵循一些通用的最佳实践来将这类漏洞的风险降到最低。
(1)确保参与网站开发的每个人充分意识到哪些信息是敏感的,有助于在一般情况下更安全地处理敏感信息
(2)作为QA(Quality Assurance)的一部分,审计全部的代码,防止潜在的信息泄露。
代码审计的目标:①硬编码的凭据;②内部系统路径或IP地址;③调试日志的敏感数据;④注释中的技术细节(如未公开的API端点)
(3)使用通用的错误消息,而不是提供具体的报错信息。
(4)在生产环境中禁用全部的调试、诊断功能
(5)确保完全了解使用的第三方技术的配置。关闭不需要的功能和设置