做安全这行久了,收藏夹比书签栏还乱。新人最常问的一句话是:有没有一份网络安全人士必备的专业搜索引擎清单?问这话的人多半刚入行,或者从开发、运维转过来,手上有一套技术栈,但缺一张"去哪儿查"的地图。我这几年做过资产梳理、暴露面收敛、漏洞应急响应,也在内部做过几次检索技巧分享,慢慢把常用入口收敛成三十个左右,分五类。这篇就把它们摊开讲清楚:每个入口解决什么问题、什么时候该用、什么时候用了纯属浪费时间,检索语法怎么写才不会查出一屏噪音。零基础可以照着顺序一个个试,有经验直接跳到最后两节的组合检索模板和踩坑记录。
1. 这批检索入口不是收藏夹里的装饰品
很多人对"专业搜索引擎"的理解停留在"比普通搜索更厉害",实际情况不是这样。普通搜索做的是文本相关性排序,它回答的是"哪篇文章最像我要找的"。专业检索平台做的是结构化字段匹配,它回答的是"全世界有哪些机器、哪些证书、哪些样本恰好满足这组条件"。这两个问题的解法完全不同,混着用就会事倍功半。
1.1 三类检索源的能力边界
我把这三十个入口分成三大类,分清楚这三类,你不会再问"为什么这个搜不到"。
第一类是网络空间测绘,代表是那几个以 banner 抓取为核心的平台。它们的数据来源是持续扫描全网的响应特征,落到库里就是 IP、端口、协议、证书、页面标题、组件指纹这些字段。它擅长回答"哪台机器在跑某个版本的中间件",不擅长回答"这个漏洞的原理是什么"。
第二类是情报与知识库,包括漏洞编号库、样本分析平台、IP 信誉库。这类平台的数据是人或机构主动提交、审核、归类的,准确性高但覆盖面窄,冷门组件基本查不到。
第三类是代码与文档检索,搜索引擎的索引对象是代码仓库、论文库、网页快照、证书透明度日志。这类数据最杂,但也最容易出意外收获,很多资产线索就是从一条提交记录或者一张过期证书里翻出来的。
三类之间有重叠,但重叠部分很小。真正高效的检索是三类交叉着用,而不是死磕某一个平台。
1.2 为什么通用搜索引擎在这件事上不好使
举个很具体的例子。你要确认一家单位的对外服务资产范围,用通用搜索只能搜到官网、新闻、招聘页,撑死再加几个被收录的子域名。可实际暴露在公网的可能有测试环境、老版本后台、临时开的文件服务,这些东西没有任何页面会主动写出来,也从来不会被通用搜索收录。
测绘平台就不同了。它以证书、标题、指纹为维度做匹配,只要那台机器还在响应,就能被检索到。这是我这些年做资产梳理最核心的一条经验:通用搜索找"被公开的信息",专业检索找"被动暴露的痕迹",两者是互补关系,谁也替代不了谁。
理解了这一点,后面三十个入口你才能用对地方,而不是当成三十个网址收藏起来吃灰。
2. 网络空间测绘:把互联网当成一张可查询的表
这类平台是整个清单里最值钱的部分,也是最容易被新手用废的部分。用废的典型症状是:随便输一个关键词,翻三页结果,发现全是别人的东西,跟自己没关系,然后得出结论"这玩意儿没用"。
2.1 banner、证书、指纹:检索到底在匹配什么
想用好测绘,得先知道库里的数据是怎么来的。抓取程序向目标端口发一个请求,把返回的原始响应头存下来,这一步叫 banner 抓取。响应头里的Server字段、X-Powered-By字段、SSL 证书的主体信息、HTML 的<title>,全都变成了可检索的字段。
所以查询的本质是字段匹配,不是语义理解。你搜"后台管理系统",它不会去理解这个词的意思,只会去匹配页面标题里有没有这几个字。这就解释了为什么很多人的查询结果很差——他们把自然语言塞进了结构化查询框。
我一般把查询拆成三层:先定地理和网络范围(国家、网段、AS 归属),再定协议和端口,最后定特征字符串。三层从宽到窄,一层层筛。这个顺序别反过来,反过来结果集要么是零,要么是几十万条没法看。
2.2 八个测绘入口的分工与取舍
下面这张表是我自己常用的八个测绘与资产发现入口,按使用频率排的。
| 序号 | 平台 | 数据侧重 | 典型使用场景 |
|---|---|---|---|
| 1 | Shodan | 全球设备指纹、协议 banner | 查某类设备或服务的全球分布 |
| 2 | Censys | 证书、主机、服务结构化数据 | 按证书反查资产、按服务版本筛选 |
| 3 | FOFA | 国内资产覆盖较好 | 国内单位资产梳理、组件识别 |
| 4 | ZoomEye | 主机与 Web 指纹双维度 | 组件分布统计、指纹核对 |
| 5 | Quake | 协议识别细、语法接近自然表达 | 冷门协议、工控相关端口排查 |
| 6 | Hunter | Web 侧资产与页面特征 | 后台入口、特定页面特征定位 |
| 7 | Netlas | 支持按响应头与证书细粒度过滤 | 精细化条件组合查询 |
| 8 | Onyphe | 被动数据与扫描数据结合 | 补充其他平台覆盖不到的段 |
选择逻辑很简单:国内资产优先用 FOFA 和 Hunter,全球范围用 Shodan 和 Censys,需要精细条件组合时用 Netlas,冷门协议用 Quake。别指望一个平台包打天下,同一个查询在两个平台结果差异可能有 30% 以上,这是扫描策略和数据更新频率决定的,不是谁不准。
2.3 查询语法实战:从模糊想法到精确结果集
假设你要盘点自己负责的一个网段上所有对外的 Web 服务,查询大概是这样写的:
ip="203.0.113.0/24" && protocol="http" && status_code="200"拆开看:第一段锁定网段范围,这是最重要的约束,没有它后面全是白搭;第二段限定协议,排除掉数据库、远程管理这类非 Web 端口;第三段只保留能正常访问的,减少大量 403、502 噪音。
再举个查组件版本的例子。怀疑某台机器跑了老版本的应用服务,想确认同类资产还有多少:
app="Apache-Tomcat" && country="CN" && title="Manager"这里app是平台自动打的指纹标签,title是页面标题的字符串匹配。两个条件之间是"与"关系,能把范围压得很小。
注意:所有查询都必须限定在你自己拥有或已获得书面授权的资产范围内。测绘平台返回的是全网数据,看到不属于你的资产就停手,不要做任何进一步的探测动作。这条底线比任何技巧都重要。
新手最容易犯的错是条件写得太多太死。一开始就堆五六个条件,结果返回零条,然后不知道是条件冲突还是真的没有。正确做法是先只写一个最确定的约束,看返回量级,再一条条往上加,每加一条就观察结果集变化。这个过程本身就是在验证你的假设对不对。
3. 资产与域名画像:从一个域名撬开一整片面
测绘平台给的是"面上的点",域名和证书类工具给的是"点背后的关系"。这两类配合起来用,资产梳理的效率会差出一个数量级。
3.1 证书透明度日志是被低估的金矿
证书透明度日志这个东西,机制初衷是为了让证书签发过程可审计,但它的副产品是一个公开的、几乎全量的证书签发记录库。任何机构给任何一个子域名申请证书,这条记录都会留在日志里,包括那些从来没有在任何地方公开过的内部测试域名。
我做过一个统计:对一个中等规模的组织,通过证书日志能挖出的子域名数量,通常是通用搜索能搜到的 5 到 10 倍。原因很直白,证书是自动签发的,运维随手给一个临时环境配个证书,日志里就多一条记录,而这个域名可能永远不会出现在官网导航里。
用的时候注意一点:证书日志只能告诉你"这个域名曾经申请过证书",不能证明它现在还在用。所以拿到列表之后必须做存活验证,否则你会得到一大堆已经下线的历史记录,浪费大量时间逐个确认。
3.2 六个域名、DNS 与页面快照入口
| 序号 | 平台 | 核心能力 |
|---|---|---|
| 9 | crt.sh | 按域名查证书透明度日志,子域名发现主力 |
| 10 | SecurityTrails | 历史 DNS 记录、当前解析、关联域名 |
| 11 | DNSDumpster | DNS 记录可视化,快速看拓扑关系 |
| 12 | RapidDNS | 子域名批量查询,速度快、结果量大 |
| 13 | ViewDNS | 多合一 DNS 与 IP 工具集,适合单点核对 |
| 14 | urlscan.io | 页面快照与外部资源引用关系,看引用链 |
这六个里面,crt.sh 和 SecurityTrails 是我用得最多的。前者的查询语法支持通配符,%.example.com一次能把所有子域名的证书记录捞出来;后者的历史 DNS 记录特别有用,一个域名三年前解析到哪里,往往能反推出当时的部署架构。
urlscan.io 的价值很多人没吃透。它不只是个页面截图工具,真正有用的是它记录了一个页面加载时请求了哪些外部资源。一个页面如果引用了一个内网 IP 的静态资源,这条信息会直接暴露内部网段结构。我看页面快照的时候,第一眼看的是资源请求列表,第二眼才是截图。
3.3 手工推演:把碎片拼成资产地图
单个工具给的是碎片,拼图的过程得靠人。我一般按这个顺序走:
先拿主域名去证书日志跑一遍,得到一个初步的子域名集合,几百到几千条很正常。然后做一轮存活筛选,把解析不到的、返回错误的全部剔掉。剩下的按命名规律分组,比如test-、dev-、staging-开头的归一组,api-、open-开头的归一组,mail-、vpn-这种基础设施类的归一组。
分组之后你会发现规律:测试环境的命名往往最随意,也最可能缺少统一的安全策略;API 类域名通常有独立的后端服务,暴露面比主站大;基础设施类域名一旦出问题影响面最广。这个分组动作决定了你后续精力怎么分配,值得花时间认真做,不要拿到列表就一头扎进去逐个看。
分完组再去测绘平台按这些域名反查 IP 和端口,把"域名-IP-端口-指纹"四者串起来。串完之后你会得到一张表,这张表就是你的资产地图,后面所有的漏洞跟进、变更监控都基于它。
4. 漏洞情报:把"听说过"变成"说得清"
应急响应的时候最怕遇到一种情况:某个漏洞被通知下来了,编号你有,但具体影响哪个版本、触发条件是什么、有没有公开的验证方式,一问三不知。漏洞库的价值就是把这些填上。
4.1 编号体系与交叉验证的必要性
同一个漏洞在不同库里可能有不同的描述口径,严重的甚至影响范围都不一样。原因在于各库的收录标准、审核节奏、厂商配合度都不同。有的库先收录后补细节,有的库要等厂商确认才给完整信息,有的库干脆只收特定来源的提交。
所以我的习惯是至少交叉核对两个来源。一个来源给编号和基础描述,另一个来源给影响版本和修复建议。两边对不上的地方,恰恰是最需要关注的部分——可能是收录时的理解偏差,也可能是漏洞本身存在争议。
另外提醒一句,编号不要靠记忆。我见过不少人凭印象说"CVE 编号是 2021 多少多少",结果查出来是另一个组件的问题。编号一定要复制粘贴,一个数字错了整条线索就断了。
4.2 七个漏洞库的定位差异
| 序号 | 平台 | 定位与特点 |
|---|---|---|
| 15 | NVD | 漏洞数据标准化程度高,附评分与影响版本 |
| 16 | CVE 官方编号库 | 编号源头,描述最简洁,适合确认编号有效性 |
| 17 | CNVD | 国内漏洞共享平台,覆盖国内厂商产品 |
| 18 | CNNVD | 国内漏洞库,与前者互补,收录口径略有差异 |
| 19 | Exploit-DB | 公开验证代码归档,判断可利用性时参考 |
| 20 | Vulners | 聚合多个来源,支持按组件名批量查询 |
| 21 | VulDB | 漏洞条目结构细致,历史数据完整 |
用起来的顺序我一般是:先 NVD 拿标准描述和影响版本,再 CVE 源头确认编号,国内产品补查 CNVD 和 CNNVD,需要评估实际风险时看 Exploit-DB 有没有公开验证,批量场景用 Vulners 的聚合查询。
Exploit-DB 这个库要特别说一句。很多人一看到上面有对应的公开代码,就直接把漏洞定成"高危必须立刻修"。这个判断太粗糙了。公开代码存在只说明"技术上有验证路径",跟"你的环境能不能被打穿"是两件事。中间还隔着网络可达性、前置条件、权限要求好几层。评估的时候必须结合自己的资产实际情况,而不是看个标签就下结论。
4.3 一条漏洞从公开到落地的检索路径
我梳理一下实际处理一个漏洞信息时的完整动作:
第一步,拿到编号,去 NVD 查标准条目,重点看三样东西——受影响的版本区间、触发需要的前置条件、CVSS 向量里攻击路径那一项(是网络可达还是需要本地)。这三样决定了你要不要紧张。
第二步,去组件官方渠道确认修复版本。这一步别省,漏洞库里的修复建议有时候滞后,官方发布说明才是最准的。
第三步,用自己的资产地图做匹配。哪些资产用了这个组件、版本落在受影响区间内、对外暴露程度如何。这一步往往能发现漏洞库描述里没提的间接依赖问题。
第四步,评估处置优先级。同样是高危漏洞,一个在公网可达的管理后台里,一个在内网隔离的测试机上,优先级差得非常远。
提示:处置过程中所有验证动作都要在授权范围内进行,测试环境优先,生产环境变更前留好回滚方案。
这条路径走熟了大概十分钟能出一份可交付的判断,比在群里随口问一句"这个严重不严重"靠谱得多。
5. 威胁情报与样本分析:判断"这东西有没有问题"
日常工作中最频繁的一类需求其实不是挖漏洞,而是判断一个文件、一个域名、一个 IP 有没有问题。这类判断最忌讳单点结论,必须多源交叉。
5.1 多引擎扫描的正确读法
多引擎扫描平台的检测结果,新手最容易误读。看到四十个引擎里有两个报了,就觉得"可能是误报";看到一个都没报,就觉得"肯定是干净的"。这两种判断都不成立。
检测引擎的来源、特征库、启发式规则各不相同,两三个引擎报毒有可能确实是误报,但也有可能是这个样本比较新,特征还没扩散到其他引擎。反过来,零检测率对新型样本毫无意义,因为它还没进任何特征库。
我的判断习惯是看检测结果的分布而不是数量。如果报出来的引擎集中在几个以启发式检测见长的,且报的名称一致,那可信度比较高;如果报的名称五花八门、互相矛盾,多半是启发式误触。另外一定要看首次提交时间和社区评论,这两项信息比检测率更能说明问题。
5.2 五个样本与 IP 信誉入口
| 序号 | 平台 | 主要用途 |
|---|---|---|
| 22 | VirusTotal | 多引擎扫描、文件与 URL 信誉查询 |
| 23 | MalwareBazaar | 恶意样本归档,可按家族和标签检索 |
| 24 | Any.run | 交互式沙箱,能看到运行全过程 |
| 25 | Hybrid Analysis | 自动化沙箱报告,附带行为摘要 |
| 26 | AbuseIPDB | IP 滥用记录与社区举报数据 |
VirusTotal 用得最多,但有个使用细节值得说:文件哈希查询比文件上传快得多,也更安全。很多场景下你手上只有一个哈希值,直接查哈希就能拿到历史扫描结果,没必要把文件重新传一遍。只有哈希查不到记录时才考虑上传。
AbuseIPDB 这类 IP 信誉库要辩证地看。一个 IP 被举报过,不代表它现在还在做同样的事,共享主机环境下同一个 IP 后面可能换了好几拨使用者。举报时间比举报次数重要,三个月前的十条举报,参考价值远不如昨天的一条。
5.3 沙箱报告怎么读才不浪费时间
沙箱报告动辄几十页,全看一遍不现实。我一般只抓四个点。
第一看进程树,重点是有没有出现预期之外的子进程,一个文档处理程序拉起命令行解释器,这个组合本身就值得警惕。第二看网络行为,它主动连了哪些地址,这些地址的信誉如何。第三看文件落地,运行过程中往哪些目录写了东西,有没有自启动项的写入。第四看注册表或配置变更,这类动作往往是持久化手段。
四个点看完基本能定性,剩下的细节在需要写报告的时候再回头翻。沙箱环境本身有检测规避的可能,所以如果沙箱显示一切正常但你有其他证据怀疑它,以其他证据为准,别把沙箱当终审。
6. 代码与文档检索:藏在细节里的线索
这一类在清单里容易被忽略,但实际用起来出意外的概率最高。代码仓库、证书、DNS 记录、网页存档,这些数据的共同点是"本来是为了别的目的存在的",所以里面夹杂的信息没人特意清理过。
6.1 代码搜索的三种姿势
第一种是精确字符串搜索。你知道要找的是一段特定的配置键名、一个固定的报错文案、一段特征明显的代码。这种搜索最直接,把字符串丢进去就行,注意加引号避免被拆词。
第二种是结构模式搜索。你要找的不是某个具体字符串,而是某种代码结构,比如所有把密钥硬编码在初始化函数里的写法。这时候得用正则或者语法层面的查询,不同平台的支持程度差别很大。
第三种是仓库维度搜索。你已经定位到某个组织或某个用户,想看他的全部公开仓库里有没有敏感信息。这种搜索范围小但针对性强,通常是资产梳理阶段用的。
三种姿势里第二种最考验功底,也最容易出高价值结果。写正则的时候要注意,宽松的正则会产生大量误报,严格的正则容易漏掉变体。我的经验是先写宽松版本跑一遍看结果分布,再根据误报特征逐步收紧,跑个三四轮才能得到可用的规则。
6.2 四个代码与学术入口
| 序号 | 平台 | 适用场景 |
|---|---|---|
| 27 | GitHub 高级搜索 | 按语言、路径、文件名、更新时间组合检索 |
| 28 | grep.app | 跨仓库代码片段搜索,速度快 |
| 29 | Sourcegraph | 支持结构化查询与跨仓库跳转 |
| 30 | Google Scholar 与 arXiv | 查技术原理、算法细节、协议设计文档 |
GitHub 的高级搜索被严重低估。绝大多数人只用关键词,实际上它的限定条件组合非常丰富:可以限定文件路径、文件扩展名、仓库语言、最后更新时间、星标数量。举个实用例子,想找某个组件的配置模板,限定path:config加扩展名,比直接搜关键词准确得多。
arXiv 这一类学术检索在安全工作中的用途,可能超出很多人的预期。遇到看不懂的协议行为、奇怪的加密实现、某个组件的设计取舍,论文里的描述往往比任何博客都准确。查原理的时候优先看原始设计文档和论文,二手解读经常有偏差。
6.3 组合检索的模板化打法
单点检索效率低,我习惯把固定动作做成模板。分享两个我常用的。
模板一:从域名到完整资产面
1. 证书日志查子域名 -> 得到域名集合 2. 批量解析筛选存活 -> 剔除历史记录 3. 按命名规律分组 -> 划分环境类型 4. 测绘平台反查 IP 与端口 -> 补齐服务信息 5. 页面快照看资源引用 -> 发现内部网段线索 6. 汇总成资产表 -> 交付与后续跟踪模板二:从组件名到风险判断
1. 官方文档确认版本与配置项 -> 建立基线 2. 漏洞库查受影响版本区间 -> 判断是否命中 3. 测绘平台查同类资产分布 -> 评估影响范围 4. 代码检索查配置模板 -> 判断典型部署方式 5. 汇总风险等级与处置建议 -> 输出结论模板的价值不在于省时间,而在于保证每次的检索路径一致。路径一致,结果才可复现;结果可复现,结论才经得起复核。我见过太多人做分析全凭当时想到哪儿查到哪儿,过两天自己都复现不出来。
7. 效率与边界:让检索结果留下来、站得住
工具会用只是入门,能把手上的检索过程沉淀成可复用的东西,才算真正进阶。这一节讲三件容易被忽略的事。
7.1 建立自己的查询模板库
我从三年前开始维护一个纯文本文件,里面按场景分类记录了所有验证过的查询语句,每条后面附一句注释说明用途和注意事项。这个习惯带来的效率提升,比换任何新工具都明显。
文件结构很简单,按场景分几个大块:资产发现、组件识别、暴露面排查、情报核对。每条记录包含三部分:查询语句、适用平台、一句备注。备注写什么?写这条查询容易出什么问题。比如某条查询在特定平台上会返回大量 CDN 节点,需要额外加排除条件;某条查询的字段名在两个平台不一样,不能直接复制。
维护这个文件的另一个好处是,你会被迫想清楚每次检索的目的。随手一搜和带着明确问题去搜,得到的结果质量完全不同。养成记录习惯之后,我明显感觉自己无意义的搜索少了很多。
7.2 合规红线与授权边界
这一节必须单独说,因为它比前面所有技巧加起来都重要。
测绘平台和资产检索工具返回的是全网数据,你能看到不属于你的东西,不代表你可以去碰。实际工作中我坚持三条:只查有授权的资产、只做被动信息收集、不做任何主动探测。第一条是法律边界,第二条是技术边界,第三条是给自己留退路。
具体到操作层面,做资产梳理前先确认书面授权范围,明确包含哪些域名、哪些网段。检索过程中如果发现结果里混进了关联单位或者第三方的资产,直接从结果集里剔除,不要出于好奇继续往下看。做验证的时候优先在测试环境做,生产环境的任何变更都要走流程、留回滚。
注意:把"我只是查了一下"当成免责理由是不成立的。信息收集本身在很多场景下就已经越界了,判断标准是你有没有权限,不是你有没有造成影响。
7.3 常见问题速查表
| 现象 | 大概率原因 | 处理方式 |
|---|---|---|
| 查询返回零结果 | 条件过多互相冲突 | 逐条删减条件,先只留最确定的一个 |
| 结果里全是 CDN 节点 | 未排除云服务商网段 | 增加排除条件或按 AS 归属过滤 |
| 子域名列表大量失效 | 证书日志包含历史记录 | 加存活验证环节,逐个解析确认 |
| 沙箱显示无异常 | 样本存在环境检测 | 结合其他证据综合判断,不单独采信 |
| 漏洞版本对不上 | 各库收录口径不同 | 以官方发布说明为准,交叉核对两个来源 |
| 检测引擎结果矛盾 | 启发式规则误触 | 看报的名称是否一致,看首次提交时间 |
| 检索结果无法复现 | 未记录查询条件与时间 | 建立模板库,记录语句和数据快照时间 |
这张表里的每一条我都是真踩过才写下来的。尤其是第一条,早期我做资产梳理,写了一条带了六个条件的查询,返回零结果,折腾了半小时才反应过来是条件之间互相排斥。
最后分享一个我觉得挺有用的小习惯:每次做完一次完整的检索分析,花五分钟把过程写成三五行文字存档,写清楚"当时想查什么、用了哪些入口、得到什么结论、哪些入口没起作用"。半年之后回头看这些记录,你会发现自己真正擅长的检索路径就那么两三条,其他的都是陪跑。把这两三条打磨到极致,比把三十个入口都浅尝一遍有价值得多。工具会更新,平台会改版,检索的思路和方法论不会过期。