GitHub Dorking入门指南:利用GitHub搜索发现更多漏洞

本文详细介绍了GitHub Dorking技术,包括基础与高级搜索操作符的使用方法,以及如何通过搜索公开代码库发现硬编码密钥、配置文件和数据库连接字符串等敏感信息,帮助安全研究人员扩大攻击面。

GitHub Dorking入门指南:如何利用GitHub搜索发现更多漏洞

作者:blackbird-eu
发布日期:2025年7月13日

目录

花费时间在内容发现和侦察阶段的漏洞赏金猎人通常会获得丰厚的回报,因为他们经常发现未经测试和隐藏的资产或端点。GitHub Dorking是利用公共搜索引擎发现隐藏资产、端点甚至秘密的另一种方式,以增加发现漏洞的机会。本文是专门为没有使用GitHub查找漏洞经验的初学者准备的指南。

让我们开始吧!

什么是GitHub Dorking?

如今,大多数组织部署自定义代码来启动应用程序、服务和其他类型的软件产品,以保持公司正常运行。部署代码的标准方式是通过一个跟踪文件更改并提供分布式版本控制功能的平台。GitHub是众多提供开箱即用功能的平台之一,包括公共代码仓库。每当代码被推送到这些公共仓库时,任何人都可以查看。通常,你会发现不必要的数据甚至秘密被意外推送到这些公共仓库中。

在本文中,我们将重点放在发现这些秘密,同时获取在侦察阶段可能对我们有价值的其他信息。

基础搜索操作符

在我们深入研究可以轻松产生漏洞的复杂搜索查询之前,让我们先掌握基础知识,看看GitHub搜索支持的最基本操作符。你可以随时导航到GitHub上的官方完整代码搜索语法列表。

关键词搜索

最常见的搜索查询是通过将搜索查询缩小到特定组织、组织成员或关键词(例如你的目标域名)来执行的。

例如,假设我们只想列出与特定组织(我们的漏洞赏金目标)相关的代码。在这种情况下,我们希望使用org搜索操作符:

1
org:"E Corp"

此搜索过滤器将仅包含与指定组织相关的结果。

如果我们有可能员工的用户名,也可以做同样的事情。以下搜索过滤器将仅包含与特定GitHub用户相关的结果:

1
user:"hunter2"

通常,我们希望实现的是链接多个操作符来构建搜索查询。这将帮助我们精确缩小到我们想要检查的结果类型,同时过滤掉所有其他内容。

为此,我们可以使用布尔操作符。两个主要的布尔操作符是ANDOR。让我们构建一个简单的搜索查询,我们希望返回包含目标域名的特定组织的结果:

1
org:"intigriti" AND "example.com"

你可以通过分组查询进一步缩小搜索范围。假设你只对包含目标域名且属于特定组织的代码感兴趣,并且希望通过特定扩展名进行过滤:

1
(org:"intigriti" AND "example.com") AND (extension:json OR extension:yaml)

排除特定结果

搜索结果页面中经常出现不需要的数据。为了排除这些不需要的结果,我们可以使用NOT关键字。以下是一个排除我们不感兴趣的特定关键词的示例:

1
org:"example" extension:json NOT "dev.example.com" NOT "engineering.example.com"

高级搜索操作符

让我们看一些更高级的搜索操作符,如果使用正确,可以帮助我们产生更准确的结果。

  • filename: - 搜索特定文件名(用于过滤配置和构建文件)。
  • language: - 按编程语言过滤。
  • path: - 在特定目录路径中搜索。
  • sort: - 帮助基于交互、反应、评论、创建日期、相关性、作者日期、提交者日期或更新项目的最近性进行排序。
  • created: - 按文件的创建日期过滤。
  • pushed: - 按文件的最近性过滤。
  • archived: - 包含/排除归档的仓库。

更多有趣的使用案例

我们已经涵盖了所有搜索语法。让我们看看你可能想尝试的现实搜索操作,以使用GitHub搜索发现硬编码的秘密和其他漏洞。这些只是一些例子。我们建议你理解下面概述示例背后的原则,以帮助构建更适合你目标的搜索查询。

