目录
一、信息泄露漏洞
1、简述:
2、危害:
3、示例:
4、漏洞的产生
5、影响
6、严重程度判定
二、发现和利用信息泄露漏洞
1、模糊测试
2、使用BP扫描仪
3、使用Burp的相关工具
4、工程信息响应
三、常见来源
1、示例:
2、Web爬网程序的文件
3、目录列表
4、开发人员注释等
5、错误信息
实验1:错误消息中的信息泄漏
6、调试数据
实验2:调试页面信息泄露
7、用户帐号信息
8、通过备份文件泄露源代码
实验3:通过备份文件泄露源代码
9、不安全配置导致信息泄露
实验4:经由信息公开的认证旁路
10、版本控制历史记录
实验5:版本控制历史信息泄露
一、信息泄露漏洞
1、简述:
1、网站无意中向用户泄露敏感信息
例如:
有关其他用户的数据,如用户名或财务信息
敏感商业或业务数据
网站及其基础设施的技术细节
2、危害:
1、泄露敏感的用户或业务数据的危险是相当明显的,但泄露技术信息有时也会同样严重。尽管其中一些信息的用途有限,但它可能成为暴露其他攻击面的起点,这些攻击面可能包含其他有趣的漏洞。在尝试构建复杂、严重性高的攻击时,能够收集到的知识甚至可以提供拼图中缺失的部分。
2、有时敏感信息可能会被不小心泄露给那些只是以正常方式浏览网站的用户。然而,更常见的是,攻击者需要以意想不到的或恶意的方式与网站交互,以诱使信息泄露。然后他们会仔细研究网站的反应,试图找出有趣的行为。
3、示例:
1、显示隐藏目录的名称、结构和内容robots.txt文件或目录列表
2、通过临时备份提供源代码文件访问
3、在错误消息中明确提及数据库表名或列名
4、不必要地暴露高度敏感的信息,如信用卡详细信息
5、在源代码中硬编码API密钥、IP地址、数据库凭据等
6、通过应用程序行为的细微差别提示资源、用户名等的存在与否
4、漏洞的产生
信息泄露漏洞可能以无数种不同的方式出现,如:
1、未能从公共内容中删除内部内容。如标注中的开发人员注释有时对生产环境中的用户可见。
2、网站和相关技术的不安全配置。如未能禁用调试和诊断功能有时会为攻击者提供有用的工具,帮助他们获取敏感信息。默认配置也可能使网站易受攻击,例如,显示过于冗长的错误消息。
3、应用程序的设计和行为有缺陷。如网站在出现不同的错误状态时返回不同的响应,则攻击者还可以枚举敏感数据,例如有效的用户凭据
5、影响
1、用户数据:根据网站的目的以及攻击者能够获得的信息,信息泄露漏洞可能会产生直接和间接影响。在某些情况下,仅披露敏感信息的行为就可能对受影响方产生很大影响。如一家网店泄露顾客的信用卡详细信息,很可能会造成严重后果。
2、技术信息:泄漏技术信息,如目录结构或正在使用的第三方框架,可能几乎没有直接影响。但是,如果落入坏人之手,这可能是构建任何数量的其他攻击所需的关键信息。这种情况下的严重性取决于攻击者能够使用此信息执行的操作。
6、严重程度判定
1、有危害:虽然最终的影响可能非常严重,但只有在特定情况下,信息披露本身才是一个严重性很高的问题。在测试过程中,只有当能够证明攻击者如何利用技术信息进行有害操作时,才会对技术信息的公开感兴趣
2、存在漏洞:如一个网站使用的是一个特定的框架版本,并且该版本已经打了补丁,那么这个知识的用处就很有限。但当网站使用的是包含已知漏洞的旧版本时,此信息将变得非常重要。在这种情况下,执行破坏性攻击可能就像应用公开记录的利用漏洞攻击一样简单。
3、能利用:当发现潜在的敏感信息正在被泄露时,运用常识是非常重要的。在测试的许多网站上,很可能会以多种方式发现一些次要的技术细节。因此主要关注点应该是泄漏信息的影响和可利用性,而不仅仅是信息泄漏作为一个独立问题的存在。明显的例外是,当泄露的信息非常敏感,它本身就值得注意
二、发现和利用信息泄露漏洞
1、模糊测试
1、参数:如果发现了有趣的参数,可以尝试提交意外的数据类型和精心编制的模糊字符串,看看会产生什么效果。密切关注;尽管响应有时会显式地公开感兴趣的信息,但它们也可以更巧妙地暗示应用程序的行为。如这可能是处理请求所用时间的微小差异。即使错误消息的内容没有透露任何信息,有时遇到一个错误而不是另一个错误本身就是有用的信息。
2、工具:可以使用如Burp Intruder之类的工具自动执行此过程的大部分操作。这提供了几个好处。最值得注意的是:
1)将有效负载位置添加到参数中,并使用预先构建的模糊字符串单词列表来快速连续地测试大量不同的输入。
2)通过比较HTTP状态代码、响应时间、长度等,轻松识别响应中的差异。
3)使用grep匹配规则可以快速识别关键字的出现,例如error、invalid、SELECT、SQL等。
4)应用grep提取规则来提取和比较响应中感兴趣项的内容。
3、扩展:可以使用Logger++扩展(从BApp商店获得),除了记录来自Burp所有工具的请求和响应之外,它还定义高级过滤器来突出显示感兴趣的条目,可以帮助找到网站泄露的任何敏感数据。
2、使用BP扫描仪
1、扫描功能:BP套件专业用户有扫描仪,这为浏览时的审核项目提供了实时扫描功能,或者可以计划自动扫描以代表爬网和审核目标站点。这两种方法都会自动标记许多信息泄露漏洞。如Burp Scanner在响应中发现私钥、电子邮件地址和信用卡号等敏感信息,它将发出警报。它还将标识任何备份文件、目录列表等(一般是被动扫描,结合BP插件)
3、使用Burp的相关工具
1、Burp提供了相关工具,可以使用这些工具更轻松地在目标网站中找到感兴趣的信息,可以从上下文菜单访问相关工具-只需右键单击任何HTTP消息、Burp Proxy条目或站点地图中的项目,然后转到“相关工具”
1)检索:可以使用此工具查找选定项目中的任何表达式。可以使用各种高级搜索选项(如正则表达式搜索或否定搜索)微调结果。这对于快速查找感兴趣的特定关键字的出现(或缺失)非常有用。
2)查找注释:可以使用此工具快速提取在选定项目中找到的任何开发人员注释。它还提供了选项卡,用于即时访问找到每条评论的HTTP请求/响应周期。
3)发现内容:可以使用此工具识别未从网站可见内容链接的其他内容和功能。这对于查找不一定会自动出现在站点地图中的其他目录和文件非常有用。
4、工程信息响应
1、变换输入:当进行正常的测试工作流时,冗长的错误消息有时会泄露有趣的信息。但通过研究错误消息根据输入而变化的方式,可以更进一步。在某些情况下,将能够操纵网站,以便通过错误消息提取任意数据
2、特定场景:根据遇到的特定场景,有许多方法可以实现这一点。一个常见的示例是使应用程序逻辑尝试对特定数据项执行无效操作。如提交无效的参数值可能导致堆栈跟踪或调试响应包含有趣的详细信息,有时可能会导致错误消息泄漏响应中所需数据的值。
三、常见来源
1、示例:
Web爬网程序的文件
目录列表
开发人员评论
错误消息
调试数据
用户帐户
备份文件
不安全配置
版本控制
2、Web爬网程序的文件
1、配置文件:许多网站都在/robots. txt和/sitemap. xml中提供了文件,以帮助爬虫浏览其站点。其中,这些文件通常列出爬网程序应该跳过的特定目录,例如,因为它们可能包含敏感信息
2、手动寻找:由于这些文件通常不会从网站内部链接,因此它们可能不会立即出现在Burp的网站地图中。但是,手动导航到/robots. txt或/sitemap. xml,看看是否找到有用的内容,这是值得尝试的
3、目录列表
1、配置错误:Web服务器可以配置为自动列出没有索引页的目录的内容。这可以帮助攻击者快速识别给定路径上的资源,并直接分析和攻击这些资源。它尤其增加了目录中不希望用户访问的敏感文件(如临时文件和故障转储)的暴露。
2、访问控制:目录列表本身不一定是安全漏洞。但如果网站也未能实施适当的访问控制,以这种方式泄露敏感资源的存在和位置显然是一个问题
4、开发人员注释等
1、注释:在开发过程中,有时会向标记中添加内嵌HTML注释。这些注释通常在将更改部署到生产环境之前被删除。但注释有时可能会被忘记、错过,甚至是故意留下,因为有人没有完全意识到安全性的影响。虽然这些注释在呈现的页面上不可见,但可以使用Burp甚至浏览器的内置开发人员工具轻松访问它们。
2、危害:注释可能包含对攻击者有用的信息。如可能暗示隐藏目录的存在或提供有关应用程序逻辑的线索。
5、错误信息
1、常见情况:信息泄漏最常见的原因之一是冗长的错误消息。一般来说,应该密切注意在审核过程中遇到的所有错误消息。
2、作用:错误消息的内容可以揭示有关给定参数的预期输入或数据类型的信息。这可以通过识别可利用的参数来缩小攻击范围。甚至可以防止浪费时间尝试注入根本不起作用的有效负载。
3、详细的错误消息:可以提供有关网站正在使用的不同技术的信息。如可能显式地命名网站正在使用的模板引擎、数据库类型或服务器,沿着其版本号。此信息非常有用,因为可以轻松搜索此版本可能存在的任何记录在案的利用漏洞攻击。类似地可以检查是否存在任何可以利用的常见配置错误或危险的默认设置。正式文件中可能会强调其中一些建议。
4、第三方信息:可能还会发现该网站使用的是某种开源框架。在这种情况下,您可以研究公开的源代码,这是构建自己的攻击的宝贵资源。
5、行为特征:错误消息之间的差异还可以揭示后台发生的不同应用程序行为。观察错误消息中的差异是许多技术的关键方面,如SQL注入、用户名枚举等。
6、涉及实验:
实验1:错误消息中的信息泄漏
实验1:错误消息中的信息泄漏
信息:
输入类型错误导致的错误信息(数值型--->字符型)
part1:
点击一个商品进入
打开历史记录,GET传参product(与数据库有交互,且是数值类型)
GET /product?productId=1
part2:
将数据包发送到repeater
并将productId参数的值改为字符型
part3:
完成实验
单击"提交解答",然后输入2 2. 3. 31解答实验
6、调试数据
1、泄露原因:出于调试目的,许多网站生成自定义错误消息和日志,其中包含有关应用程序行为的大量信息。虽然此信息在开发过程中非常有用,但如果在生产环境中泄漏,它对攻击者也非常有用。
2、调试消息有时可能包含开发攻击的重要信息:
可通过用户输入操作的关键会话变量的值
后端组件的主机名和凭据
服务器上的文件名和目录名
用于加密通过客户端传输的数据的密钥
3、特殊文件:调试信息有时可能记录在单独的文件中。如果攻击者能够获得对此文件的访问权限,则它可以作为了解应用程序运行时状态的有用参考。它还可以提供一些线索,说明它们如何提供精心编制的输入来操纵应用程序状态和控制接收到的信息。
4、涉及实验:
实验2:调试页面信息泄露
实验2:调试页面信息泄露
信息:
数据包中带有注释
part1:
点击商品
HTTP历史记录中,刚刚产生的数据包
(主页包含一个HTML注释,其中包含一个名为“Debug”的链接)
part2:
选中目标后--->选择“Engagement tools”(相关工具)--->“Find comments”(搜索评论)
/cgi-bin/phpinfo. php
part3:
完成实验
…….web-security-academy.net/后面加上cgi-bin/phpinfo.php
显示了各种调试信息,包括SECRET_KEY环境变量
找到SECRET_KEY完成实验
6su4ojv0ok99zy4b2rjm9y7so520a3v3
单击“提交解答”,输入SECRET_KEY来解答实验
7、用户帐号信息
1、个人信息:用户的个人资料或帐户页面通常包含敏感信息,如用户的电子邮件地址、电话号码、API密钥等。由于用户通常只能访问自己的帐户页面,因此这本身并不代表漏洞。但某些网站包含逻辑缺陷,可能允许攻击者利用这些页面查看其他用户的数据。
如网站用户名传参
GET /user/personal-info?user=carlos
2、大多数网站都会采取措施来防止攻击者通过更改此参数来访问任意用户的帐户页面,但有时加载单个数据项的逻辑并不健壮
攻击者可能无法完全加载另一个用户的帐户页面,但是用于获取和呈现用户注册的电子邮件地址的逻辑可能无法检查用户参数是否与当前登录的用户匹配。在这种情况下,简单地更改用户参数将允许攻击者在用户自己的帐户页面上显示任意用户的电子邮件地址。
8、通过备份文件泄露源代码
1、源码泄露:获得源代码访问权限使攻击者更容易理解应用程序的行为并构造高严重性攻击。敏感数据有时甚至被硬编码在源代码中。这方面的典型示例包括用于访问后端组件的API密钥和凭据。
2、开源技术框架:如果可以识别正在使用的特定开源技术,则可以轻松访问数量有限的源代码。
3、交互式泄露:有时甚至有可能导致网站暴露自己的源代码。在规划网站时,可能会发现某些源代码文件被显式引用。不幸的是,请求它们通常不会显示代码本身。当服务器处理具有特定扩展名的文件时,例如. php语言时,它通常会执行代码,而不是简单地将其作为文本发送到客户端。但在某些情况下,可以诱使网站返回文件的内容。如文本编辑器通常在编辑原始文件时生成临时备份文件。这些临时文件通常以某种方式表示,如在文件中附加代字号(~)添加到文件名或添加不同的文件扩展名。使用备份文件扩展名请求代码文件有时会允许读取响应中的文件内容。
4、涉及实验:
实验3:通过备份文件泄露源代码
实验3:通过备份文件泄露源代码
信息:
/robots.txt文件泄露了备份文件
part1:
访问/robots.txt文件
/robots.txt文件中显示Disallow: /backup
浏览/backup
浏览到/backup/ProductTemplate.java.bak以访问源代码
part2:
完成实验
分析备份源代码中数据
连接构建器包含Postgres数据库的硬编码密码
eptvf6k7s238z52vork0s0yjspgiz1f3
单击"提交解决方案",然后输入数据库密码来解决实验室问题
(BP工具)
目标---map---选中URL--互动工具---内容搜索---启动内容发现会话
最后会发现/backup目录及其内容等相关信息
9、不安全配置导致信息泄露
1、配置不当:由于配置不当,网站有时容易受到攻击。由于第三方技术的广泛使用,这种情况尤其常见,而第三方技术的大量配置选项并不一定能被实现它们的人很好地理解。
2、调试功能:在其他情况下,开发人员可能忘记禁用生产环境中的各种调试选项。如HTTP痕量方法设计用于诊断目的。如果启用,Web服务器将响应使用痕量方法,方法是在响应中回显收到的确切请求。此行为通常是无害的,但偶尔会导致信息泄漏,例如可能由反向代理附加到请求的内部身份验证头的名称。
3、涉及实验:
实验4:经由信息公开的认证旁路
实验4:经由信息公开的认证旁路
信息:
管理界面存在一个绕过身份验证的漏洞(请获取头名称,然后使用它绕过实验的身份验证)
已有账号:wiener:peter
目标:访问管理界面并删除卡洛斯的帐户
part1:
使用已有账号登陆
后面加上/admin进行访问
响应显示,只有以管理员身份登录或从本地IP请求时,管理面板才可访问
part2:
在HTTP历史记录中,找到数据包
再次发送请求,但这次使用TRACE方法:
TRACE /admin包含IP地址的X-Custom-IP-Authorization报头会自动附加到请求中
(用于确定请求是否来自本地主机IP地址)
part3:
"Proxy" ---> "Options"--->向下找到到“搜索和替换”--->单击“添加”
将匹配条件留空,但在“置换”字段中输入:
X-Custom-IP-Authorization: 127.0.0.1(BP代理现在将添加此标头到发送的每个请求)
part4:
解决实验
(刷新刚刚的/admin页面)
浏览到主页,现在可以访问管理面板,就可以删除了
10、版本控制历史记录
1、版本控制系统:几乎所有的网站都是使用某种形式的版本控制系统开发的,比如Git。默认情况下,Git项目将其所有版本控制数据存储在名为.git。有时网站会在生产环境中公开此目录。在这种情况下,只需浏览到/.git.
2、下载:虽然手动浏览原始文件结构和内容通常是不切实际的,但有多种方法可以下载整个 .git 目录,然后,可以使用本地安装的Git打开它,以访问网站的版本控制历史记录。这可能包括包含已提交更改和其他感兴趣信息的日志。
3、有限性:可能无法访问完整的源代码,但是比较diff将允许阅读小的代码片段。与任何源代码一样,也可能在某些更改的行中发现硬编码的敏感数据
4、涉及实验:
实验5:版本控制历史信息泄露
实验5:版本控制历史信息泄露
信息:
获取其版本控制历史记录泄露敏感信息(获取管理员用户的密码)
目标:删除指定账号
part1:
浏览到/.git以显示实验室的Git版本控制数据
part2:
下载整个目录的副本(Linux主机命令)
Linux wget命令:用于在终端中下载网络文件
wget -r https://YOUR-LAB-ID.web-security-academy.net/.git/ 我的是: wget -r https://0a49009104e59083c21b2aaf00fd0029.web-security-academy.net/.git
part3:
先进入到文件夹中(cd命令,文件在kali中)
git status (用于显示工作目录和暂存区的状态)
仔细查看更改后的admin.conf文件的差异(提交用环境变量ADMIN_PASSWORD替换了硬编码的管理员密码。但硬编码密码在diff中仍然清晰可见)
消息提示:“从配置中删除管理员密码”(删除了2个admin文件)
git log命令:用于显示提交日志信息
git log
git diff 命令:显示已写入暂存区和已经被修改但尚未写入暂存区文件的区别
git diff + 文件名(第二个) 我的是: git diff 08d6da909e61ec2857f99e2c41084dc3b7493834
ADMIN_PASSWORD=h2uaz3b3f199lf0ota5g
part4:
完成实验
使用管理员账号登陆,并删除指定账号