mcpField
G
google-like-a-spy

google-like-a-spy

github.com/useosint安全571.7k 次安装12 周前更新
代码仓库

关于 google-like-a-spy

google-like-a-spy 是一份关于搜索运算符和索引的调查指南,面向授权的安全评估与公开资料研究。它比较不同搜索引擎的覆盖和运算符行为,并强调核验结果、记录证据及遵守访问边界。

主要功能

  1. 01比较搜索引擎覆盖与运算符差异
  2. 02介绍精确匹配和查询过滤
  3. 03指导跨引擎及专用索引搜索
  4. 04说明结果核验与置信度分级
  5. 05涵盖速率限制和自动化失效
  6. 06强调授权范围与证据记录

适用场景

  1. 01在授权评估中查找公开暴露的文件
  2. 02跨索引调查公开文档、代码或存储桶
  3. 03核验搜索结果并记录可复查的查询证据

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/useosint/skills --skill google-like-a-spy

安装后在 Claude Code 中输入/google-like-a-spy确认已加载。

附带文件reference/dork-cookbook.mdreference/engine-operators.md

详细介绍

搜索运算符

运算符可以把搜索框变成针对已抓取索引的筛选器。代价是,你查询的是别人的索引,而不是整个网络——不同搜索引擎的覆盖范围、时效性和运算符保真度差异很大。初学者常犯的错误是以为查询会按原样执行。Google 经常删改词项、提取词干并扩展同义词,因此,零结果的搜索语句和被悄悄改写的搜索语句看起来截然不同,却同样毫无用处。

不同任务该用哪个搜索引擎

需求使用原因
广泛覆盖主流网络Google索引最大,运算符保真度最差
可靠枚举 site: 结果、通过 IP/主机进行关联搜索Bing更严格地遵循运算符;支持 ip: 和 contains:
非拉丁文字、俄语/独联体/土耳其语内容、与图像相关的工作Yandex抓取优先级不同;图像匹配能力最强
匿名查询、快速切换搜索引擎DuckDuckGo、Startpage代理其他索引;可通过 bangs 跳转至不同搜索引擎
独立抓取(大型搜索引擎从未收录的内容)Mojeek、Marginalia、Brave使用自己的爬虫,规模较小,但确实有所不同
代码、存储桶、主机、存档专用索引通用网络索引从未抓取其中的大部分内容

不要只在一个搜索引擎上运行搜索语句。不同爬虫发现的页面不同;从未抓取某个 URL 的搜索引擎,也无法靠运算符让它出现在结果中。哪些运算符在哪些搜索引擎上有效,以及同一运算符在哪些地方含义不同,详见 reference/engine-operators.md。

仍然有效的运算符

  • "exact phrase" — 最实用的运算符。仍可能被改写(见下文),但这是你能提供的最强信号。
  • site: — 可接受完整主机名、可注册域名(匹配子域名)或顶级域名(site:gov.uk)。也可使用 -site: 排除结果。
  • filetype: — Google 文档中规定的形式。Bing 同时接受 filetype: 和 ext:;ext: 匹配 URL 扩展名,而不是通过内容检测得出的文件类型。对于 .env、.bak、.sql,通常这才是你需要的。
  • intitle: / allintitle:、inurl: / allinurl:、intext: / allintext:。all* 形式会应用于后续每个词项,但与其他运算符混用效果不佳——请单独使用。
  • 使用 YYYY-MM-DD 格式的 before: / after: — 按 Google 估算的文档日期筛选。该日期是推断得出的,且经常有误。它只是粗略筛选,并非证据。
  • 使用 -term 排除词项,使用大写的 OR 或 | 表示二选一,使用括号分组,使用 * 在短语中匹配单个词项。

仍有人提及、但已不再值得使用的运算符

cache: 和 info: 已停用,link: 早已撤下,任何残留行为都只是噪声;related: 的表现也不一致。inanchor: 和 AROUND(n) 从未有过官方文档,行为难以预测。强制纳入词项的 + 和扩展同义词的 ~ 已被彻底移除,前者由引号取代;daterange: 则已由 before: / after: 取代。使用这些运算符的搜索语句库会返回普通结果,而不是报错。

强制精确匹配

Google 的检索层是一个附加了关键词过滤器的语义匹配器。 它会丢弃它认为没有用的词语、替换为同义词,或纠正它认为是拼写错误的内容——而在查找用户名或错误字符串时,这恰恰是你不希望发生的。

  1. 查看结果标题。若 Google 丢弃了某个词语,会显示“Missing: <term>”,并附带一个“Must include:”链接。点击该链接会重新运行搜索,并强制包含该词语。如果看到此提示,说明你的 dork 没有按预期运行。
  2. 对每个不明显的词语分别加引号,而不只是给整个短语加引号。
  3. 切换到 Verbatim 模式(依次点击 Tools 和“All results”下拉菜单),以停用词干还原、同义词替换、拼写纠正和个性化功能。不使用该模式进行 dork 搜索,就只能靠猜。
  4. 展开重复内容过滤器。Google 会合并“非常相似”的结果,并在最后一页底部提供一个链接,可重复搜索并纳入这些结果。使用 site: 枚举时,这通常会让可见结果数量翻倍。
  5. 如果搜索结果仍优先显示更正后的拼写,说明查询被理解为导航意图。添加第二个罕见词语来消除这种歧义。

