Akwaaba!前辈们。我将快速讲述我从一个项目获得的1500美元赏金的最新经历。在我深入之前,POST-based XSS(基于POST请求的跨站脚本攻击)仍然可以被利用来获得赏金。2000美元的Android内容提供程序(Content Provider)漏洞,而这与Burp Suite无关。
‼️ 免责声明:出于保密考虑,我已在这篇报告中更改了应用程序的具体细节。即使显示的截图也来自另一个类似的、没有漏洞赏金计划的应用程序——它们仅用于说明。此外,所有提到的API端点都已修改,以避免泄露实际的程序信息。
该项目
我最近收到了一个私人邀请,参与一个包含两个主要资产的项目:app.target.com 和 api.target.com。该项目提供了一套用于登录应用程序的凭证,注册功能被禁用。
根据我初步的检查,该平台似乎专注于文档和秘密信息管理。一个有趣的功能是能够创建团队并将其他用户添加到这些团队中。虽然我可以看到其他用户创建的团队名称,但无法看到诸如成员或权限等额外详细信息。
漏洞
经过一番深入的侦察,我发现了隐藏的功能,这些功能暴露了其他用户团队的敏感信息。这包括成员姓名、角色、电子邮件地址、UUID、特别备注,甚至私钥。
在探索应用程序时,我注意到一个功能,允许你创建一个秘密项目并与单个用户或整个团队分享。在这个过程中,应用程序会显示团队名称及其UUID,即使是你不属于的团队——这是预期的行为。在后台,应用程序会调用以下API端点来仅获取团队名称:
|
|
当然,遵循REST框架的标准,我们可以尝试通过附加它们的UUID或将其作为参数来检索特定团队的信息。在这种情况下,将其附加在路径中是有效的。
|
|
在尝试对团队UUID之后的部分进行模糊测试以发现更多端点后,我的任何字典都没有返回有用的结果。由于主应用程序上的注册功能被禁用,我将重点转向查看是否存在UAT、Staging、Test或Demo环境。这些环境通常启用了注册功能,并且可以提供额外的攻击面。
侦察以识别相关资产
我不喜欢进行子域名模糊测试;我在这方面很不在行。因此,我更喜欢被动地手动枚举它们。我的第一步是使用Shodan通过共享的SSL证书来查找相关域名(我在之前的OTP泄漏文章中解释过这种技术)。不幸的是,这没有返回任何有用的信息。接下来,我转向了Google dorks(Google高级搜索语法)。用于查找任何站点的子域名的最简单dork是:
|
|
但多年来,我注意到Google dorks一些有趣的地方。不久前,我尝试在查询中添加多个星号(),结果Google返回了当我只使用单个时没有显示的域名。
例如,使用这样的dork:
|
|
给了我新的结果,包括更深层次的子域名,例如:
|
|
你可以继续添加更多的星号来发现更多嵌套的子域名(子子域名)。这是一个简单的技巧,通常能揭示基础枚举遗漏的资产。
|
|
由于我的目标是发现STAGING、UAT、TEST、PREPROD或DEV环境,我改进了我的Google dorks来定位这些关键词。这些环境通常具有较弱的安全控制,甚至可能允许注册,这使得它们对于进一步测试很有价值。
|
|
(你可以尝试使用uat、stg、stage、dev、test等词来组合你自己的搜索语法。)
在优化我的dorks时,我偶然发现了两个staging子域名。其中一个结果是一个React应用的管理员staging环境,它看起来几乎与我正在测试的主要目标应用程序完全相同。关键区别?这个staging版本有一个“注册”按钮,而生产应用不允许注册。
管理员Staging环境揭示更多信息
我迅速在管理员staging界面上注册了账户。大部分功能都是坏的,应用程序中包含测试数据,比如虚拟团队和用户。尽管如此,我注意到一些有趣的事情:管理员有能力管理工作区中的所有团队。
当你选择一个特定的团队时,应用程序会发起三个API请求来获取该团队的详细信息:
|
|
漏洞利用
我简单地在目标应用程序中重放了这些API端点,但失败了。因此,我决定从端点中移除测试部分,然后成功了,我能够检索到团队成员列表(其中包含详细的用户信息),以及加密的密文形式的secrets。
|
|
影响与支付
由于该平台设计用于共享文档和秘密,除非明确标记为公开,否则其他用户的任何信息或活动都应保密。这个漏洞使我能够通过一个本应只限于管理员的API端点访问敏感数据。
那么,我负责任地报告了这个问题,并因此获得了1500美元的赏金。
嘿嘿……再见。 Marsh先生
感谢阅读,如果您有任何问题,可以在X(原Twitter)上通过@tinopreter私信我。在LinkedIn上与我联系:Clement Osei-Somuah。