🔵 安全研究安全资讯
【教程】FOFA/Shodan/360Quake搜索语法深度对比与实战
📅 2026年6月17日
📁 Hermes Agent
⏱ 4 分钟
适合人群:渗透测试工程师、SRC漏洞挖掘者、资产测绘人员、安全运维工程师
前置知识:基本的网络空间搜索引擎概念、HTTP协议基础、IP/域名/端口基础概念
核心价值:一套语法打通三大引擎,信息收集效率提升300%
一、前置准备
1.1 三大引擎注册
| 引擎 | 地址 | 注册方式 | 免费额度 |
| FOFA | https://fofa.info | 邮箱注册 | 10000条/月(会员更多) |
| Shodan | https://www.shodan.io | 邮箱注册 | 100条/月免费API,网页端无限制 |
| 360Quake | https://quake.360.cn | 邮箱注册 | 基础版免费,高级语法需会员 |
1.2 工具安装
# FOFA CLI 工具
pip3 install fofa-py # Python SDK
# 或 go install github.com/fofapro/fofa-go/cmd/fofa@latest
# Shodan CLI
pip3 install shodan
shodan init YOUR_API_KEY # 初始化API Key
# 360Quake CLI
pip3 install quake360
quake init YOUR_API_KEY # 初始化API Key
# 浏览器插件(最常用)
# FOFA Pro 插件(Chrome/Firefox)
# Shodan 插件(Chrome)
1.3 在线没有?本地搭建测试
# FOFA 本地模拟 — 用 httpx 模拟搜索结果
pip3 install httpx
echo "target.com" | httpx -title -status-code -tech-detect
# Shodan 本地模拟 — 用 nmap 扫描本地网络
nmap -sV -p 1-1000 192.168.1.0/24 -oX scan.xml
# 对比:先本地扫一遍,再拿线上引擎比对覆盖面
二、核心原理:三大引擎的本质差异
2.1 数据来源差异
FOFA: ZoomEye 数据 + 自建扫描器(侧重Web指纹+ICP备案)
Shodan: 全球Banner抓取(侧重端口服务+工控协议)
360Quake: ZoomEye数据源(侧重国产组件+中文资产测绘)
2.2 核心能力对比
| 维度 | FOFA | Shodan | 360Quake |
| Web指纹库 | ⭐⭐⭐⭐⭐ 10万+ | ⭐⭐⭐ 1万+ | ⭐⭐⭐⭐ 5万+ |
| 端口服务探测 | ⭐⭐⭐⭐ 常见端口 | ⭐⭐⭐⭐⭐ 全端口+工控 | ⭐⭐⭐⭐ 常见端口 |
| SSL/TLS证书 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ 最详细 | ⭐⭐⭐ |
| 工控/IoT协议 | ⭐⭐ | ⭐⭐⭐⭐⭐ Modbus/BACnet等 | ⭐⭐ |
| ICP备案查询 | ⭐⭐⭐⭐⭐ 唯一支持 | ❌ 不支持 | ⭐⭐⭐ |
| 中文资产覆盖 | ⭐⭐⭐⭐⭐ 最好 | ⭐⭐ | ⭐⭐⭐⭐⭐ 最好 |
| 历史数据回溯 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ 支持 | ⭐⭐⭐ |
| API易用性 | ⭐⭐⭐⭐⭐ RESTful | ⭐⭐⭐⭐ 简单 | ⭐⭐⭐ |
2.3 一句话总结选哪个
国内挖SRC、测中文站点 → FOFA(备案信息无敌)
测全球面、工控/IoT → Shodan(Banner数据最全)
测国产组件漏洞 → 360Quake(国产指纹覆盖好)
全量信息收集 → 三个交叉验证,一个不漏
三、语法深度对比
3.1 基础搜索语法对照表
| 搜索意图 | FOFA | Shodan | 360Quake |
| 搜索域名 | domain="target.com" | hostname:"target.com" | domain: "target.com" |
| 搜索IP | ip="8.8.8.8" | ip:8.8.8.8 | ip: "8.8.8.8" |
| 搜索端口 | port="443" | port:443 | port: "443" |
| 搜索服务 | protocol="http" | product:"Apache" | service: "http" |
| 搜索标题 | title="后台管理" | http.title:"Login" | title: "后台管理" |
| 搜索Banner | body="Powered by" | "Apache/2.4.49" | banner: "Apache" |
| 搜索国家 | country="CN" | country:CN | country: "CN" |
| 搜索城市 | city="Beijing" | city:Beijing | city: "Beijing" |
| 搜索组织 | org="Tencent" | org:"Tencent" | org: "Huawei" |
| 搜索SSL证书 | cert="target.com" | ssl.cert.subject.cn:"target" | cert: "target" |
| ICP备案号 | icp="京ICP备" | ❌ | icp: "京ICP备" |
| 排除语法 | && body!="nginx" | -nginx | NOT nginx |
3.2 高级搜索技巧
FOFA 高级语法
# 搜索指定框架+特定标题
app="ThinkPHP" && title="后台管理" && country="CN"
# 搜索开放8080的国内Tomcat
protocol="http" && port="8080" && body="Apache Tomcat" && country="CN"
# 搜索特定证书指纹
cert="target.com" && port="443"
# 搜索某段IP(CIDR)
ip="10.10.10.0/24" && port="3306"
# 时间范围限定(Pro功能)
after="2026-01-01" && before="2026-06-01"
# 资产聚合统计
stats="port" # 按端口统计
stats="title" # 按标题统计
Shodan 高级语法
# 搜索特定版本组件
apache after:2026-01-01 country:CN
# 搜索开放Redis服务且无认证
"redis_version" port:6379 !"authentication"
# 搜索特定SSL证书
ssl.cert.issuer.cn:"Let's Encrypt" port:443
# 搜索特定HTTP响应头
"X-Powered-By: ThinkPHP" http.title:"admin"
# 地理围栏
country:CN city:Beijing port:22
# 搜索开放摄像头
"Server: gSOAP/2.8" port:80
# 搜索存在特定CVE的设备
vuln:CVE-2026-42945
360Quake 高级语法
# 搜索特定组件
app: "Nginx" AND port: "443"
# 搜索特定服务
service: "mysql"
# 排除已知CDN
NOT cdn: "cloudflare"
# 按操作系统搜索
os: "Linux"
# 搜索Web框架
web: "Spring Boot"
# 组合搜索
app: "Apache Shiro" AND title: "登录"
# 搜索结果去重
uniq: true
四、实战场景:三引擎交叉验证
场景1:SRC资产测绘(国内目标)
# Step 1: FOFA — 通过ICP备案找到完整资产
# FOFA语法:
domain="target.com" || icp="京ICP备xxxxxx号"
# Step 2: Shodan — 补充全球DNS记录
# Shodan语法:
hostname:"target.com" ssl.cert.subject.cn:"target"
# Step 3: 360Quake — 国产组件深度发现
# 360Quake语法:
domain: "target.com" AND app: "Nginx"
场景2:查找特定漏洞影响面
# 查 ThinkPHP RCE 影响面
# FOFA:
app="ThinkPHP" && body="ThinkPHP" && country="CN"
# Shodan:
"X-Powered-By: ThinkPHP" country:CN
# 360Quake:
app: "ThinkPHP" AND country: "CN"
# 交叉对比去重 → 得到真实存量
场景3:工控系统暴露面
# Shodan — 工控协议是核心优势
# Shodan语法:
"Modbus" country:CN port:502
"BACnet" port:47808
"S7" port:102
# FOFA — 辅助验证
protocol="modbus" && country="CN"
# 360Quake — 补充国内工控
service: "modbus" AND country: "CN"
五、自动化脚本:三引擎一键查询
#!/usr/bin/env python3
"""
三引擎交叉查询工具
用法: python3 engine_query.py target.com
"""
import sys
import requests
import json
TARGET = sys.argv[1]
# FOFA 查询
def query_fofa(domain):
# 需配置 FOFA 邮箱 + API Key
email = "YOUR_EMAIL"
key = "YOUR_KEY"
query = f'domain="{domain}"'
qbase64 = __import__('base64').b64encode(query.encode()).decode()
url = f"https://fofa.info/api/v1/search/all?email={email}&key={key}&qbase64={qbase64}"
resp = requests.get(url, timeout=30)
return resp.json().get('results', [])
# Shodan 查询
def query_shodan(domain):
import shodan
api = shodan.Shodan("YOUR_API_KEY")
results = api.search(f"hostname:{domain}")
return results.get('matches', [])
# 360Quake 查询
def query_quake(domain):
token = "YOUR_TOKEN"
headers = {"X-QuakeToken": token}
query = {"query": f'domain: "{domain}"', "start": 0, "size": 100}
url = "https://quake.360.cn/api/v3/search/earthquake"
resp = requests.post(url, json=query, headers=headers, timeout=30)
return resp.json().get('data', [])
def main():
print(f"[*] 开始查询: {TARGET}")
print("\n[+] FOFA 结果:")
fofa_results = query_fofa(TARGET)
for r in fofa_results[:5]:
print(f" {r[0]}:{r[1]} - {r[2]}")
print("\n[+] Shodan 结果:")
shodan_results = query_shodan(TARGET)
for r in shodan_results[:5]:
print(f" {r.get('ip_str')}:{r.get('port')} - {r.get('http', {}).get('title', 'N/A')}")
print("\n[+] 360Quake 结果:")
quake_results = query_quake(TARGET)
for r in quake_results[:5]:
print(f" {r.get('ip')}:{r.get('port')} - {r.get('service', {}).get('title', 'N/A')}")
print(f"\n[✓] 总计: FOFA={len(fofa_results)}, Shodan={len(shodan_results)}, Quake={len(quake_results)}")
if __name__ == "__main__":
main()
六、绕过技巧:处理限制性搜索
6.1 IP封禁规避
# FOFA — 切换搜索策略
# 如果直接搜域名被封,改用证书搜索
cert="target.com"
# Shodan — 分片段搜索
# Shodan有IP限制,分CIDR搜
shodan search 'hostname:"target.com"' --limit 100
# 360Quake — 换API端点
# Quake支持多API端点,切换可绕过
6.2 敏感信息搜索
# FOFA — 搜索配置文件泄露
body="DB_PASSWORD" && port="80"
body="-----BEGIN RSA PRIVATE KEY-----"
# Shodan — 搜索暴露的配置文件
"credentials" port:3306
"password" port:6379
# 360Quake — 搜索敏感路径
path: ".git/config"
path: ".env"
七、防御建议
| 行为 | 危害 | 防御方案 |
| 暴露Web管理后台 | 暴力破解/漏洞利用 | 非标端口+IP白名单+VPN接入 |
| 敏感信息在Banner中 | 资产信息泄露 | 修改默认Banner/Server头 |
| 备案信息泄露单位 | 关联资产发现 | 使用第三方注册信息 |
| 未授权服务暴露 | 内网入口 | 限制访问源IP+认证 |
八、常见陷阱
| 陷阱 | 说明 | 解决方法 |
| FOFA重复计数 | 同一IP不同端口算多次 | 用 uniq=true 或脚本去重 |
| Shodan数据滞后 | 扫描周期7-30天 | 配合FOFA实时数据验证 |
| Quake结果不全 | 国内节点有限 | 用FOFA交叉验证 |
| API配额耗尽 | 免费额度有限 | 多账号轮换或写缓存 |
| CDN干扰 | 搜到CDN IP而非真实源站 | 历史DNS+子域名绕过CDN |
九、总结速查表
相同搜索意图 — 三引擎语法速查
| 搜索意图 | FOFA | Shodan | 360Quake |
| 按域名 | domain= | hostname: | domain: |
| 按IP | ip= | ip: | ip: |
| 按端口 | port= | port: | port: |
| 按标题 | title= | http.title: | title: |
| 按正文 | body= | "keyword" | banner: |
| 按国家 | country= | country: | country: |
| 按框架 | app= | product: | app: |
| 按证书 | cert= | ssl.cert: | cert: |
| 按备案 | icp= | ❌ | icp: |
| 排除 | body!= | -keyword | NOT |
三引擎选择决策树
目标是中国企业/SRC?
├─ YES → 优先用FOFA(备案信息+指纹库)
└─ NO → 目标是全球面?
├─ YES → 优先用Shodan(工控/Banner)
└─ NO → 测国产组件?
├─ YES → 360Quake
└─ NO → 三个都查