我们对公网上的网站进行渗透测试时,首先要收集网站的相关信息,我们日常使用的搜索引擎其实就是一个很好的信息收集工具。这里所说的Google Hack其实不仅限定于谷歌搜索引擎,对于必应等常用搜索引擎也是类似的。这篇笔记我们以谷歌为例,对基于搜索引擎的常用信息收集手段进行介绍。
如果用过Lucene、ElasticSearch等框架的同学对搜索引擎的原理肯定不陌生。搜索引擎后台存在爬虫程序,在互联网上寻找和收录各种内容,爬虫识别到的内容会被分词,以倒排索引的形式存储在搜索引擎的数据库中。我们在搜索框中输入一些内容,我们输入的内容也会被分词,拆解成若干个关键字,然后通过用倒排索引对包含关键字的内容进行查询,再根据一定的排序算法将查询结果按照相关性排序,最终搜索的结果就呈现到我们眼前了。
实际上,对于谷歌等搜索引擎,它的内部实现更加复杂,功能也更加强大。谷歌支持很多符号和辅助指令,相比于盲目的输入一些自然语言关键字,使用这些符号和辅助指令对于我们检索的精确度有很大帮助。
双引号表示精确匹配内容,比如我们搜索关键字:有限公司
,分词后为有限
和公司
两个关键字,默认谷歌可能匹配有限公司
也可能匹配有限责任公司
,而使用双引号搜索"有限公司"
,则只会返回精确匹配该关键字的结果。
加号表示一定存在指定关键字,减号表示一定不存在指定关键字。比如我们搜索关键字:有限公司 +医药
,那么返回的内容一定包含医药
关键字,并和有限公司
相关。
减号的作用则相反,会排除包含关键字的结果。
AND表示连接的关键字必须全部满足,OR则表示连接的关键字任一满足即可。例如搜索关键字:有限 AND 控股
,那么返回结果中需要同时包含这两个关键字。
星号表示通配符。例如搜索关键字:inurl:admin/login.*
。
site
搜索能够精确的在一个网站域名和其子域名下搜索内容。通过site
搜索,我们可以主动收集一些敏感信息或是子域名信息,有时甚至也能搜索到一些后台系统的信息。下面例子中,我们搜索site:flyme.com
,返回的结果都为flyme.com
及其子域名下的内容。
inurl
搜索比较常用,它可以用来搜索互联网站点的后台页面、甚至漏洞的注入点。例如我们搜索:inurl:admin/login.jsp
,在返回结果中很容易找到包含和登录相关的管理后台页面。
intitle
用于标题存在指定内容的网站页面,也常用于搜索后台页面,以及批量搜索存在漏洞框架搭建的网站。例如搜索:intitle:后台登录
,我们很容易搜索到很多管理后台登录页面。
intitle
可以和inurl
组合使用,提高搜索准确性。
cache
搜索用于查找搜索引擎中对网站的快照信息,快照搜索可以被用于寻找一些已经被删除的内容,或是一些曾经有但现在已经修复了的网站报错信息。下面例子中我们搜索了cache:flyme.com
。