Fofa使用教程#
软件介绍#
Fofa是中国著名的网络空间搜索引擎,专注于发现和识别互联网上的设备、服务和应用。它提供对全球网络空间的实时监控,支持主机、Web、证书等多种搜索类型,具有强大的搜索语法和丰富的数据维度,是网络安全研究和威胁情报收集的重要工具。
主要功能#
- 主机搜索和发现
- Web应用搜索
- 证书搜索和分析
- 网络空间测绘
- 威胁情报收集
- 漏洞扫描
- 资产发现
- API接口支持
适用场景#
- 网络安全研究
- 渗透测试
- 资产发现和管理
- 威胁情报收集
- 安全评估
- 攻击面分析
入门级使用#
注册账号和获取API密钥#
注册Fofa账号#
- 访问 https://fofa.info/
- 点击"注册"创建免费账号
- 验证邮箱地址
- 登录获取API密钥
获取API密钥#
# 登录后在个人中心获取API密钥
# API密钥格式: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx安装Fofa CLI#
使用pip安装#
# 安装Fofa命令行工具
pip install fofa
# 验证安装
fofa --version配置API密钥#
# 配置API密钥
fofa config
# 按提示输入API密钥和邮箱
# 或设置环境变量
export FOFA_API_KEY="your_api_key"
export FOFA_EMAIL="your_email@example.com"基本搜索#
搜索特定IP#
# 搜索特定IP地址
fofa search "ip=8.8.8.8"
# 输出示例
{
"results": [
{
"host": "8.8.8.8",
"ip": "8.8.8.8",
"port": 53,
"protocol": "dns",
"title": "",
"country": "US",
"as_number": 15169,
"as_organization": "Google LLC",
"lastupdatetime": "2024-01-01 00:00:00"
}
],
"size": 1
}搜索特定端口#
# 搜索开放特定端口的设备
fofa search "port=80"
# 搜索开放多个端口的设备
fofa search "port=80,443"
# 搜索端口范围
fofa search "port=8000-9000"搜索特定服务#
# 搜索Apache服务器
fofa search "server=Apache"
# 搜索Nginx服务器
fofa search "server=Nginx"
# 搜索MySQL数据库
fofa search "app=MySQL"初级使用#
高级搜索语法#
布尔运算符#
# AND运算符(默认)
fofa search "port=80 && server=Apache"
# OR运算符
fofa search "server=Apache || server=Nginx"
# NOT运算符
fofa search "port=80 && !server=Apache"国家和地区搜索#
# 搜索特定国家的设备
fofa search "country=CN"
# 搜索特定城市的设备
fofa search "city=Beijing"
# 搜索多个国家
fofa search "country=CN || country=US"ASN搜索#
# 搜索特定ASN的设备
fofa search "asn=15169"
# 搜索特定组织的设备
fofa search "org=Google"Web搜索#
搜索特定网站#
# 搜索包含特定标题的网站
fofa search "title=Welcome"
# 搜索特定域名的网站
fofa search "domain=example.com"
# 搜索特定响应头的网站
fofa search "header=nginx"搜索Web应用#
# 搜索WordPress网站
fofa search "app=WordPress"
# 搜索Discuz论坛
fofa search "app=Discuz"
# 搜索Dedecms
fofa search "app=Dedecms"搜索特定技术栈#
# 搜索使用PHP的网站
fofa search "app=PHP"
# 搜索使用Java的网站
fofa search "app=Java"
# 搜索使用Python的网站
fofa search "app=Python"中级使用#
证书搜索#
搜索SSL证书#
# 搜索特定域名的证书
fofa search "cert=example.com"
# 搜索特定CA颁发的证书
fofa search "cert=Let's Encrypt"
# 搜索即将过期的证书
fofa search "cert=example.com && cert.is_valid=true"搜索证书信息#
# 搜索自签名证书
fofa search "cert.is_self_signed=true"
# 搜索通配符证书
fofa search "cert=*"
# 搜索特定组织的证书
fofa search "cert.subject.organization=Google"批量查询#
从文件批量查询#
#!/bin/bash
# 批量查询IP信息
IP_FILE="ip_list.txt"
OUTPUT_FILE="fofa_results.txt"
while read ip; do
echo "=== $ip ===" >> "$OUTPUT_FILE"
fofa search "ip=$ip" >> "$OUTPUT_FILE"
echo "" >> "$OUTPUT_FILE"
done < "$IP_FILE"
echo "批量查询完成,结果已保存到 $OUTPUT_FILE"批量搜索#
#!/bin/bash
# 批量搜索不同条件
SEARCH_TERMS=(
"port=22"
"port=3306"
"port=6379"
"port=27017"
)
OUTPUT_FILE="batch_search_results.txt"
for term in "${SEARCH_TERMS[@]}"; do
echo "=== 搜索: $term ===" >> "$OUTPUT_FILE"
fofa search "$term" >> "$OUTPUT_FILE"
echo "" >> "$OUTPUT_FILE"
done
echo "批量搜索完成"数据导出#
导出为JSON#
# 导出搜索结果为JSON
fofa search "port=443" --format json > results.json
# 导出特定数量的结果
fofa search "port=443" --format json --limit 100 > results.json导出为CSV#
# 导出搜索结果为CSV
fofa search "port=443" --format csv > results.csv
# 导出特定字段
fofa search "port=443" --format csv --fields ip,port,server,country > results.csv中上级使用#
高级过滤#
按操作系统过滤#
# 搜索Windows设备
fofa search "os=Windows"
# 搜索Linux设备
fofa search "os=Linux"
# 搜索特定版本的操作系统
fofa search "os=Ubuntu 20.04"按服务版本过滤#
# 搜索特定版本的软件
fofa search "server=Apache && version=2.4.41"
# 搜索包含特定漏洞的设备
fofa search "server=Apache && version=2.4.41"API编程#
Python API示例#
#!/usr/bin/env python3
from fofa import Fofa
import json
# 初始化API
client = Fofa(email="your_email@example.com", key="your_api_key")
# 搜索特定端口
results = client.search("port=443", fields=["ip", "port", "server", "country"])
# 遍历结果
for result in results:
print(f"IP: {result[0]}")
print(f"端口: {result[1]}")
print(f"服务器: {result[2]}")
print(f"国家: {result[3]}")
print()批量查询示例#
#!/usr/bin/env python3
from fofa import Fofa
import json
# 初始化API
client = Fofa(email="your_email@example.com", key="your_api_key")
# 批量查询IP列表
ip_list = ["8.8.8.8", "1.1.1.1", "208.67.222.222"]
results = []
for ip in ip_list:
try:
result = client.search(f"ip={ip}")
results.append(result)
print(f"查询成功: {ip}")
except Exception as e:
print(f"查询失败: {ip} - {e}")
# 保存结果
with open("fofa_results.json", "w") as f:
json.dump(results, f, indent=2)
print("批量查询完成")Web搜索API示例#
#!/usr/bin/env python3
from fofa import Fofa
import json
# 初始化API
client = Fofa(email="your_email@example.com", key="your_api_key")
# 搜索特定Web应用
results = client.search("app=WordPress", fields=["host", "ip", "port", "title"])
# 遍历结果
for result in results:
print(f"网站: {result[0]}")
print(f"IP: {result[1]}")
print(f"端口: {result[2]}")
print(f"标题: {result[3]}")
print()高级使用#
攻击面分析#
分析组织攻击面#
#!/bin/bash
# 组织攻击面分析脚本
DOMAIN="example.com"
OUTPUT_DIR="attack_surface_analysis"
mkdir -p "$OUTPUT_DIR"
# 搜索组织的所有主机
echo "=== 主机分析 ===" > "$OUTPUT_DIR/hosts.txt"
fofa search "domain=*.$DOMAIN" >> "$OUTPUT_DIR/hosts.txt"
# 搜索组织的所有Web应用
echo "=== Web应用分析 ===" > "$OUTPUT_DIR/web_apps.txt"
fofa search "domain=$DOMAIN" >> "$OUTPUT_DIR/web_apps.txt"
# 搜索组织的证书
echo "=== 证书分析 ===" > "$OUTPUT_DIR/certificates.txt"
fofa search "cert=$DOMAIN" >> "$OUTPUT_DIR/certificates.txt"
echo "攻击面分析完成,结果保存在 $OUTPUT_DIR 目录"子域名发现#
#!/bin/bash
# 子域名发现脚本
DOMAIN="example.com"
OUTPUT_FILE="subdomains.txt"
# 搜索包含域名的证书
fofa search "cert=*.$DOMAIN" --format json | \
jq -r '.results[][0]' | \
grep -o "[a-zA-Z0-9-]*\.$DOMAIN" | \
sort -u > "$OUTPUT_FILE"
echo "发现 $(wc -l < "$OUTPUT_FILE") 个子域名"
echo "子域名列表已保存到 $OUTPUT_FILE"漏洞扫描#
搜索易受攻击的设备#
#!/bin/bash
# 搜索易受攻击的设备脚本
OUTPUT_FILE="vulnerable_devices.txt"
# 搜索运行旧版本Apache的设备
echo "=== 旧版本Apache设备 ===" > "$OUTPUT_FILE"
fofa search "server=Apache && version=2.4.*" >> "$OUTPUT_FILE"
# 搜索运行旧版本Nginx的设备
echo "=== 旧版本Nginx设备 ===" >> "$OUTPUT_FILE"
fofa search "server=Nginx && version=1.18.*" >> "$OUTPUT_FILE"
# 搜索开放危险端口的设备
echo "=== 开放危险端口的设备 ===" >> "$OUTPUT_FILE"
fofa search "port=23" >> "$OUTPUT_FILE"
echo "漏洞扫描完成,结果已保存到 $OUTPUT_FILE"检测配置错误#
#!/bin/bash
# 检测配置错误脚本
OUTPUT_FILE="misconfigurations.txt"
# 搜索未加密的FTP服务
echo "=== 未加密的FTP服务 ===" > "$OUTPUT_FILE"
fofa search "port=21 && app=FTP" >> "$OUTPUT_FILE"
# 搜索弱SSL配置
echo "=== 弱SSL配置 ===" >> "$OUTPUT_FILE"
fofa search "port=443 && server=Apache" >> "$OUTPUT_FILE"
# 搜索开放的管理端口
echo "=== 开放的管理端口 ===" >> "$OUTPUT_FILE"
fofa search "port=3389" >> "$OUTPUT_FILE"
echo "配置错误检测完成,结果已保存到 $OUTPUT_FILE"大师级使用#
自动化监控#
持续监控脚本#
#!/bin/bash
# 持续监控脚本
MONITOR_TARGET="example.com"
OUTPUT_DIR="monitoring"
INTERVAL=3600 # 每小时检查一次
mkdir -p "$OUTPUT_DIR"
while true; do
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
LOG_FILE="$OUTPUT_DIR/monitor_$TIMESTAMP.txt"
echo "=== 监控时间: $(date) ===" > "$LOG_FILE"
# 搜索新的主机
echo "=== 新主机 ===" >> "$LOG_FILE"
fofa search "domain=*.$MONITOR_TARGET" >> "$LOG_FILE"
# 搜索新的Web应用
echo "=== 新Web应用 ===" >> "$LOG_FILE"
fofa search "domain=$MONITOR_TARGET" >> "$LOG_FILE"
# 搜索开放端口
echo "=== 开放端口 ===" >> "$LOG_FILE"
fofa search "domain=*.$MONITOR_TARGET" >> "$LOG_FILE"
echo "监控完成,结果已保存到 $LOG_FILE"
sleep "$INTERVAL"
done变化检测#
#!/bin/bash
# 变化检测脚本
TARGET="example.com"
PREVIOUS_FILE="previous_state.txt"
CURRENT_FILE="current_state.txt"
CHANGES_FILE="changes.txt"
# 获取当前状态
fofa search "domain=*.$TARGET" > "$CURRENT_FILE"
# 检查是否有变化
if [ -f "$PREVIOUS_FILE" ]; then
diff "$PREVIOUS_FILE" "$CURRENT_FILE" > "$CHANGES_FILE"
if [ -s "$CHANGES_FILE" ]; then
echo "$(date): 检测到变化" >> change_log.txt
cat "$CHANGES_FILE" >> change_log.txt
echo "检测到变化,详情已记录到 change_log.txt"
else
echo "未检测到变化"
fi
fi
# 保存当前状态
cp "$CURRENT_FILE" "$PREVIOUS_FILE"数据分析#
统计分析#
#!/usr/bin/env python3
from fofa import Fofa
from collections import Counter
# 初始化API
client = Fofa(email="your_email@example.com", key="your_api_key")
# 搜索特定端口
results = client.search("port=443", fields=["ip", "port", "server", "country"])
# 统计数据
countries = []
servers = []
for result in results:
if result[3]:
countries.append(result[3])
if result[2]:
servers.append(result[2])
# 输出统计结果
print("=== 国家分布 ===")
country_counter = Counter(countries)
for country, count in country_counter.most_common(10):
print(f"{country}: {count}")
print("\n=== 服务器分布 ===")
server_counter = Counter(servers)
for server, count in server_counter.most_common(10):
print(f"{server}: {count}")地理分布分析#
#!/usr/bin/env python3
from fofa import Fofa
import json
# 初始化API
client = Fofa(email="your_email@example.com", key="your_api_key")
# 搜索特定ASN
results = client.search("asn=15169", fields=["ip", "country", "city", "latitude", "longitude"])
# 生成地图数据
map_data = []
for result in results:
if result[3] and result[4]:
map_data.append({
'ip': result[0],
'country': result[1] if result[1] else '',
'city': result[2] if result[2] else '',
'lat': float(result[3]),
'lon': float(result[4])
})
# 保存地图数据
with open("map_data.json", "w") as f:
json.dump(map_data, f, indent=2)
print(f"生成了 {len(map_data)} 个地理数据点")实战案例#
案例1: 企业资产发现#
场景描述#
发现和管理企业的网络资产,包括服务器、域名、证书等。
实施步骤#
#!/bin/bash
# 企业资产发现脚本
DOMAIN="example.com"
OUTPUT_DIR="asset_discovery"
mkdir -p "$OUTPUT_DIR"
# 1. 发现所有主机
echo "=== 主机发现 ===" > "$OUTPUT_DIR/hosts.txt"
fofa search "domain=*.$DOMAIN" >> "$OUTPUT_DIR/hosts.txt"
# 2. 发现所有Web应用
echo "=== Web应用发现 ===" > "$OUTPUT_DIR/web_apps.txt"
fofa search "domain=$DOMAIN" >> "$OUTPUT_DIR/web_apps.txt"
# 3. 发现所有证书
echo "=== 证书发现 ===" > "$OUTPUT_DIR/certificates.txt"
fofa search "cert=$DOMAIN" >> "$OUTPUT_DIR/certificates.txt"
# 4. 统计开放端口
echo "=== 端口统计 ===" > "$OUTPUT_DIR/ports.txt"
fofa search "domain=*.$DOMAIN" --format json | \
jq -r '.results[][1]' | sort | uniq -c | sort -rn >> "$OUTPUT_DIR/ports.txt"
# 5. 分析每个主机的服务
echo "=== 服务分析 ===" > "$OUTPUT_DIR/services.txt"
fofa search "domain=*.$DOMAIN" --format json | \
jq -r '.results[] | "\(.[0]):\(.[1]) - \(.[2])"' >> "$OUTPUT_DIR/services.txt"
echo "资产发现完成,结果保存在 $OUTPUT_DIR 目录"案例2: 安全评估#
场景描述#
对目标网络进行安全评估,识别潜在的安全风险和漏洞。
实施步骤#
#!/bin/bash
# 安全评估脚本
TARGET="example.com"
OUTPUT_DIR="security_assessment"
mkdir -p "$OUTPUT_DIR"
# 1. 识别开放端口
echo "=== 开放端口 ===" > "$OUTPUT_DIR/open_ports.txt"
fofa search "domain=*.$TARGET" --format json | \
jq -r '.results[][1]' | sort -u >> "$OUTPUT_DIR/open_ports.txt"
# 2. 识别运行的服务
echo "=== 运行的服务 ===" > "$OUTPUT_DIR/services.txt"
fofa search "domain=*.$TARGET" --format json | \
jq -r '.results[][2]' | sort | uniq -c | sort -rn >> "$OUTPUT_DIR/services.txt"
# 3. 识别软件版本
echo "=== 软件版本 ===" > "$OUTPUT_DIR/versions.txt"
fofa search "domain=*.$TARGET" --format json | \
jq -r '.results[] | "\(.[2]) - \(.[3])"' | sort -u >> "$OUTPUT_DIR/versions.txt"
# 4. 识别SSL/TLS配置
echo "=== SSL/TLS配置 ===" > "$OUTPUT_DIR/ssl_config.txt"
fofa search "domain=*.$TARGET && port=443" --format json | \
jq -r '.results[] | "\(.[0]):\(.[1]) - \(.[2])"' >> "$OUTPUT_DIR/ssl_config.txt"
# 5. 识别潜在漏洞
echo "=== 潜在漏洞 ===" > "$OUTPUT_DIR/vulnerabilities.txt"
# 检查旧版本Apache
fofa search "domain=*.$TARGET && server=Apache && version=2.4.*" >> "$OUTPUT_DIR/vulnerabilities.txt"
# 检查旧版本Nginx
fofa search "domain=*.$TARGET && server=Nginx && version=1.18.*" >> "$OUTPUT_DIR/vulnerabilities.txt"
# 检查开放危险端口
fofa search "domain=*.$TARGET && port=23,21,3389" >> "$OUTPUT_DIR/vulnerabilities.txt"
echo "安全评估完成,结果保存在 $OUTPUT_DIR 目录"案例3: 威胁情报收集#
场景描述#
收集威胁情报,识别与目标相关的潜在威胁和攻击者。
实施步骤#
#!/bin/bash
# 威胁情报收集脚本
TARGET_IP="192.168.1.1"
OUTPUT_DIR="threat_intelligence"
mkdir -p "$OUTPUT_DIR"
# 1. 查询IP的详细信息
echo "=== IP详细信息 ===" > "$OUTPUT_DIR/ip_details.txt"
fofa search "ip=$TARGET_IP" > "$OUTPUT_DIR/ip_details.txt"
# 2. 查询同一ASN的其他IP
ASN=$(fofa search "ip=$TARGET_IP" --format json | jq -r '.results[][5]' 2>/dev/null | head -1)
if [ -n "$ASN" ]; then
echo "=== 同ASN的其他IP ===" > "$OUTPUT_DIR/same_asn.txt"
fofa search "asn=$ASN" >> "$OUTPUT_DIR/same_asn.txt"
fi
# 3. 查询同一国家的其他IP
COUNTRY=$(fofa search "ip=$TARGET_IP" --format json | jq -r '.results[][4]' 2>/dev/null | head -1)
if [ -n "$COUNTRY" ]; then
echo "=== 同国家的其他IP ===" > "$OUTPUT_DIR/same_country.txt"
fofa search "country=$COUNTRY" >> "$OUTPUT_DIR/same_country.txt"
fi
# 4. 查询开放相同端口的IP
PORTS=$(fofa search "ip=$TARGET_IP" --format json | jq -r '.results[][1]' | tr '\n' ',' | sed 's/,$//')
if [ -n "$PORTS" ]; then
echo "=== 开放相同端口的IP ===" > "$OUTPUT_DIR/same_ports.txt"
fofa search "port=($PORTS)" >> "$OUTPUT_DIR/same_ports.txt"
fi
echo "威胁情报收集完成,结果保存在 $OUTPUT_DIR 目录"总结#
Fofa是一款功能强大的网络空间搜索引擎,为网络安全研究和威胁情报收集提供了全面的工具。
核心优势#
- 中文支持: 完全支持中文搜索和界面
- 覆盖广泛: 拥有全球网络空间的实时视图
- 深度搜索: 支持复杂的搜索语法和过滤条件
- 实时数据: 提供实时的网络设备信息
- API支持: 提供强大的API接口,支持自动化
- 证书搜索: 专门的证书搜索和分析功能
应用场景#
- 网络安全研究和渗透测试
- 企业资产发现和管理
- 威胁情报收集和分析
- 安全评估和漏洞扫描
- 攻击面管理
- 证书监控和分析
最佳实践#
- API密钥管理: 妥善保管API密钥和邮箱,避免泄露
- 查询优化: 使用精确的搜索条件,减少不必要的数据传输
- 结果过滤: 使用字段过滤,只获取需要的信息
- 批量操作: 使用脚本或API进行批量查询
- 数据缓存: 缓存查询结果,减少重复查询
使用限制#
- 免费版:每天100次查询,每次最多100条结果
- 付费版:更高的查询限制和更多功能
- 需要遵守使用条款和服务协议
Fofa搜索语法特点#
- 使用
=进行精确匹配 - 使用
&&表示AND,||表示OR,!表示NOT - 支持通配符
* - 支持正则表达式
- 支持多种数据字段查询
通过掌握Fofa的各种功能和使用技巧,可以有效地进行网络资产发现、安全评估和威胁情报收集,为网络安全工作提供有力支持。