从Firebase配置错误到PII泄露:一次价值1万美元的漏洞挖掘实战

本文详细记录了作者如何通过子域名枚举、JavaScript文件分析和Firebase SDK脚本编写,发现一个配置错误的Firebase存储桶,导致7.5万条包含客户个人信息的运单标签泄露的全过程。

忽略Firebase公共配置?我来展示如何将其变成PII泄露并赢得1万美元奖金

大家好👋,我是m0n3m,今天我想带大家了解一个至今仍让我心痛的故事——一个本可以让我获得10,000美元奖励的漏洞,却变成了我漏洞挖掘旅程中最宝贵的教训之一。

这不仅仅是一个"这里有漏洞,这里有奖金"的故事——它揭示了我如何偶然发现一个严重的Firebase配置错误、我采取的步骤、过程中的情感波动,以及我如何失去了奖金(但获得了金钱无法买到的经验)。

所以,端起你的咖啡☕,放松坐下,让我们开始吧。

🕵️‍♂️ 开始——可疑的子域名

一切始于我的一次深夜侦察会话。你知道那个安静的时刻,当所有人都睡着了,你只是运行着枚举工具——希望其中一个子域名能显示出有趣的内容?

就在那时,我看到了它。一个名为outlet.target.com的子域名。

不是主商店。不是预发布环境。只是"outlet"。感觉……不同。不对劲。

那个小小的感觉——每个猎人都知道的感觉——说:

“检查它。那里有东西。” 🔍

🌐 第一步:窥探幕后(urlscan.io)

我从https://urlscan.io开始——这是我查看网站自动加载哪些文件的首选工具。几秒钟后,我注意到一些有趣的东西:大量的JavaScript文件。

JavaScript文件是金矿。它们与API通信,包含配置,有时……还有秘密。🗝️ 所以很自然地,我决定深入挖掘。

🕳️ 第二步:使用WaybackURLs进行时间旅行

接下来,我启动WaybackURLs来获取该域名曾经索引过的每个URL:

1
echo "https://outlet.target.com" | waybackurls >> output.txt

结果?一长串历史URL列表。但我对它们都不感兴趣——我想要JS文件。

所以我过滤了它们:

1
cat output.txt | grep -E "\.js" >> js.txt

现在我有了一份整洁的.js文件列表,可能包含一些有趣的内容。😏

第三步:其中的秘密(Mantra扫描)

是时候释放Mantra了——这是我最喜欢的扫描JavaScript文件寻找秘密的工具之一。我运行:

1
cat js.txt | mantra

Mantra开始工作——逐行扫描,函数接函数——突然,有东西引起了我的注意。

一个以AIza…开头的Google API密钥。

通常情况下,我会忽略它。大多数这些只是无害的Google Maps密钥——通常不在范围内。但就在它旁边……我看到了一个名为fire-base.js的文件。

光是这个名字就让我的大脑像圣诞树一样亮了起来。🎄

🔥 第四步:Firebase发现

我打开了fire-base.js文件。里面是一个完整的Firebase公共配置——所有典型参数:

  • apiKey
  • authDomain
  • projectId
  • storageBucket

在这一点上,没有什么非法或疯狂的——找到公共Firebase配置很常见。但真正的问题是……它的权限有多宽松?

我可以直接初始化并四处探查吗?还是它被正确锁定了?

只有一个方法可以找出答案。

🧪 第五步:测试水深

首先,我尝试了一些快速检查:

  • 直接使用密钥进行基本API调用
  • 对Firebase端点运行dirsearch以寻找开放目录

但一切都返回403 Forbidden。死胡同。

有一瞬间,我几乎放弃了。

“也许没什么,“我想。“可能只是一个普通的公共配置。”

但我内心的某个声音说:

“你已经走了这么远。再试一件事。”

这个决定改变了一切。⚡

💻 第六步:编写我自己的Firebase脚本——转折点

在这个阶段,我意识到我已经达到了简单请求的极限。所以,我决定采取不同的路径——成为客户端本身。

我打开编辑器,喝了一口咖啡☕,开始使用Firebase SDK编写一个小脚本。它基本上复制了应用程序真实用户与Firebase交互的方式。

不仅仅是发送原始HTTP请求,我开始试验实际客户端函数的工作原理。我测试了一个可以列出存储文件的函数,并尝试使用prefix参数来探索存储内部数据的组织方式。

然后——轰💥——一旦我运行脚本,事情变得非常有趣。我开始看到通过直接API调用不可见的响应。感觉就像我刚刚解锁了系统的一个隐藏层,只有当我像应用程序本身一样思考时才会显现出来。

这就是一切豁然开朗的时刻:有时漏洞挖掘的真正突破不是来自攻击系统,而是来自理解它真正的思维方式。

🧱 第七步:数据洪流

我能看到一切:

  • 管理文件
  • 产品图片
  • 内部文档
  • 还有一个名为……ShippingLabels/的文件夹🚚

我尝试检查管理文件,但不幸的是,它们都只是字体文件和图片——与网站本身无关。

然而,我尝试检查运单标签文件夹,我期望会返回403 Forbidden错误,但我很惊讶。

没有限制——所有内容都可以自由加载。

💥每个文件都是一个运单标签,包含真实的客户数据:姓名、电话号码、地址、订单ID,甚至仓库信息。

我继续滚动——意识到了严重性。超过75,000个运单标签被暴露。

这不仅仅是一个漏洞。这是一个数据泄露。😨

📩 第八步:报告

我写了一份详细的报告,解释了每一步:

  • 我如何找到outlet子域名
  • JS分析
  • Firebase发现
  • SDK初始化
  • 暴露证明

我发送给公司并等待。五天。十天。十五天。

终于,我得到了回复。

被拒绝。❌

为什么?因为Firebase项目属于第三方供应商。不在范围内。所以即使我有大规模泄露的证据——没有奖金,没有认可。

只是……一个教训。

💬 结局——没有金钱,但有值得分享的故事

是的,失去1万美元很痛。但我获得的远更有价值——一个真实的提醒,告诉我为什么热爱这个领域。这不只是关于奖金;这是关于好奇心、坚持和责任。

如果这个故事对你有帮助,请与你的黑客朋友分享。给它鼓掌,留下评论,或关注——这让我有动力分享更多来自前线的真实故事。

保持好奇。保持道德。记住:有时最好的奖励不是金钱——而是你能够讲述的故事。

黑客快乐, M0n3m

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计