4. HackerOne 信号操作
难度:低
URL:hackerone.com/reports/XXXXX
报告链接:https://hackerone.com/reports/106305
报告日期:2015.12.21
奖金:$500
描述:
在 2015 年年末,HackerOne 向站点进入了新的功能,叫做信号。本质上,在这些报告关闭之后,它有助于识别黑客的之前漏洞报告的有效性。重要的是要注意,用户可以关闭它们在 HackerOn 上的报告,这本应该对他们的声誉和信号功能毫无影响。
所以,你可以猜到,在测试该功能的时候,一个黑客发现了这个功能的不合理实现,并且允许黑客向任何团队创建报告,自己关闭报告,并从中受益。
这就是这里的情况了。
重要结论
通过一个简短的描述,这里的结论不可能全部覆盖。一定要留意新的功能!当站点实现了新的功能时,它对于黑客就像鲜肉一样。新的功能展示了测试新代码和搜索漏洞的机会。这就和 Shopify 和 Twitter 的 CSRF,以及 Facebook 的 XSS 漏洞一样。为了最大利用它们,使你自己熟悉公司,并且订阅公司的博客是个好主意,以便你在一些东西发布之后能够收到提醒。之后测试它们。
5. Shopify S3 Bucket 开放
难度:中
URL:cdn.shopify.com/assets
报告链接:https://hackerone.com/reports/106305
报告日期:2015.11.9
奖金:$1000
描述:
Amazon 简易存储 S3,是一个服务,允许用户在 Amazon 的云服务器上储存和托管文件。Shopify 和许多站点都是用 S3 来储存和托管静态内容,例如图片。
Amazon Web 服务的整个套件,AWS,是非常健壮的,并包含权限管理系统,允许管理员为每个服务定义权限,包含 S3。许可包含创建 S3 Bucket 的功能(Bucket 就像储存器的文件夹),读取和写入 Bucket ,以及其他。
根据披露,Shopify 没有合理配置它们的 S3 Bucket 权限,并且无意中允许任何认证过的 AWS 用户读取或写入它们的 Bucket。这显然是由问题的,因为你至少不希望恶意的黑帽子使用你的 S3 Bucket 来储存和托管文件。
不幸的是,这个问题的细节没有暴露,但是可能使用 AWS CLI 来发现,这是一个工具,允许你和 AWS 服务在你的共领航上交互。虽然你需要一个 AWS 账户来做这个事情,创建账户实际上也是免费的,因为你不需要任何服务。因此,使用 CLI 你就可以在 AWS 上认证你自己,并且随后测试是否可以访问(这也是我发现 HackerOne Bucket 的方式,它在下面列出)。
重要结论
当你侦查一个潜在的目标时,确保注意到所有不同的工具,包含 Web 服务,它们明显可以使用。每个服务或软件,OS,以及其他。你可以寻找或发现新的攻击向量。此外,使你自己熟悉流行的 Web 工具,例如 AWS S3,Zendesk,Rails,以及其他是个好主意。许多站点都使用它们。
6. HackerOne S3 Bucket 开放
难度:中
URL:[REDACTED].s3.amazonaws.com
报告链接:https://hackerone.com/reports/128088
报告日期:2016.4.3
奖金:$2500
描述:
我们打算讲一些有些不同的东西。这是一个漏洞,我实际上发现了他,并且和上面描述的 Shopify 的问题有些不同,所以我打算详细分享关于我如何发现他的任何事情。
所以,一开始,上面描述的漏洞就是,一个 Bucket 公开链接到了 Shopify。意思是,当你访问这个想点时,你会看到 AWS 服务的调用,所以黑客就知道 Bucket 指向哪里。但是我并没有 – 我使用了一个很酷的脚本和一些工具来发现了 Bucket。
在 4 月 3 日的周末,我不知道为什么,但是我决定跳出思维定式,并尝试攻击 HackerOne。我一开始就玩了玩它们的站点,并且每次新漏洞发现时,都迫使我自己阅读信息披露,想了解为什么我错过了它。我想知道他们的 S3 Bucket 是否存在类似 Shopify 的漏洞。我也想知道,黑客如何访问了 Shopify 的 Bucket。我了解到它是通过 Amazon 命令行工具来访问的。
现在,通常我会使自己停下,因为 HackerOne 这个时候不可能还拥有漏洞。但是我突然有一个想法,它来源于我和 Ben Sadeghipour (@Nahamsec) 的访谈,就是不要怀疑自己,或者公司犯错的可能。
所以我在 Google 上搜索一些细节,并碰到了两个有意思的页面:
There’s a Hole in 1,951 Amazon S3 Buckets
第一个是个有趣的文章,来自 Rapid7,它是个安全公司,这篇文章关于如何发现公开可写的 S3 Bucket ,并通过模糊测试,或者猜测 Bucket 名称来实现。
第二个是个很酷的工具,它接受一个单词列表,并调用 S3 来寻找 Bucket。但是,它没有自带列表。在 Rapid7 的文章中有一行关键字,“通过一个不同的列表来猜测名称,列表包含 1000 强公司的名称,以 .com, -backup, -media 排列。”
这就很有意思了。我很快为 HackerOne 创建了一列 Bucket 可能名称,像这样:
hackerone, hackerone.marketing, hackerone.attachments, hackerone.users, hackerone.files
这些都不是真正的 Bucket。它们来自于报告。所以我觉得我肯定能够发现它。我将其留作一个挑战。
现在,使用 Ruby 脚本,我开始调用那些 Bucket。事情刚开始并不是那么好,我发现了几个 Bucket 但是都拒绝访问。很不幸,所以我先离开,看看 NetFlix。
但是这个想法还在提醒着我,所以在我睡觉之前,我决定再次使用更多组合来执行脚本。我再次发现了大量的 Bucket,它们看起来是 HackerOne 的,但是所有都拒绝访问。我意识到,拒绝访问起码告诉我它们是存在的。
我打开了 Ruby 脚本,它在 Buckets调用了ls
的等价函数。换句话说,我尝试观察它们是否公开可读的。我想知道它,以及它们是否公开可写的。
此外,现在 AWS 提供了命令行工具,aws-cli。我知道它,因为我之前用过,所以我在我的 VM 上快速执行sudo apt-get aws-cli
,并准备好了。你可以在docs.aws.amazon.com/cli/latest/userguide/installing.html
上找到这个东西的指南。
现在,命令awss3help
会打开 S3 的帮助,并列出可用的命令。这些命令之一是mv
,以aws s3 mv [FILE] [s3://BUCKET]
的形式,所以我尝试:
touch test.txt
aws s3 mv test.txt s3://hackerone.marketing
这是第一个 Bucket,我从中收到了拒绝访问,并在调用PutObject
操作时,我收到了move failed: ./test.txt to s3://hackerone.marketing/test.txt A client error(Access Denied)
。
所以尝试下一个,aws s3 mv test.txt s3://hackerone.files
,并且成功了。我收到了这个消息,move: ./test.txt to s3://hackerone.files/test.txt
。
真是神奇!现在我尝试删除文件:aws s3 rm s3://hackerone.files/test.txt
,同样成功了。
但是现在我还是怀疑自己。我快速登出了 HackerOne 来报告。并且在我键入时,我意识到我并没有实际确认 Bucket 的所有权。AWS 允许任何人在全局名字空间下创建任何 Bucket。意思是,你,或者读者都可能实际拥有我在测试的 Bucket。
我不确定是否应该不验证就报告。我搜索了 Google 来看看我是否可以找到任何 Bucket 的引用。我没有找到什么东西。我离开了电脑,来理清头绪。我意识到,最坏的事情就是我得到了另一个无效报告,以及贡献 -5。另一方面,我知道这至少值 500,基于Shopify的漏洞也可能是1000。
我按下了提交,并去睡觉了。当我醒来的时候,HackerOne 回复了恭喜,并说它们已经修复了它和一些其他的存在漏洞的 Bucket。成功了!并且按照它们的条款,当他们授予奖励的时候,它们会考虑潜在的安全性,包括我没有发现但存在漏洞的其它 Bucket。
重要结论
有多个重要结论:
不要低估你的能力,以及开发者犯错的可能性。HackerOne 是个优秀的团队,拥有优秀的安全研究员。但是人们都会犯错。挑战你的假设吧。
不要在首次尝试之后就放弃。当我发现它的时候,浏览器每个 Bucket 都不可用,并且我几乎离开了。但是之后我尝试写入文件,它成功了。
所有的东西都在于只是。如果你知道存在了哪种漏洞,你就知道了要寻找以及测试什么。读这本书就是一个良好的开始。
我之前说过,又再说一遍,一个攻击面要好于站点,它也是公司所使用的的服务。要跳出思维定式。