1. 信息收集在渗透测试中的真实定位
很多人刚接触渗透测试的时候,脑子里想的都是漏洞利用、提权、拿shell,觉得信息收集就是随便扫扫端口、看看指纹,没什么技术含量。我刚开始学的时候也是这个心态,直到有一次做授权测试,目标是一个看起来平平无奇的企业门户,端口扫描只开了80和443,目录扫描也没什么收获,差点就放弃了。后来换了个思路,从搜索引擎入手,花了大概四十分钟,找到了目标单位一个测试环境的后台入口,那个后台没有做任何访问限制,而且用的是默认口令。这件事让我彻底改变了对信息收集的认知——渗透测试的胜负,很多时候在信息收集阶段就已经决定了。
Google hacking,也叫Google dorking,是信息收集环节里性价比极高的一种手段。它不需要你有多深的漏洞挖掘功底,也不需要你掌握多复杂的工具链,核心就是利用搜索引擎的高级语法,从公开信息中精准定位敏感资源。说白了,搜索引擎就像一个巨大的、持续更新的互联网档案库,它把大量本不该被公开索引的页面、文件、接口都收录了进去,而Google hacking就是教你如何用正确的“钥匙”去打开这些抽屉。
这篇文章适合谁看?如果你是刚入行的安全从业者,想系统学习信息收集的实战方法,那这篇内容会给你一套可以直接上手的操作框架。如果你已经有一定经验,但Google hacking用得不多,或者只会几个基础语法,那这篇文章会帮你把零散的知识点串成体系,补充很多实战中才会遇到的细节和坑。如果你是对网络安全感兴趣的技术爱好者,只要你有基本的网络常识,跟着做也能理解其中的逻辑。
需要提前说明的是,所有Google hacking的操作都必须在合法授权的前提下进行。未经授权对目标进行信息收集和测试,在法律和职业道德上都是不可接受的。这篇文章讲的是方法论和技术原理,请务必在合规的框架内使用。
2. Google hacking的核心原理与语法体系拆解
2.1 搜索引擎为什么会“泄露”敏感信息
要理解Google hacking,先得搞清楚一个根本问题:为什么搜索引擎能搜到那些本不该公开的东西?这背后有几个层面的原因。
第一是爬虫的贪婪性。搜索引擎的爬虫会沿着页面上的链接不断抓取,很多站点在开发测试阶段没有做好访问控制,测试页面、临时文件、备份文件被爬虫抓到了,就会被索引。等站点正式上线后,这些页面可能还在,但开发者已经忘了它们的存在。
第二是robots.txt的悖论。很多管理员会用robots.txt来告诉爬虫“不要抓取某些目录”,但robots.txt本身是公开可读的。攻击者看到robots.txt里写了Disallow: /admin/,反而等于被告知了敏感目录的位置。这就像你把贵重物品锁在一个房间里,然后在门口贴了张纸条说“这个房间里有贵重物品,请不要进去”。
第三是文件类型的索引。搜索引擎不仅能索引HTML页面,还能索引PDF、Excel、Word、配置文件等。很多企业把内部文档、会议纪要、甚至包含账号密码的配置文件放在了公网可访问的目录下,这些文件被搜索引擎收录后,通过特定的文件类型语法就能搜到。
第四是缓存机制。搜索引擎会保存页面的快照,即使原始页面后来被删除了,缓存版本可能还存在。这意味着你可以看到目标站点过去某个时间点的状态,有时候能发现已经下线的敏感接口或页面。
理解了这些原理,你就明白Google hacking的本质:它不是攻击搜索引擎,而是利用搜索引擎已经完成的索引工作,反向定位那些被意外暴露的信息。
2.2 核心语法逐个拆解
Google hacking的语法并不复杂,常用的就那么十几个,但每个都有它的适用场景和细节。我下面按使用频率和重要性来逐个拆解。
site: 限定搜索范围
这是最常用的语法之一,格式是site:目标域名。它的作用是只返回指定域名下的结果。比如site:example.com就只搜example.com这个站点。实战中,你可以用它来摸清目标站点的整体结构,看看有哪些子域名被索引了。
有个细节很多人不知道:site:后面跟的域名不带www也可以,搜索引擎会自动匹配子域名。比如site:example.com可能会返回mail.example.com、blog.example.com等子域名的结果。如果你想精确限定某个子域名,就写完整的子域名。
inurl: URL中包含指定字符
格式是inurl:关键词,返回URL中包含该关键词的页面。这个语法在找特定功能页面时特别好用。比如inurl:admin能找到URL里带admin的页面,inurl:login能找到登录页面,inurl:upload能找到上传功能页面。
实战中,inurl:经常和其他语法组合使用。比如site:example.com inurl:admin就是在example.com站点里找URL包含admin的页面。这样能大幅缩小范围,提高效率。
intitle: 页面标题中包含指定字符
格式是intitle:关键词,返回HTML标题标签中包含该关键词的页面。这个语法适合找特定类型的页面,比如intitle:"index of"能找到目录列表页面,intitle:"登录"能找到中文登录页面。
intitle:和inurl:的区别在于,前者匹配的是页面标题,后者匹配的是URL。有时候一个页面的URL很普通,但标题里写了“后台管理”,这时候intitle:就派上用场了。
intext: 页面正文中包含指定字符
格式是intext:关键词,返回页面正文中包含该关键词的页面。这个语法适合找包含特定文本的页面,比如intext:"默认密码"、intext:"数据库连接"等。
intext:的搜索范围比intitle:大,返回结果也更多,但精确度相对低一些。实战中通常和其他语法组合使用来缩小范围。
filetype: 限定文件类型
格式是filetype:扩展名,返回指定类型的文件。这个语法在找敏感文档时非常有用。常见的敏感文件类型包括:
| 文件类型 | 扩展名 | 可能包含的敏感信息 |
|---|---|---|
| Excel表格 | xls, xlsx | 员工名单、财务数据、客户信息 |
| Word文档 | doc, docx | 内部通知、合同、方案 |
| PDF文档 | 报告、手册、配置说明 | |
| 文本文件 | txt | 日志、配置、密码 |
| 配置文件 | conf, config | 数据库连接、API密钥 |
| 数据库文件 | sql, db | 数据导出、备份 |
| 日志文件 | log | 访问记录、错误信息 |
组合使用示例:site:example.com filetype:xls就是找example.com站点下的Excel文件。
ext: 等同于filetype:
ext:和filetype:功能基本一样,只是写法不同。比如ext:pdf和filetype:pdf效果相同。有些老资料里用ext:比较多,现在两种都支持。
cache: 查看缓存版本
格式是cache:URL,返回搜索引擎保存的该URL的缓存版本。这个语法在原始页面已经无法访问时特别有用。比如某个页面被删除了,但缓存里还有,你就能看到它之前的内容。
不过要注意,缓存版本可能不是最新的,而且搜索引擎对缓存的保留时间有限,不是所有页面都有缓存。
link: 查找反向链接
格式是link:URL,返回链接到该URL的页面。这个语法可以用来分析目标站点的外部链接情况,看看有哪些外部站点链接到了目标。不过现在搜索引擎对link:的支持不如以前了,返回结果可能不完整。
related: 查找相关站点
格式是related:URL,返回与指定URL相似的站点。这个语法可以用来发现同类型的其他站点,在分析目标所在行业时有一定参考价值。
双引号 精确匹配
用双引号把关键词括起来,表示精确匹配这个短语。比如"powered by discuz"只会返回包含这个完整短语的页面,而不是分别包含powered、by、discuz的页面。这个技巧在找特定CMS或框架时很常用。
减号 排除关键词
在关键词前面加减号,表示排除包含该关键词的结果。比如site:example.com -inurl:blog就是找example.com站点下URL不包含blog的页面。这个语法在过滤噪音时很有用。
通配符
星号可以代替任意字符。比如inurl:admin*可以匹配admin、admin1、admin2等。不过通配符的使用有一些限制,不是所有场景都支持。
组合语法
真正强大的地方在于组合使用。比如:
site:example.com inurl:admin filetype:php这个查询的意思是:在example.com站点下,找URL包含admin的PHP文件。这样就能精准定位到后台管理相关的PHP页面。
再比如:
site:example.com intitle:"index of" "parent directory"这个查询找的是example.com站点下标题包含“index of”且正文包含“parent directory”的页面,也就是目录列表页面。
2.3 语法使用的优先级与策略
语法这么多,实战中怎么用?我的经验是分三个阶段:
第一阶段是广撒网。先用site:目标域名摸清目标站点的整体规模,看看大概有多少页面被索引,有哪些子域名。这一步不需要太精确,目的是建立对目标的整体认知。
第二阶段是定向搜索。根据第一阶段的结果,选择重点方向深入。比如发现目标有多个子域名,就逐个用site:子域名去搜;发现目标用了某种CMS,就用inurl:和intitle:去找特定功能的页面。
第三阶段是精准定位。在定向搜索的基础上,用filetype:、intext:等语法进一步缩小范围,找到具体的敏感文件或页面。
这个过程中,关键词的选择比语法本身更重要。你得知道目标可能暴露哪些类型的信息,才能选对关键词。比如找配置文件,关键词可能是“config”、“database”、“password”;找后台入口,关键词可能是“admin”、“login”、“manage”;找敏感文档,关键词可能是“内部”、“机密”、“员工”。
3. 实战操作:从零开始的信息收集流程
3.1 前期准备与目标确认
在开始任何操作之前,有几件事必须先做好。
确认授权范围。这是最重要的一步。你需要明确知道哪些域名、哪些IP段、哪些子域名在授权范围内。很多项目的授权书里会写明“仅限xxx.com及其子域名”,那你就不能去搜其他关联域名。如果授权范围不清晰,一定要先和相关负责人确认,不要凭感觉扩大范围。
整理目标信息。把已知的目标域名、子域名、IP地址、业务系统名称等信息整理成一张表。这些信息可能来自之前的端口扫描、whois查询、DNS枚举等环节。Google hacking不是孤立的,它应该和其他的信息收集手段配合使用。
准备搜索环境。建议使用一个干净的浏览器环境,不要登录个人账号,避免搜索行为被关联到个人身份。同时准备好记录工具,把搜索到的有价值信息及时记录下来。我一般用简单的文本文件,按“域名-页面-发现内容”的格式记录,方便后续整理。
了解搜索引擎的基本限制。搜索引擎对搜索频率有限制,短时间内大量搜索可能会触发验证码或临时封禁。所以操作时要有节奏,不要疯狂刷搜索。另外,不同搜索引擎的语法支持程度不同,Google的语法支持最完善,Bing和百度也有类似功能但细节有差异。
3.2 基础信息搜集:摸清目标轮廓
第一步是用site:语法摸清目标的整体情况。
site:example.com这个搜索会返回example.com域名下所有被索引的页面。你需要注意几个点:
- 返回结果的总数大概是多少?这能反映目标站点的规模。
- 返回的页面类型有哪些?是产品页、新闻页、还是论坛帖子?
- 有没有出现子域名?比如mail.example.com、blog.example.com等。
如果返回结果很多,可以加上关键词缩小范围。比如:
site:example.com 后台 site:example.com 管理 site:example.com 登录这些搜索能帮你快速找到可能的后台入口。
接下来,用site:配合子域名枚举。很多企业的子域名命名有规律,比如:
- mail.example.com(邮件系统)
- oa.example.com(办公系统)
- test.example.com(测试环境)
- dev.example.com(开发环境)
- admin.example.com(管理后台)
- api.example.com(API接口)
你可以逐个搜索这些常见的子域名,看看哪些被索引了。被索引的子域名往往意味着这个系统曾经或正在对公网开放。
3.3 敏感文件定位:filetype的高级用法
文件类型搜索是Google hacking里产出最高的方向之一。很多企业会把内部文档放在公网可访问的目录下,这些文档被搜索引擎收录后,通过filetype:就能找到。
找Excel表格:
site:example.com filetype:xls site:example.com filetype:xlsxExcel表格里可能包含员工名单、客户信息、财务数据、项目计划等。我见过最夸张的一次,某单位的Excel表格里直接列了所有员工的姓名、工号、部门、邮箱和初始密码。
找Word文档:
site:example.com filetype:doc site:example.com filetype:docxWord文档里可能有内部通知、合同模板、技术方案、会议纪要等。这些文档有时候会包含系统架构信息、账号密码、接口地址等敏感内容。
找PDF文档:
site:example.com filetype:pdfPDF文档通常是报告、手册、说明书。有些技术手册里会写默认口令、配置方法、接口文档,对后续测试很有帮助。
找配置文件:
site:example.com filetype:conf site:example.com filetype:config site:example.com filetype:ini site:example.com filetype:env配置文件是含金量最高的目标之一。.env文件里经常包含数据库连接信息、API密钥、SMTP配置等。.conf和.config文件里可能有服务器配置、应用配置。
找数据库文件:
site:example.com filetype:sql site:example.com filetype:db site:example.com filetype:mdb数据库导出文件如果被放在公网,那基本等于把整个数据库拱手让人。.sql文件里是完整的建表和插入语句,.mdb是Access数据库文件。
找日志文件:
site:example.com filetype:log日志文件里可能有访问记录、错误信息、调试信息。有时候日志里会记录请求参数,能帮你了解系统的接口结构。
找备份文件:
site:example.com filetype:bak site:example.com filetype:backup site:example.com filetype:old site:example.com filetype:zip site:example.com filetype:rar site:example.com filetype:tar site:example.com filetype:gz备份文件是另一个高价值目标。网站备份、数据库备份、代码备份如果放在公网,里面的信息量非常大。
3.4 目录列表与索引页发现
目录列表页面(Directory Listing)是服务器配置不当导致的,它会把目录下的所有文件列出来。这种页面通过intitle:"index of"就能找到。
site:example.com intitle:"index of" site:example.com intitle:"index of" "parent directory""parent directory"是目录列表页面常见的文字,加上它能提高精确度。
找到目录列表页面后,你可以直接浏览目录下的文件。有时候能看到备份文件、日志文件、上传的文件等。我曾在一次测试中通过目录列表找到了一个包含所有用户上传文件的目录,里面有身份证扫描件、合同扫描件等敏感资料。
除了intitle:"index of",还可以试试:
site:example.com intitle:"目录" site:example.com intitle:"文件列表"有些中文系统的目录列表页面标题是中文的。
3.5 登录入口与后台定位
找后台入口是Google hacking的经典应用场景。常用的搜索组合包括:
site:example.com inurl:admin site:example.com inurl:login site:example.com inurl:manage site:example.com inurl:system site:example.com inurl:console site:example.com inurl:dashboard site:example.com inurl:portal中文系统的后台入口可能用拼音:
site:example.com inurl:guanli site:example.com inurl:denglu site:example.com inurl:houtai还可以结合标题搜索:
site:example.com intitle:后台 site:example.com intitle:管理 site:example.com intitle:登录 site:example.com intitle:管理系统有些后台入口的URL经过伪装,但页面标题没改,这时候intitle:就比inurl:有效。
另外,很多CMS有默认的后台路径,比如:
- WordPress: /wp-admin/
- Drupal: /user/login
- Joomla: /administrator/
- Discuz: /admin.php
- phpMyAdmin: /phpmyadmin/
你可以用inurl:去搜这些默认路径:
site:example.com inurl:wp-admin site:example.com inurl:phpmyadmin site:example.com inurl:administrator3.6 错误信息与敏感参数挖掘
错误信息页面有时候会泄露很多内部信息,比如文件路径、数据库版本、框架版本等。这些信息对后续的漏洞利用很有帮助。
site:example.com intext:"error" site:example.com intext:"warning" site:example.com intext:"sql syntax" site:example.com intext:"stack trace"中文错误信息:
site:example.com intext:"错误" site:example.com intext:"异常" site:example.com intext:"警告"另外,URL参数也是信息收集的重点。有些参数可能暴露内部逻辑:
site:example.com inurl:id= site:example.com inurl:page= site:example.com inurl:file= site:example.com inurl:path= site:example.com inurl:url= site:example.com inurl:redirect=这些参数往往是注入、文件包含、SSRF等漏洞的入口点。通过Google hacking找到这些带参数的URL,可以为后续测试提供目标。
3.7 缓存与历史版本利用
搜索引擎的缓存功能可以帮你看到页面过去的状态。有些页面可能已经删除了敏感内容,但缓存里还有。
cache:example.com/sensitive-page不过缓存的使用有几个限制:一是不是所有页面都有缓存,二是缓存可能不是最新的,三是搜索引擎对缓存的保留时间有限。所以缓存更多是作为补充手段,不能完全依赖。
另外,还可以用搜索引擎的“网页快照”功能,在搜索结果里点击下拉箭头就能看到。快照里会显示页面被索引时的内容,有时候能看到已经修改掉的信息。
4. 常见问题与避坑经验实录
4.1 搜索结果太多或太少怎么办
这是最常见的问题。搜索结果太多,说明关键词太宽泛;结果太少,说明关键词太窄或者语法有问题。
结果太多时的处理:
- 加上
site:限定域名 - 加上
filetype:限定文件类型 - 加上
inurl:或intitle:限定位置 - 用双引号做精确匹配
- 用减号排除不相关的内容
比如site:example.com 后台可能返回很多结果,改成site:example.com intitle:后台管理就精确多了。
结果太少时的处理:
- 去掉一些限定条件
- 换同义词或近义词
- 试试不同的搜索引擎
- 检查语法有没有写错
比如site:example.com intitle:"后台管理系统登录"可能一个结果都没有,改成site:example.com intitle:后台就能找到一些。
4.2 搜索引擎语法不生效的排查
有时候你写了语法,但搜索结果明显不对。可能的原因有:
搜索引擎不支持该语法。不同搜索引擎对语法的支持程度不同。Google支持最完善,Bing次之,百度又次之。如果你在用百度,很多Google的语法可能不生效。
语法拼写错误。site:、inurl:、intitle:、intext:、filetype:这些语法后面都要跟冒号,而且冒号是英文冒号。写成中文冒号就不生效。
语法之间缺少空格。多个语法组合时,语法之间要有空格。比如site:example.com inurl:admin是对的,site:example.com inurl:admin如果中间没空格就可能出问题。
关键词被搜索引擎忽略。有些常见词(如“的”、“是”、“and”、“the”)会被搜索引擎自动忽略,即使你用了intext:也可能不生效。
搜索频率过高被限制。如果短时间内搜索太多次,搜索引擎可能会要求你输入验证码,这时候语法可能不生效。等一段时间再试。
4.3 如何判断搜到的信息是否有价值
搜到一堆结果,怎么判断哪些值得深入?我的经验是看几个维度:
时效性。页面是什么时候的?如果是几年前的,可能已经失效了。但有时候老页面反而有价值,因为管理员可能忘了它的存在。
敏感性。页面内容涉及什么?如果是公开的产品介绍,价值不大;如果是内部文档、配置文件、后台入口,价值就高。
可访问性。页面现在还能访问吗?有些搜索结果点进去是404,说明页面已经删除了。但缓存里可能还有。
关联性。这个页面和其他信息能关联起来吗?比如你找到了一个后台入口,又找到了一个包含账号密码的文档,两者结合就可能直接进入系统。
4.4 常见问题速查表
| 问题 | 可能原因 | 解决方法 |
|---|---|---|
| 搜索结果为空 | 关键词太窄、语法错误、搜索引擎不支持 | 放宽关键词、检查语法、换搜索引擎 |
| 搜索结果太多 | 关键词太宽泛 | 加限定条件、用精确匹配、排除词 |
| 语法不生效 | 拼写错误、中文冒号、搜索引擎不支持 | 检查拼写、用英文冒号、换Google |
| 被要求输入验证码 | 搜索频率过高 | 降低频率、换IP、等一段时间 |
| 搜到的页面打不开 | 页面已删除或权限变更 | 查看缓存、试试其他搜索引擎的快照 |
| 搜到的文件无法下载 | 需要登录或权限 | 尝试其他路径、找其他来源 |
| 子域名搜不到 | 未被索引或使用了泛解析 | 换其他子域名枚举方法 |
4.5 实操心得与避坑技巧
心得一:关键词的选择比语法更重要。我见过很多人语法用得很溜,但搜不到东西,问题出在关键词上。你得站在目标的角度想:他们可能会用什么词来命名文件、页面、目录?中文系统用拼音还是英文?这些都需要经验积累。
心得二:组合语法要逐步收紧。不要一上来就用很复杂的组合,先从简单的开始,根据结果逐步加条件。比如先site:example.com,然后site:example.com filetype:xls,然后site:example.com filetype:xls 员工,一步步缩小范围。
心得三:记录比搜索更重要。搜到的东西要及时记录,不然过一会儿就忘了。我一般用表格记录:域名、URL、页面标题、发现内容、价值判断。这样后续整理的时候一目了然。
心得四:不要忽视中文搜索引擎。虽然Google的语法支持最好,但中文目标用百度有时候能搜到Google搜不到的东西。两个搜索引擎的结果可以互补。
心得五:注意搜索行为的隐蔽性。虽然Google hacking本身是公开信息收集,但你的搜索行为可能会被目标察觉。如果目标有监控搜索引擎来源流量的机制,大量针对性的搜索可能会引起注意。所以操作时要有节奏,不要短时间内集中搜索同一个目标。
心得六:搜到的信息要交叉验证。搜索引擎的结果可能过时或不准确,找到的信息要通过其他方式验证。比如搜到一个后台入口,要确认它现在还能访问;搜到一个配置文件,要确认里面的信息还有效。
心得七:不要忽略图片和社交媒体。除了网页和文档,搜索引擎还能搜图片和社交媒体内容。有时候图片的EXIF信息里包含地理位置、设备信息;社交媒体上可能有员工透露的内部信息。
5. 工具辅助与自动化思路
5.1 常用工具介绍
虽然Google hacking可以手动操作,但配合工具能大幅提高效率。常用的工具有几类:
搜索引擎语法生成工具。这类工具帮你快速生成复杂的搜索语法,不用手动拼。比如你输入域名和关键词,它自动生成site:域名 inurl:关键词这样的查询。
自动化搜索脚本。用Python写脚本,调用搜索引擎的API或模拟搜索请求,批量执行搜索并解析结果。这样可以一次性搜索多个关键词、多个域名,效率比手动高很多。
结果解析工具。搜到结果后,需要提取有价值的信息。有些工具可以自动解析搜索结果页面,提取URL、标题、摘要,并保存到结构化文件里。
漏洞数据库关联。搜到目标使用的CMS或框架后,可以关联漏洞数据库,看看有没有已知漏洞。这一步是从信息收集过渡到漏洞利用的关键环节。
5.2 自动化搜索的基本思路
如果你会写Python,可以自己写一个简单的自动化搜索脚本。基本思路是:
- 定义搜索关键词列表和域名列表
- 组合生成搜索查询
- 调用搜索引擎接口或模拟搜索请求
- 解析返回结果,提取URL和标题
- 保存结果到文件,去重
- 对结果进行初步筛选和分类
下面是一个简单的示例代码框架:
import requests from bs4 import BeautifulSoup import time import random def google_search(query, num_results=10): """模拟搜索引擎搜索,返回结果列表""" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' } results = [] # 这里需要根据实际搜索引擎的接口调整 # 注意:直接爬取搜索引擎可能违反其服务条款 # 建议使用官方API或合规的搜索服务 return results def generate_queries(domain, keywords): """生成搜索查询组合""" queries = [] for kw in keywords: queries.append(f"site:{domain} {kw}") queries.append(f"site:{domain} inurl:{kw}") queries.append(f"site:{domain} intitle:{kw}") return queries def main(): domain = "example.com" keywords = ["admin", "login", "config", "backup", "password"] queries = generate_queries(domain, keywords) all_results = [] for query in queries: print(f"Searching: {query}") results = google_search(query) all_results.extend(results) # 控制搜索频率,避免被限制 time.sleep(random.uniform(3, 8)) # 去重和保存 seen = set() with open("results.txt", "w", encoding="utf-8") as f: for r in all_results: if r['url'] not in seen: seen.add(r['url']) f.write(f"{r['title']}\t{r['url']}\n") print(f"Total unique results: {len(seen)}") if __name__ == "__main__": main()注意:直接爬取搜索引擎结果可能违反其服务条款,实际操作中建议使用官方API或合规的搜索服务。上面的代码只是思路演示,不要直接用于大规模爬取。
5.3 工具使用的注意事项
频率控制。不管用什么工具,都要控制搜索频率。搜索引擎对自动化请求有检测机制,频率太高会被封。建议每次请求间隔3-8秒,并且随机化间隔时间。
结果去重。不同查询可能返回相同的结果,需要去重。可以用URL作为唯一标识。
结果验证。工具搜到的结果需要人工验证,不能直接信任。有些结果可能已经失效,有些可能不相关。
合规使用。工具只是提高效率的手段,使用工具时同样要遵守授权范围和法律法规。不要用工具去扫描未授权的目标。
6. 从信息收集到后续测试的衔接
Google hacking搜到的信息,最终要服务于后续的测试环节。这里简单说一下衔接的思路。
后台入口→ 尝试弱口令、默认口令、SQL注入、逻辑漏洞。
敏感文件→ 提取其中的账号密码、接口地址、系统架构信息,用于后续测试。
错误信息→ 分析文件路径、框架版本、数据库类型,寻找对应的漏洞。
带参数的URL→ 测试注入、文件包含、SSRF、XSS等漏洞。
目录列表→ 浏览目录下的文件,寻找备份文件、上传文件、日志文件。
子域名→ 对子域名进行端口扫描、目录扫描、漏洞扫描。
这个衔接过程不是线性的,而是循环的。你在后续测试中发现的新信息,可以反过来指导Google hacking的关键词选择,形成正向循环。
7. 个人实操体会与建议
做了这么多年信息收集,我对Google hacking最大的体会是:它考验的不是技术深度,而是信息敏感度和耐心。同样的语法,不同的人用,效果可能差很多。差别就在于你能不能想到合适的关键词,能不能从搜索结果中发现有价值的线索,能不能耐心地一条条筛选。
我刚开始用的时候,经常搜了一堆结果但不知道哪些有用。后来慢慢总结出一个方法:先分类,再筛选。把搜到的结果按类型分(后台入口、敏感文件、错误信息、目录列表等),然后按价值排序,优先看高价值的。这样效率高很多。
另外,不要只盯着一个搜索引擎。Google、Bing、百度各有特点,同一个目标在不同搜索引擎上的索引结果可能不一样。多试几个,往往有意外收获。
还有一点很重要:信息收集不是一次性的。目标站点会更新,新的页面会被索引,旧的页面可能被删除。所以信息收集应该是一个持续的过程,在测试的不同阶段都可以回来再搜一搜。
最后再分享一个小技巧:用目标站点的特征字符串来搜索。比如目标页面的版权信息、特定的JS文件名、独特的CSS类名等。这些特征字符串往往能帮你找到同一套系统的其他实例,有时候能发现测试环境、备用站点等。
这个方向后续还可以扩展的地方很多,比如结合Shodan、Censys等网络空间搜索引擎,把Google hacking的思路应用到更广泛的资产发现上。或者结合自动化工具,把重复性的搜索工作交给脚本,自己专注于分析和判断。这些就留到以后有机会再聊了。