在目标自身网站之外查找其资料

组织泄露的大部分内容都托管在其他地方,因此应全面搜索各类托管平台,而不是寄希望于在目标域名上使用 dork 就能找到:文本粘贴和匿名投递平台、代码沙盒、已发布到 Web 的办公文档、全文文档库、使用服务提供商自有主机名的云对象存储(例如 s3.amazonaws.com 或 blob.core.windows.net),以及默认允许公开分享的第三方 SaaS 服务——看板、维基、表单后端、状态页面。对提供商使用 site:,而不是对客户使用。

以防御为目的进行发现式 dork 搜索

请仅对你获授权评估的域名或自己的资产运行这些搜索。阅读搜索结果是被动行为——搜索引擎已经抓取了页面。但获取文件、下载备份或登录你找到的面板则不属于被动行为,法律界限就在这里。

按大致命中率排列,高效搜索模式包括:迁移后未关闭的目录列表(intitle:"index of")、按扩展名搜索配置文件和环境文件、数据库转储和备份文件、索引文本中形似凭据的字符串、服务提供商主机名下的对象存储,以及通过主机名暴露的管理或监控界面。包含人员和文档搜索查询的完整列表见 reference/dork-cookbook.md。

搜索引擎只会索引被其他内容链接到的页面,因此未被链接的面板和存储桶列表很容易被漏掉——如需查找在线服务,请使用 find-exposed-servers。即使某个命中现在返回 404,它仍然是证据:将 URL 提交给 read-deleted-pages。

速率限制、CAPTCHA,以及自动化为何会失效

检测主要不取决于请求速率,而是引擎会对客户端进行指纹识别: TLS 握手特征、请求头顺序、是否执行了 JavaScript、 时序行为,以及源 IP 的信誉。一个从未渲染过 JavaScript 的数据中心 IP, 首次请求就会触发检查;而使用真实浏览器、以人类速度操作的住宅 IP,整天搜索也不会有问题。这就是为什么放慢循环速度往往无济于事,而手动输入同一查询却能成功。

最棘手的问题不是 CAPTCHA,而是结果集悄然降级,看起来却一切正常:运算符被静默忽略、结果遭到截断,却没有任何提示。切勿假设脚本查询返回的结果与浏览器查询相同。

合规途径,按优先顺序排列。官方搜索 API,如果引擎提供此类服务:符合条款,但要预期存在配额限制,且结果与面向消费者的界面不一致,因为 API 的索引和排名往往是不同的产品。商业 SERP 提供商,由其运行代理基础设施并返回结构化结果——需要付费,而且仍是在他人条款下抓取。自建 SearXNG 实例,用于汇总不同引擎的结果;切勿使用公共实例,否则你会继承陌生人的速率限制信誉,还会把自己的选择器交给其运营者。以及手动使用浏览器;对于真实调查所需的 20 到 50 次查询,这比构建自动化更有效。

通过轮换 IP 规避检测属于绕过技术访问控制——其法律风险与抓取截然不同,此处不予讨论。查询本身也会被记录并追溯到你,因此应通过不记录日志的引擎或隔离环境路由敏感查询,参见 investigate-without-getting-made。

专用索引

以下每种索引收录的语料各不相同,可以回答 Google 无法回答的问题。

  • 代码搜索。 GitHub 代码搜索覆盖公开仓库;grep.app 和 searchcode 则跨托管平台建立索引。搜索内部主机名、密钥前缀和 目标的电子邮件域名,而不是其名称。参见 secrets-in-git-history。
  • 云存储索引。 Grayhat Warfare 等存储桶索引收录的开放对象存储远多于搜索引擎,因为列表页面很少会从任何可抓取的位置链接过去。
  • 文档库。 Scribd、Issuu、SlideShare、DocumentCloud 和 学术聚合平台会对上传内容进行全文索引,从而发现埋在 PDF 中的公司名称,而该 PDF 在其自有域名上根本找不到。
  • 原始 HTML 索引。 Publicwww 等服务会搜索页面源码,让你能够通过分析 ID 和标签管理器容器进行追踪。共享的跟踪器 ID 比共享 IP 更能证明共同所有权:同一个账号配置了两者。
  • 存档索引。 Wayback CDX API 和 Common Crawl 索引是可查询的 URL 语料,而非按排名排列的搜索结果;它们会列出爬虫观测到的路径,包括很久以前就已移除的路径(read-deleted-pages)。扫描器索引的是主机,而不是页面(find-exposed-servers);泄露语料见 find-leaks-in-the-wild。