第三方服务密钥

许多应用程序与第三方服务集成,用于支付、电子邮件传递和其他功能。这些服务需要API密钥进行身份验证,开发人员有时会将这些密钥硬编码到源代码中。让我们看几个例子。

查找Stripe硬编码密钥

Stripe是一个常用的集成第三方服务,用于处理支付。开发人员在与Stripe的公共API通信时需要提供私钥和公钥。我们可以缩小搜索范围,查找它们被硬编码的情况:

1
org:"example" ("sk_live_" OR "pk_live_")

查找硬编码的AWS访问和秘密密钥

AWS是知名的基于云的服务提供商,为所有类型的开发人员用例(如S3存储桶)提供API访问。对此API的身份验证通常通过AWS访问密钥和访问秘密密钥建立。有了这些信息,我们可以构建以下搜索查询,它将提取所有匹配我们过滤器的代码结果:

1
org:"example" (AWS_ACCESS_KEY_ID OR AWS_ACCESS_SECRET_KEY)

搜索硬编码的OpenAI API密钥

如今,大多数公司已将AI集成到其核心产品和服务中。OpenAI通常被选为常见AI驱动任务的首选提供商,因为它提供各种基于AI的服务。对此API的身份验证通过API密钥完成。你可以使用以下搜索语法过滤在文件中硬编码此API密钥的结果:

1
org:"example" /"sk-[a-zA-Z0-9]{20,50}"/

配置和构建文件

敏感的配置和构建文件通常包含硬编码的秘密。如果它们与其他代码一起部署,你将能够使用以下搜索查询浏览这些文件:

1
org:"example" (filename:.env OR filename:.env.local OR filename:travis.yml OR filename:Dockerfile or filename:docker-compose.yaml OR filename:package.json OR filename:web.config OR filename:settings.py)

硬编码链接

GitHub代码搜索也可用于执行内容发现,从查找未触及的子域名和其他资产到查找可能受到注入攻击的新输入参数。

以下是一个简单搜索查询的示例,它将返回所有硬编码的URL:

1
org:"example" /http(s)?:\/\//

数据库连接字符串

数据库连接字符串包含连接到数据库所需的所有信息,包括用户名、密码和主机名。MongoDB和MySQL是Web应用程序中最常用的两个数据库,开发人员经常意外地将这些连接字符串提交到公共仓库。

1
org:"example" ("mongodb://" OR "mongodb+srv://" OR "mysql://") password

身份验证和安全令牌

JWT(JSON Web Token)秘密用于在身份验证系统中签名和验证令牌。如果这些秘密被暴露,攻击者可以伪造有效令牌并完全绕过身份验证。这些秘密通常存储在环境变量或配置文件中。然而,有时它们最终会被硬编码在源代码中。

1
org:"example" ("jwt_secret" OR "JWT_SECRET" OR "jwtSecret")

结论

GitHub Dorking可以为你提供优势,帮助你发现可能的秘密,同时帮助你扩大初始攻击面。但是,你必须知道你在寻找什么,并缩小搜索范围,以避免浏览我们不感兴趣的代码。

所以,你刚刚学到了使用GitHub查找更多漏洞的新知识……现在是时候测试你的技能了!你可以从在易受攻击的实验室和CTF中练习开始,或者……浏览我们在Intigriti上的70多个公共漏洞赏金计划,谁知道呢,也许在你的下一次提交中赚取赏金!

立即在INTIGRITI上开始黑客攻击

上一篇:Google Dorking入门指南:如何利用Google搜索发现更多漏洞
下一篇:使用Shodan和Censys查找更多漏洞的完整指南

你可能还喜欢:

  • 2025年利用Log4Shell(Log4J)(2025年6月29日)继续阅读
  • SSTI:利用高级服务器端模板注入的完整指南(2025年6月15日)继续阅读
  • 发现隐藏参数:高级指南(2025年6月3日)继续阅读
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计