GitHub Dorking 入门指南:如何发现更多漏洞

本文详细介绍了如何利用GitHub搜索语法进行漏洞挖掘,包括基础与高级搜索操作符、实际用例及常见密钥查找技巧,适合安全研究人员和漏洞猎人入门学习。

GitHub Dorking 入门指南:如何发现更多漏洞

目录

  • 什么是 GitHub Dorking?
  • 基础搜索操作符
  • 高级搜索操作符
  • 更多有趣用例
  • 结论

花费时间在内容发现和侦察阶段的漏洞赏金猎人通常会获得丰厚的回报,因为他们经常发现未经测试和隐藏的资产或端点。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 是一个知名的基于云的服务提供商,提供 API 访问以支持所有类型的开发人员用例,例如 S3 存储桶。对此 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://")

身份验证和安全令牌

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

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

更多常见搜索查询

以下是你可以执行的常见搜索查询的完整列表,以查找可能的密钥、文件和其他硬编码引用,这些可能导致漏洞:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
org:"example" (AWS_ACCESS_KEY_ID OR AWS_ACCESS_SECRET_KEY)                        # 硬编码的 AWS 访问和密钥
org:"example" ("sk_live_" OR "pk_live_")                                          # 硬编码的 Stripe 密钥
org:"example" (SENDGRID_API_KEY OR sendgrid_api_key)                              # SendGrid API 密钥
org:"example" /"sk-[a-zA-Z0-9]{20,50}"/                                           # 硬编码的 OpenAI API 密钥
org:"example" (ANTHROPIC_API_KEY OR anthropic_api_key)                            # Anthropic API 密钥
org:"example" (PAYPAL_CLIENT_SECRET OR paypal_client_secret)                      # PayPal 凭据
org:"example" (SQUARE_ACCESS_TOKEN OR square_access_token)                        # Square 支付令牌
org:"example" (AZURE_CLIENT_SECRET OR AZURE_CLIENT_ID)                            # Azure 凭据
org:"example" (CLOUDFLARE_API_TOKEN OR CF_API_TOKEN)                              # Cloudflare 令牌
org:"example" (filename:.env OR filename:.env.local OR filename:travis.yml)       # 配置和构建文件
org:"example" /http(s)?:\/\//                                                     # 硬编码链接
org:"example" ("mongodb://" OR "mongodb+srv://" OR "mysql://")                    # 数据库连接字符串
org:"example" ("jwt_secret" OR "JWT_SECRET" OR "jwtSecret")                       # 身份验证和安全令牌
org:"example" (extension:pem OR extension:key OR extension:p12 OR extension:pfx)  # 证书文件
org:"example" (SLACK_BOT_TOKEN OR SLACK_WEBHOOK_URL)                              # Slack 集成令牌
org:"example" (GITHUB_TOKEN OR GITHUB_PAT OR GH_TOKEN)                            # GitHub 个人访问令牌
org:"example" /\/\/(.*\.)?amazonaws\.com/                                         # AWS 端点
org:"example" /\/\/(.*\.)?firebaseio\.com/                                        # Firebase 端点

结论

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

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

立即在 Intigriti 上开始黑客攻击!

上一篇文章
Google dorking 入门:如何使用 Google 搜索查找更多漏洞

下一篇文章
使用 Shodan 和 Censys 查找更多漏洞的完整指南

你可能还喜欢
识别流行反向代理后的服务器原始 IP
2025 年 7 月 29 日
继续阅读

2025 年利用 Log4Shell (Log4J)
2025 年 6 月 29 日
继续阅读

SSTI:利用高级服务器端模板注入的完整指南
2025 年 6 月 15 日
继续阅读

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