这里会出错

  • 你输入的查询并不是实际运行的查询。 词干提取、同义词扩展、拼写纠正和术语丢弃都是默认行为;不使用 Verbatim,零结果就毫无意义。
  • 零结果只意味着一个索引没有找到结果——这反映的是该引擎的抓取情况和对搜索运算符的支持,而不是整个网络的情况。在记录缺失之前,需要查询三个引擎并检查存档。
  • site: 永远无法完整枚举。 Google 会大幅截断并去重,Bing 能深入一些,但两者都不完整。结果数量只是估算值,永远不要引用——如果需要准确结果,就翻到最后一页。
  • 索引只是过时的镜像。 命中结果描述的是抓取时的页面;实时页面可能已经不同,也可能已不存在,而摘要可能是唯一留存的副本。请对照实时 URL 核实,并立即将其存档。
  • before:/after: 筛选的是推断出的日期。 由 CMS 驱动的网站可能会在页面渲染时重置日期。绝不要用它来确定内容的发布时间。
  • 个性化和地理位置会改变结果。 两名调查人员运行完全相同的 dork,得到的页面也可能不同,因此要记录引擎、查询和日期。
  • 复制来的 dork 库会悄无声息地过时。 已弃用的运算符会变成搜索词,而不是报错,于是查询返回看似合理的常规结果,你却不会注意到筛选条件已不再生效。
  • 伪装内容和索引投毒。 爬虫看到的内容可能与用户看到的不同,SEO 垃圾内容也会把目标名称植入无关页面。提及不等于存在关联。

置信度分级

  • 已确认——你检索并阅读了实时文档或其存档副本,内容直接陈述了该事实,且其元数据或托管站点佐证了来源。
  • 较可能——权威站点上出现了独特的精确匹配字符串,或两个独立抓取结果给出了相同事实。无法打开的摘要,最多只能算较可能。
  • 未确认——只有摘要;命中转载他人内容的网站;匹配的是常见词;或查询未在 Verbatim 中运行。
  • 已排除——只有不使用 Verbatim 才能得到的匹配结果,或是在由机器自动抓取名称并生成内容的页面上出现的提及。

引用 URL、引擎、查询字符串和检索日期。无法让他人重新运行的结果,不是证据。

示例

目标:为供应商尽职调查文件确认 Example Corp 的采购负责人。该公司网站未列出董事会以下级别的姓名。

在 Verbatim 中运行 site:example.com filetype:pdf procurement,返回了四份文档。其中一份供应商入驻资料包的 PDF 属性中含有作者字符串 m.okafor,模板路径则指向某部门的网络共享盘——一份正文没有提及任何人的文档,提供了两个新的筛选线索。

行不通的做法:"m.okafor" site:linkedin.com/in 没有返回结果,单独搜索这个账号名也一样。可能没有个人资料,也可能该资料不在索引中。

改用邮箱格式后,搜索奏效了。"[email protected]" 命中一个无关域名上的公开邮件列表存档,其中同一个人用全名和职务签署了一则技术问题。随后,对目标站点进行 Bing ext:xlsx 扫描,又发现了一份佐证其职务的供应商名册。

评级:职务为已确认,依据是两份均已检索并阅读的文档。身份为较可能——账号名与姓名之间的对应关系仅依据一则本人署名的帖子。

扩展搜索方向

新的筛选条件前往
通过 filetype: 找到的文档文件secrets-in-file-metadata
已索引 URL 中的主机名和子域名find-hidden-subdomains、who-owns-this-domain
命中结果背后的在线服务和存储桶find-exposed-servers
代码库、gists、密钥前缀secrets-in-git-history
已索引文本中的账号和用户名hunt-a-handle
从文档中收集的电子邮件地址what-an-email-reveals
员工页面上的姓名和职位find-anyone、x-ray-a-company
粘贴网站命中结果和泄露的筛选条件find-leaks-in-the-wild
现在返回 404 的任何结果read-deleted-pages
由此形成的主机和身份群组graph-the-network

法律与服务条款说明

自动查询违反了所有主要搜索引擎的服务条款。这属于合同问题,通常会导致封禁;但通过轮换 IP 或以编程方式破解 CAPTCHA 来规避封禁,则属于规避技术访问控制,在多个司法管辖区都是更严重的问题。

发现公开文件并不意味着获准获取该文件。搜索结果是公开的,但其背后的文件仍可能受计算机滥用法保护;“它在 Google 上”也未能成为有效辩护。在获准的评估中,应记录相关情况,不要外传数据,并通过约定的渠道报告。在评估范围之外,应通知运营方或国家 CERT,并停止操作。

已索引的个人数据仍是个人数据——搜索不会改变这一点。去索引请求也会导致某些材料在欧洲搜索结果中被刻意隐藏,却仍在其他地区显示,因此在断定内容已消失之前,请先比较不同地区的结果。请遵循 ../../ETHICS.md 尽量减少数据收集。

评论

支持 Markdown