这是burpsuite官网的免费优质实验.
实验室地址 https://portswigger.net/web-security/information-disclosure
仅为本人学习记录文章
简单介绍
信息泄露指网站无意向用户泄露敏感信息.可能包括以下内容:
- 有关其他用户私密数据的,财务信息,个人身份信息等
- 敏感的商业数据
- 有关网站技术细节,架构,如源代码等
这种泄露可能是不慎泄露给浏览该网站信息用户的,也有可能是攻击者通过恶意的交互从网站获得数据.
一些敏感信息泄露的示例:
- 通过robots.txt泄露网站隐藏目录,文件.或者站点结构
- 网站站点的备份文件未删除导致的泄露,可能会泄露网站源代码
- 没有正确处理网站的一些错误消息,在错误消息中泄露数据库表,字段等
- 一些高度敏感的用户信息,银行账号等泄露
- 在源代码中泄露数据库账号密码,等等(GitHub)
- 网站某些程序的细微差别提示是否存在某些资源,用户名
敏感信息泄露的产生原因可大致归类如下几点:
- 未删除公开内容中的敏感信息.(如开发人员的注释)
- 网站不安全的配置(如,报错信息过于具体,网站开发时留下的调试网站功能)
- 应用程序设计上的缺陷
如何防止信息泄露?
-
网站开发人员要明确哪些信息是敏感信息
-
针对错误消息正确处理
-
检查网站开发环境中的任何调试或者诊断功能是否禁用
-
了解站点所使用的第三方技术的配置设置与安全隐患.花时间禁用实际上不需要的任何功能和设置
下面将介绍一些关于敏感信息泄露挖掘的思路
爬虫文件
像robots.txt, sitemap.xml
这些文件会列出特定目录不让爬虫爬取,因为它们可能包含敏感信息
在burpsuite的sitemap里面可能看不到它们,需要手动测试一下,看是否存在有用的东西
目录信息泄露
有的网站因为不当的配置可能暴露了网站目录
(图片来源于网络)
可能泄露一些开发者不希望用户访问的文件
泄露敏感资源的存在与位置
注释或js文件
开发过程中,开发者可能在HTML中写有关敏感信息的注释.
部署到生成文件前,通常会删除.但是可能有时会因为有些人没有安全意识而忘记.
也有可能是js代码会保留一些敏感信息
实验:
在这个实验中,我们查看HTML源代码.发现下面的js代码
如果访问用户是管理员,将在页面上增加一个超链接 Admin panel 在. /admin-f6zfiz
如果不看源代码,通过目录爆破很难发现.
同时,该网站的访问控制也没有做好,我们可以轻松进入控制页面
删除Carlos用户
错误消息
信息泄露的最常见原因之一是冗长的错误消息。
您应密切注意测试期间遇到的所有错误消息。
错误消息可能提醒测试人员应该输入什么消息或者什么数据类型的消息,这可以帮助我们识别可利用的参数来缩小攻击范围
详细的错误消息还可以提供有关网站使用的技术信息 .如数据库类型,模板类型,服务器版本号等.
您可能还会发现该网站正在使用某种开源框架 , 在这种情况下,您可以下载研究源代码,可能有意外收获
错误消息对SQL注入,用户名枚举等都很关键.
实验:
我们尝试修改id
引发报错可以发现该站点使用了Apache Struts 2 2.3.31
搜索可以发现这个版本存在一个Struts 2 远程代码执行漏洞.
但在这个实验不用尝试,点击 Submit solution 将发现填进去即可过关
调试数据
出于调试目的,许多网站会生成自定义错误消息和日志,其中包含有关应用程序行为的大量信息
尽管此信息在开发过程中很有用,但如果在生产环境中泄漏,则对攻击者也非常有用。
调试消息有时可能包含用于发起攻击的重要信息,包括 :
- 可以通过用户输入操作的关键会话变量的值
- web中间件的主机名和登录凭据
- 服务器上的文件和目录名称
- 用于加密通过客户端传输的数据的密钥
调试信息有时可能会记录在单独的文件中。
实验:
在这个实验里,通过burpsuite的sitemap就可以发现,泄露了phpinfo页面
phpinfo就泄露了很多信息,包括 SECRET_KEY
这个值是某些加密的盐值(在不安全的反序列化一节中有用到)
在这提交secret_key值就可以过关
越权访问
用户的个人资料或“我的帐户”页面通常包含敏感信息 , 例如用户的电子邮件地址,电话号码,API密钥等。
由于用户通常只能访问自己的帐户页面,因此这本身并不表示漏洞。但是,某些网站包含逻辑缺陷,这些缺陷可能使攻击者可以利用这些页面来查看其他用户的数据。
例如,考虑一个基于user参数确定要加载哪个用户的帐户页面的网站。
GET /user/personal-info?user=carlos
实验:
在账户页面有个人的API Key
但是下面是my-account?id=wiener
尝试修改为carlos
burp抓包修改
之前的wiener的API key NczbKj9I0GfmU6Q9KnA5FLpKfckLQaxU
如果直接访问会重定向,下面的sYtJ1hbZ0t9Vv884PoCQeQRE3nRTzdMa就是carlos的API key
直接提交carlos的API key就ok
备份文件
获得源代码访问权限使攻击者更容易理解应用程序的行为并构造高严重性攻击。
敏感数据有时甚至被写在在源代码中,如数据库IP,密码(程序员提交到GitHub的开源项目)
有时候,网站自身可能由于某些原因,泄露其源代码:
比如用Vim编程,在修改文件后 系统会自动生成一个带~的备份文件 , 某些情况下可以对其下载进行查看;
还有一些文件备份会在文件后面加上.bak
如下面的两种情况:
泄露了目录信息
以及备份文件信息
这些都可以通过burpsuite的爬虫爬出来
如果查看robots.txt
可以发现它禁止爬取backup目录下的文件,正好和前面描述的相符
而在源码中又可以发现敏感信息
(提交e4634c3retqjcb9wov4ci2bmyuybz8ud过关)
Vim备份文件泄露
配置不安全导致信息泄露
由于配置不当,网站有时容易受到攻击。
又由于第三方技术的广泛使用,这种情况尤为普遍,第三方技术的很多配置选项并不一定被使用它们的人员所理解。
在其他情况下,开发人员可能会忘记在生产环境中禁用各种调试选项
例如,HTTP TRACE
方法被设计用于诊断目的 , TRACE允许顾客看到通过请求链的那一端在接收了些什么并使用那些数据来测试和诊断信息情况,开启可能导致某些危害
访问admin页面
同时该网站TRACE方法又开启了
X-Custom-IP-Authorization为我们的请求IP
结合这两条可以知道,web站点管理员在开发网站时设置了,本地不需要登录也可以进入admin页面
但是,我们可以欺骗服务器我们是127.0.0.1
这样设置后再次访问
可以成功删除 Carlos 的账号
TRACE探测
版本控制历史
Git基础请参考 https://www.runoob.com/w3cnote/android-tutorial-git-repo-operate.html
几乎所有网站都是使用某种形式的版本控制系统(例如Git)开发的
默认情况下,Git项目将其所有版本控制数据存储在名为.git
的文件夹中
有时,网站在生产环境中公开此目录。在这种情况下,您可能只需浏览到即可访问它/.git
。
而且还可以下载到本地,用本地安装的Git打开它 以访问网站的版本控制历史记录
这可能无法让您访问完整的源代码, 但是您可以阅读更改的代码片段
这仍然可能存在某些敏感数据
实验:
访问/.git
我们可以下载到本地查看
wget -r https://ac931f6d1f3043de818db753009500ba.web-security-academy.net/.git
git status命令查看信息
可以发现,admin.conf和admin_panel.php被管理员从目录删除了
但是"尚未缓存以备提交的变更",说明并没有从当前版本删除.
使用下面的命令恢复到当前版本
git reset --hard HEAD
cat admin.conf发现没有管理员密码!...
git log 查看历史版本信息
发现账号密码上一版被删除了..
再恢复上一版
git reset --hard HEAD^
拿到管理员密码,administrator/7e4yhifp8ni8olt5aap2 登录后台,删除指定用户即可.