GitHub Dorking入门指南:如何利用GitHub搜索发现更多漏洞
目录
- 什么是GitHub Dorking?
- 基础搜索操作符
- 高级搜索操作符
- 更多有趣用例
- 结论
花费时间在内容发现和侦察阶段的漏洞赏金猎人通常会获得丰厚回报,因为他们经常发现未经测试和隐藏的资产或端点。GitHub Dorking是另一种利用公共搜索引擎发现隐藏资产、端点甚至密钥的方法,以增加发现漏洞的机会。本文是专门为没有使用GitHub查找漏洞经验的初学者准备的指南。
让我们开始吧!
什么是GitHub Dorking?
如今,大多数组织部署自定义代码来启动应用程序、服务和其他类型的软件产品,以保持公司运转。部署代码的标准方式是通过跟踪文件更改并提供分布式版本控制功能的平台。GitHub是众多提供此功能的平台之一,包括公共代码仓库。每当代码被推送到这些公共仓库时,任何人都可以查看。通常,你会发现不必要的数据甚至密钥被意外推送到这些公共仓库。
在本文中,我们希望专注于发现这些密钥,同时获取在侦察阶段可能对我们有价值的其他信息。
基础搜索操作符
在我们深入探讨可以轻松产生漏洞的复杂搜索查询之前,让我们先掌握基础知识,看看GitHub搜索支持的最基本操作符。你可以随时导航到GitHub上的官方完整代码搜索语法列表。
关键词搜索
你将执行的最常见搜索查询是通过将搜索查询缩小到特定组织、组织成员或关键词(例如你的目标域)。
例如,假设我们只想列出与特定组织(我们的漏洞赏金目标)相关的代码。在这种情况下,我们希望使用org
搜索操作符:
|
|
此搜索过滤器将仅包括与指定组织链接的结果。
如果我们有可能员工的用户名,也可以做同样的事情。以下搜索过滤器将仅包括与特定GitHub用户链接的结果:
|
|
通常,我们希望实现的是链接多个操作符来构建我们的搜索查询。这将帮助我们精确缩小到我们想要检查的结果类型,同时过滤掉所有其他结果。
为此,我们可以使用布尔操作符。两个主要的布尔操作符是AND
和OR
。让我们构建一个简单的搜索查询,我们希望返回包含目标域的特定组织的结果:
|
|
你可以通过分组查询进一步缩小搜索范围。假设你只对包含目标域且属于特定组织的代码感兴趣,并且希望按特定扩展名过滤:
|
|
排除特定结果
很常见的是,有不想要的数据会混乱你的结果页面。要排除这些不想要的结果,我们可以使用NOT
关键字。以下是一个排除我们不感兴趣的特定关键词的示例:
|
|
高级搜索操作符
让我们看一些更高级的搜索操作符,当正确使用时,可以帮助我们产生更准确的结果。
filename:
- 搜索特定文件名(用于过滤配置和构建文件)。language:
- 按编程语言过滤。path:
- 在特定目录路径中搜索。sort:
- 帮助根据交互、反应、评论、创建日期、相关性、作者日期、提交者日期或更新项目的最近性进行排序。created:
- 按文件的创建日期过滤。pushed:
- 按文件的最近性过滤。archived:
- 包括/排除存档的仓库。
更多有趣用例
我们已经涵盖了所有搜索语法。让我们看看你可能想要尝试的现实搜索操作,以使用GitHub搜索发现硬编码密钥和其他漏洞。这些只是几个例子。我们建议你理解下面概述示例背后的原则,以帮助构建更适合你目标的搜索查询。
第三方服务密钥
许多应用程序与第三方服务集成,用于支付、电子邮件传递和其他功能。这些服务需要API密钥进行身份验证,开发人员有时会直接将它们硬编码到源代码中。让我们看几个例子。
查找硬编码的Stripe密钥
Stripe是常用于处理支付的集成第三方服务。开发人员在与Stripe的公共API通信时需要提供私钥和公钥。我们可以缩小搜索范围,寻找它们被硬编码的情况:
|
|
查找硬编码的AWS访问和密钥
AWS是知名的基于云的服务提供商,为所有类型的开发人员用例(如S3桶)提供API访问账户。对此API的身份验证通常使用AWS访问密钥和访问密钥建立。有了这些信息,我们可以构建以下搜索查询,它将提取所有匹配我们过滤器的代码结果:
|
|
搜索硬编码的OpenAI API密钥
如今,大多数公司已将AI集成到其核心产品和服务中。OpenAI通常被选为常见AI驱动任务的首选提供商,因为它提供各种基于AI的服务。对此API的身份验证是通过API密钥完成的。你可以使用以下搜索语法过滤在文件中硬编码此API密钥的结果:
|
|
配置和构建文件
敏感的配置和构建文件通常包含硬编码密钥。如果它们曾经与其他代码一起部署,你将能够使用以下搜索查询浏览这些文件:
|
|
硬编码链接
GitHub代码搜索也可用于执行内容发现,从找到未触及的子域和其他资产到找到可能受注入攻击的新输入参数。
以下是一个简单搜索查询的示例,它将返回所有硬编码的URL:
|
|
数据库连接字符串
数据库连接字符串包含连接到数据库所需的所有信息,包括用户名、密码和主机名。MongoDB和MySQL是Web应用程序中最常用的两个数据库,开发人员经常意外地将这些连接字符串提交到公共仓库。
|
|
身份验证和安全令牌
JWT(JSON Web Token)密钥用于在身份验证系统中签名和验证令牌。如果这些密钥暴露,攻击者可以伪造有效令牌并完全绕过身份验证。这些密钥通常存储在环境变量或配置文件中。然而,有时它们最终会硬编码在源代码中。
|
|
更多常见搜索查询
以下是你可以执行的常见搜索查询的完整列表,以找到可能的密钥、文件和其他硬编码引用,这些可能导致漏洞:
|
|
结论
GitHub Dorking可以为你提供优势,帮助你发现可能的密钥,同时帮助你扩展初始攻击面。然而,你必须知道你在寻找什么,并缩小搜索范围,以避免浏览我们不感兴趣的代码。
所以,你刚刚学到了关于使用GitHub查找更多漏洞的新知识……现在是时候测试你的技能了!你可以从在易受攻击的实验室和CTF上练习开始,或者……浏览我们在Intigriti上的70多个公共漏洞赏金程序,谁知道呢,也许在你的下一次提交中赚取赏金!
立即在INTIGRITI上开始黑客攻击