
1. 项目概述GHunt是什么以及为什么你需要它如果你对“开源情报”OSINT或者“网络侦查”感兴趣那么你大概率听说过或者用过一些工具比如通过社交媒体账号挖掘信息或者通过域名、IP地址来关联实体。但有一个领域信息量巨大、关联性极强却常常被常规OSINT工具所忽视——那就是Google生态系统。我们每天使用的Gmail、Google Drive、Google Photos、YouTube甚至只是用Google账号登录的第三方网站都在这个庞大的生态里留下了海量的数字足迹。GHunt就是一把专门为打开Google这座“信息金矿”而设计的钥匙。简单来说GHunt是一个命令行工具它的核心功能是通过一个Google账号的标识比如邮箱地址尽可能多地挖掘出与该账号相关联的公开信息。这听起来可能有点抽象我举个例子你在某个论坛发现了一个可疑的邮箱examplegmail.com。常规手段可能就止步于此了。但使用GHunt你可以尝试查出这个邮箱背后可能关联的姓名、绑定的YouTube频道、上传到Google Drive的公开文件列表、在Google Maps上留下的公开评论、甚至是通过Google Photos分享过的图片如果存在EXIF数据还可能包含地理位置。所有这些信息都来自于Google服务本身的公开API或可访问的公开页面GHunt只是将它们自动化、系统化地聚合在了一起。为什么说它是“攻击性框架”这里的“攻击性”并非指恶意攻击而是信息安全领域的一个术语常用来描述主动进行安全评估、渗透测试或情报收集的行为。GHunt的设计初衷是给安全研究人员、渗透测试人员和合法的OSINT调查员使用的帮助他们理解一个Google账号在互联网上的暴露面有多大。对于普通用户而言了解GHunt能做什么反过来也是对自己数字隐私的一次重要体检——你可以用你自己的邮箱试试看看有多少你以为“隐藏”的信息其实是公开可查的。注意使用GHunt进行任何调查都必须严格遵守法律法规和道德准则。绝对禁止将其用于骚扰、人肉搜索、非法监视或其他任何侵犯他人合法权益的用途。本文仅从技术学习和安全研究的角度进行探讨。2. 核心思路与工具定位为什么是GHunt而不是其他在深入动手之前我们有必要厘清GHunt的独特价值。市面上信息收集工具很多GHunt的不可替代性主要体现在三个方面2.1 专注于Google生态的深度挖掘大多数OSINT工具是广谱的它们会查询域名注册信息Whois、社交媒体平台Twitter, Facebook、代码仓库GitHub等。而GHunt只做一件事深挖Google。Google服务的集成度极高一个账号通行所有服务。这意味着一旦你在一个服务如YouTube上找到了线索这个线索很可能成为打开其他服务如Google Maps个人资料的钥匙。GHunt正是利用了这种“单点突破全面开花”的特性构建了一套专门针对Google API和页面结构的查询链。2.2 自动化与关联分析能力手动进行这些调查是极其繁琐的。你需要分别打开Gmail查看头像、YouTube搜索频道、Google Maps搜索贡献者、Google Photos尝试分享链接等等并且要手动记录和关联信息。GHunt将这个过程完全自动化。你输入一个目标它自动按顺序调用多个模块并将结果以结构化的方式JSON、控制台表格输出。更重要的是它能进行初步的关联分析比如发现同一个头像在不同服务中使用从而增加信息的确信度。2.3 对“公开信息”的极致利用GHunt不破解密码不绕过认证。它所有获取的信息要么是通过Google公开API无需目标账号登录即可查询的部分要么是目标用户主动设置为“公开”或“知道链接即可访问”的资源。这听起来限制很大但实际效果往往出人意料。很多人对Google服务的隐私设置并不熟悉或者采用了默认设置导致大量信息处于“默认公开”或“链接共享”状态。GHunt的价值就在于系统性地帮你发现这些被无意中公开的信息碎片并将它们拼凑起来。工具选型考量为什么选择命令行工具而非图形界面对于此类调查工具命令行提供了更高的灵活性易于集成到自动化脚本中、可重复性命令可保存和复用以及对资源更低的消耗。GHunt用Python编写跨平台依赖清晰非常适合在调查服务器或本地虚拟环境中部署。3. 环境准备与安装5分钟真的够吗“5分钟上手”的关键在于准备工作做得好。如果你的系统环境干净网络通畅5分钟完成安装和第一次运行是完全可行的。下面我们分步进行。3.1 基础环境检查GHunt基于Python 3.7运行。首先打开你的终端Windows用CMD或PowerShellmacOS/Linux用Terminal检查Python版本python3 --version # 或 python --version如果版本低于3.7需要先升级Python。建议使用Python 3.9或3.10兼容性最好。接下来你需要一个包管理工具pip通常随Python安装。检查一下pip3 --version # 或 pip --version3.2 安装GHunt官方推荐的安装方式是使用pipx。pipx能为每个Python应用创建独立的虚拟环境避免依赖冲突是管理命令行Python工具的绝佳选择。首先安装pipx# 在macOS上可以使用Homebrew brew install pipx pipx ensurepath # 在Linux上如Ubuntu/Debian sudo apt update sudo apt install pipx pipx ensurepath # 在Windows上如果你安装了Python 3通常可以通过pip安装 pip install --user pipx pipx ensurepath # 安装后可能需要重启终端或重新加载环境变量。然后使用pipx安装GHuntpipx install ghunt这个命令会自动处理所有依赖。安装完成后在终端输入ghunt并按回车如果看到帮助信息说明安装成功。实操心得如果你在安装过程中遇到权限问题尤其在Linux/macOS切勿使用sudo pip install来安装GHunt或其依赖。这可能导致系统Python环境被污染。坚持使用pipx或用户目录下的虚拟环境venv是最佳实践。如果网络较慢导致下载超时可以尝试使用国内镜像源例如pipx install ghunt -i https://pypi.tuna.tsinghua.edu.cn/simple。3.3 获取必要的API密钥关键步骤GHunt的部分功能需要合法的Google API密钥来访问公开接口。这不仅是功能所需也是以合规方式使用工具的前提。你需要准备以下两样东西一个用于“伪装”的Google账号这不是用来攻击的而是用来向Google API证明“有一个合法的人类用户在发起请求”。你需要用这个账号登录浏览器完成一些必要的验证。建议使用一个专门注册的、干净的辅助账号不要用你的主账号。生成API密钥我们将为这个辅助账号启用必要的Google API服务并创建密钥。具体操作流程如下用你的辅助Google账号访问 Google Cloud Console 。创建一个新的项目例如命名为“GHunt-OSINT”。进入“API和服务” - “库”。在搜索框中依次搜索并启用以下API服务People API用于查询姓名、头像等基本信息YouTube Data API v3用于查询YouTube频道信息Drive API用于查询公开的Drive文件列表Gmail API用于获取邮箱配置信息非邮件内容启用这些服务后进入“API和服务” - “凭据”。点击“创建凭据”选择“API密钥”。系统会生成一个密钥字符串类似AIzaSyB...请立即复制并保存好。重要注意事项这个API密钥是公开的但绑定到了你的Google Cloud项目。为了安全务必在“凭据”页面点击你刚创建的API密钥进入配置页面。在“API限制”部分选择“限制密钥”然后只勾选你刚才启用的那四个APIPeople, YouTube Data v3, Drive, Gmail。最后你还可以在“应用程序限制”中添加你计划运行GHunt的服务器IP地址如果固定或者选择“HTTP 引荐来源网址”并添加你本地环境的限制对于本地学习此步可暂缓但生产环境必须设置。这能防止你的API密钥被滥用。至此你的API密钥就准备好了。我们把它记为YOUR_GOOGLE_API_KEY。4. 首次运行与配置让GHunt“认识”你安装好GHunt后直接运行ghunt会显示帮助。但我们需要先进行初始化配置主要是告诉GHunt如何使用我们刚才创建的API密钥以及如何管理浏览器会话用于访问那些需要Cookie的页面如Google Maps个人资料。4.1 初始化配置运行以下命令开始交互式配置ghunt config你会看到一个命令行向导询问你几个问题使用浏览器进行验证选择Yes。这意味着GHunt在需要访问某些网页如获取Google Maps的登录Cookie时会尝试打开一个浏览器窗口让你手动登录。浏览器类型根据你的系统选择比如Chrome或Firefox。GHunt会使用browser_cookie3等库来读取你已登录浏览器中的Cookie。确保你的Chrome或Firefox浏览器已经用之前提到的“辅助Google账号”登录。这是关键一步。Google API 密钥输入你刚才保存的YOUR_GOOGLE_API_KEY。可视化模式对于新手可以选择Yes这样在检查邮箱时会尝试显示头像图片需要终端支持。配置完成后信息会保存在你用户目录下的.ghunt文件夹里例如~/.ghunt/config.json。4.2 测试你的配置检查你自己的邮箱最好的测试就是用你自己的一个邮箱或者那个辅助邮箱来试一下最基本的功能。我们使用ghunt email命令ghunt email your-test-emailgmail.com将your-test-emailgmail.com替换成你的目标邮箱。这个命令会调用People API等尝试获取与该邮箱关联的公开信息。首次运行时由于需要获取浏览器Cookie可能会弹出一个浏览器窗口提示你选择登录的Google账号请选择你的辅助账号。如果一切顺利你将在终端看到类似下面的输出[] Target: your-test-emailgmail.com [] Gmail configuration found ! • Domain: gmail.com • MX Records: [gmail-smtp-in.l.google.com.] [] Google ID found ! • Gaia ID: 110000000000000000000 [] Name found ! • Name: John Doe [] Profile picture found ! • Link: https://lh3.googleusercontent.com/...s100-c • Saved to: john.doe.jpg [] YouTube channel found ! • Channel ID: UC... • Channel URL: https://www.youtube.com/channel/UC... • Name: Johns Tech Reviews • Subscribers: 1.2K [-] No Maps activity found. [-] No public Google Drive files found.这个输出已经包含了丰富的信息邮箱的域名配置、Google内部ID (Gaia ID)、姓名、头像图片已自动下载、关联的YouTube频道。如果没有找到某些信息可能是因为目标账号没有公开这些内容或者隐私设置较严格。踩坑记录最常见的首次运行失败是“Cookie获取失败”。请确保你用来运行ghunt config时指定的浏览器如Chrome正在运行至少有一个窗口打开。在该浏览器中已经登录了你用于OSINT调查的辅助Google账号。最好关闭其他所有Google账号的登录只保留这一个避免GHunt抓错Cookie。如果你使用了Chrome的多用户配置文件ProfilesGHunt可能会读取默认配置文件的Cookie。你需要确保登录动作发生在正确的配置文件里。5. 核心功能模块深度解析GHunt的功能通过不同的子命令实现。理解每个模块能做什么、其原理和限制是高效利用它的关键。5.1 邮箱调查 (ghunt email)这是GHunt的入口和核心。它不仅仅查邮箱而是以邮箱为起点触发一连串的调查。原理首先它通过DNS查询验证邮箱域名的有效性Gmail或自定义域名。然后使用提供的Google API密钥调用People API的people.lookup方法通过邮箱地址查找对应的Google个人资料。如果目标账号的“Google个人资料”是公开的或对知道邮箱的人可见这里就能返回姓名、头像、Google ID (Gaia ID)。输出信息Gaia ID这是Google内部用来唯一标识一个账号的字符串。它是连接所有Google服务的核心密钥。一旦获得Gaia ID就可以用它来查询其他服务。姓名与头像最直接的个人身份信息。邮箱配置判断是企业邮箱G Suite/Workspace还是个人Gmail。技巧如果ghunt email没有返回姓名和头像并不意味着绝对没有。有时是因为目标账号的隐私设置非常严格。但Gaia ID仍有可能通过其他途径如从公开的YouTube频道页面源码中泄露。5.2 YouTube频道关联 (ghunt email已包含)在获取Gaia ID后GHunt会自动调用YouTube Data API搜索与该Gaia ID关联的频道。原理YouTube频道与Google账号绑定。通过API查询channels.list指定managedByMefalse并以idGaiaID为条件可以找到该账号拥有的公开频道。价值YouTube频道名、描述、内容、订阅数、公开视频列表是了解目标兴趣、职业甚至生活状态的宝贵来源。频道ID本身也是一个重要的标识符。5.3 Google Drive 公开文件枚举 (ghunt drive)这个模块专门搜索目标账号在Google Drive中设置为“对知道链接者公开”或“公开在网络上”的文件。原理使用Drive API的files.list接口配合查询参数me in owners和visibility anyoneWithLink或publicOnTheWeb。它无法访问任何需要密码或特定Google账号权限的私有文件。操作你需要先通过ghunt email获取目标的Gaia ID然后运行ghunt drive gaia_id输出文件列表包括文件名、文件ID、MIME类型判断是文档、表格、幻灯片还是图片等、创建/修改时间、以及直接的分享链接。警告请勿随意访问或下载这些文件除非在法律允许的调查范围内。仅仅枚举列表本身已经提供了大量元数据。5.4 Google Maps 贡献信息查询 (ghunt maps)很多人会在Google Maps上发布地点评论、上传照片。这些信息通常与个人资料关联。原理这个模块更依赖于浏览器Cookie。它需要模拟一个已登录的浏览器会话访问Google Maps的特定用户贡献页面格式如https://www.google.com/maps/contrib/gaia_id。通过解析这个HTML页面来提取公开的评论、评分和照片数量。操作ghunt maps gaia_id限制如果目标用户将其Maps贡献设置为私密或者从未使用过Maps贡献功能则无法获取信息。此功能对Cookie状态非常敏感。5.5 Google Photos 调查 (ghunt photos)这是高级功能用于检查是否存在通过Google Photos分享的相册。原理Google Photos的分享链接包含一个长随机字符串。GHunt无法猜解这些链接。但是如果通过其他途径例如在社交媒体上发现了分享链接你可以用这个模块来分析该相册提取图片的EXIF数据如果未被剥离其中可能包含拍摄时间、设备型号甚至GPS坐标。操作ghunt photos photos_share_link重要提醒此功能威力巨大隐私敏感性极高。务必确保你分析的分享链接是目标主动公开分享的例如发布在公开博客、论坛上而不是通过非正当途径获得的私密链接。6. 实战演练一个完整的调查案例假设我们在一个技术论坛上发现了一个用户他的个人资料里只留了一个邮箱alex.tech.reviewergmail.com。我们想对他进行基本的背景了解仅使用公开信息。6.1 第一步基础邮箱侦查ghunt email alex.tech.reviewergmail.com假设返回结果如下[] Google ID found ! • Gaia ID: 115792089237316195423570985008687907852 [] Name found ! • Name: Alex Johnson [] Profile picture found ! • Link: https://.../photo.jpg • Saved to: alex.johnson.jpg [] YouTube channel found ! • Channel ID: UC1234567890abcdef • Channel URL: https://www.youtube.com/channel/UC1234567890abcdef • Name: Alexs Gadget Lab • Subscribers: 45K初步分析我们知道了他的全名Alex Johnson看到了他的头像可以用于反向图片搜索最重要的是找到了一个拥有4.5万订阅者的YouTube频道“Alexs Gadget Lab”。这立刻将他的身份从一个匿名邮箱关联到了一个公开的内容创作者。6.2 第二步深入YouTube频道虽然GHunt的email命令给出了频道基本信息我们可以手动访问该频道https://www.youtube.com/channel/UC1234567890abcdef获取更多信息频道描述、近期视频主题、视频风格、可能提到的其他社交账号Twitter, Instagram链接等。这超出了GHunt自动化的范围但却是调查的必要延伸。6.3 第三步检查公开的Google Drive文件使用上一步获取的Gaia IDghunt drive 115792089237316195423570985008687907852假设返回[] Found 3 public file(s) ! 1. File Name: Public_Speaking_Engagements_2023.pptx • File ID: 1AbCdEfGhIjKlMnOpQrStUvWxYz • MIME Type: application/vnd.google-apps.presentation • Created: 2023-08-15 • Link: https://docs.google.com/presentation/d/1AbCdEfGhIjKlMnOpQrStUvWxYz/edit?uspsharing 2. File Name: Conference_Budget.xlsx • File ID: 2ZyXwVuTsRqPoNmLkJiHgFeDcBa • MIME Type: application/vnd.google-apps.spreadsheet • Created: 2023-07-22 • Link: https://docs.google.com/spreadsheets/d/2ZyXwVuTsRqPoNmLkJiHgFeDcBa/edit?uspsharing ...分析我们发现目标公开分享了两个文件一个是关于2023年公开演讲的PPT另一个是会议预算表。注意我们不会直接点击链接去查看内容除非有明确的合法授权但文件名和元数据已经提供了宝贵信息他可能在2023年8月左右进行过公开演讲并且参与过需要预算规划的会议活动。这暗示了他可能是一名经常参加行业会议的科技博主或专业人士。6.4 第四步查看Google Maps足迹ghunt maps 115792089237316195423570985008687907852假设返回[] Maps contributions found ! • Reviews: 127 • Photos: 42 • Level: Local Guide Level 6 • Profile: https://www.google.com/maps/contrib/115792089237316195423570985008687907852分析目标是一位活跃的Google Maps本地向导Local Guide发布了127条评论和42张照片。我们可以手动访问其贡献页面需在已登录辅助账号的浏览器中查看他常去的地点类型科技公司、咖啡馆、机场、餐厅这能勾勒出他的生活/工作区域和消费习惯。6.5 信息整合与画像通过不到5分钟的命令行操作我们从一个孤零零的邮箱构建出了一个相对立体的画像身份Alex Johnson科技内容创作者。线上活动运营着一个4.5万订阅的YouTube频道“Alexs Gadget Lab”。职业相关可能进行公开演讲参与会议策划从Drive文件名推断。线下活动活跃于某个城市的本地生活是Google Maps的资深贡献者。数字足迹在Google生态中留下了头像、姓名、频道、公开文档、地图评论等多处痕迹。这个案例展示了GHunt如何将散落在不同Google服务中的公开信息点快速串联成线。对于安全评估这显示了Alex的Google账号暴露面较大对于调查这提供了多个可深入的方向YouTube内容分析、地图活动分析。7. 高级技巧与自动化当你熟悉基础操作后可以尝试以下技巧提升效率7.1 使用JSON格式输出进行自动化分析GHunt支持将结果输出为JSON格式便于用脚本Python, jq进行后续处理。ghunt email targetgmail.com --json result_email.json ghunt drive gaia_id --json result_drive.json你可以编写一个Python脚本自动解析这些JSON文件提取关键字段如姓名、频道ID、文件列表并保存到数据库或生成报告。7.2 结合其他OSINT工具GHunt是Google生态的专家但不是全能选手。它的结果应该与其他工具结合反向图片搜索将GHunt下载的头像上传到Google Images、Yandex Images等进行搜索可能找到目标在其他网站如LinkedIn, Twitter使用的同一头像。用户名枚举获得姓名“Alex Johnson”后可以使用sherlock、maigret等工具检查这个用户名在数百个社交平台上的注册情况。域名/邮箱关联如果目标是企业邮箱如alextechcompany.com可以对域名techcompany.com进行Whois查询、子域名枚举等。7.3 编写简单的调查脚本你可以创建一个Bash或Python脚本将GHunt命令串联起来实现一键化调查。例如一个简单的Bash脚本框架#!/bin/bash TARGET_EMAILtargetexample.com echo [*] 开始调查邮箱: $TARGET_EMAIL echo [*] 运行 ghunt email... ghunt email $TARGET_EMAIL --json ${TARGET_EMAIL}_email.json # 从JSON中提取Gaia ID (这里需要jq工具) GAIA_ID$(jq -r .gaia_id ${TARGET_EMAIL}_email.json 2/dev/null) if [ -n $GAIA_ID ] [ $GAIA_ID ! null ]; then echo [] 获取到Gaia ID: $GAIA_ID echo [*] 运行 ghunt drive... ghunt drive $GAIA_ID --json ${TARGET_EMAIL}_drive.json echo [*] 运行 ghunt maps... ghunt maps $GAIA_ID --json ${TARGET_EMAIL}_maps.json else echo [-] 未能获取Gaia ID停止后续调查。 fi echo [*] 调查完成。结果保存在JSON文件中。8. 常见问题、错误排查与伦理边界8.1 常见错误与解决方案错误信息可能原因解决方案Could not find the browser cookie.1. 浏览器未运行。2. 浏览器未登录正确的Google账号。3. GHunt配置的浏览器类型与实际不符。4. 浏览器Cookie被加密某些Linux发行版。1. 确保Chrome/Firefox正在运行。2. 在浏览器中登录你的辅助Google账号并确保是当前活跃账号。3. 重新运行ghunt config选择正确的浏览器。4. 对于Linux尝试将Chrome的密码存储改为“基本文本”或使用Firefox。Invalid API KeyAPI密钥错误或未启用所需API。1. 检查API密钥是否输入正确。2. 登录Google Cloud Console确认已启用People, YouTube, Drive, Gmail API。3. 确认API密钥已限制在仅这几个API使用。HTTP 403 - Permission DeniedAPI调用次数超限或配额用尽。Google Cloud项目对新账户有每日免费配额。如果超限需要等待24小时重置或升级到付费账户申请更高配额。在Cloud Console的“配额”页面查看使用情况。No name/profile picture found.目标账号的Google个人资料设置为私密。这是正常情况说明目标隐私意识较强。可以尝试其他模块如Drive, Maps它们依赖不同的数据源。GHunt突然无法获取任何数据Google更新了API或页面结构导致GHunt失效。检查GHunt的GitHub仓库的Issues页面看是否有类似问题。开发者会持续更新以适配Google的变化。考虑更新GHunt到最新版本 (pipx upgrade ghunt)。8.2 最重要的部分伦理与法律边界这是使用GHunt或任何OSINT工具时必须时刻紧绷的一根弦。目的合法仅将工具用于授权下的安全评估、个人隐私检查、学术研究或合法的调查工作如记者调查公开信息。绝对禁止用于骚扰、跟踪、人肉搜索、商业间谍或任何侵犯他人隐私和合法权益的行为。数据公开GHunt获取的必须是公开信息。这意味着信息本身是目标用户选择公开或默认设置下对知道联系方式的人可见的。任何尝试绕过认证、破解密码、利用漏洞获取私密信息的行为都是非法的。遵守服务条款使用Google API必须遵守Google API服务条款。你的API密钥项目应设置合理的配额和限制避免滥用。知情与同意在对他人进行调查时如果可能应事先获得同意。在专业渗透测试中必须在明确授权的范围内进行。数据最小化只收集与调查目的直接相关且必要的信息。不要无差别地收集和存储个人数据。安全存储调查结果可能包含个人信息应安全地存储和处理防止数据泄露。个人体会我使用GHunt的主要场景有两个。一是内部红队演练在获得授权后用它来快速评估员工邮箱在互联网上的暴露情况生成安全意识培训的生动案例。二是个人数字隐私清理定期用自己的邮箱跑一遍检查是否有早年无意中公开的Drive文件或过度分享的Maps信息并及时调整隐私设置。工具本身无善恶全在于使用者的意图和方法。始终保持对法律的敬畏和对他人隐私的尊重是从事任何形式信息收集工作的基石。