不用FOFA也能做资产测绘:开源工具链Masscan+Naabu+httpx实战
前言
FOFA Pro年费4888元起步,Shodan会员49美元/月,企业API更是5000美元起。对于个人安全研究员和小团队来说,这笔费用并不低。好消息是,开源工具链Masscan+Naabu+httpx完全能够胜任大部分资产测绘场景,而且扫描速度并不逊色于商业方案。
本文直接上命令,手把手搭建一套完整的开源资产测绘平台。
付费工具定价对比
| 工具 | 价格 | 特色 | 适用场景 |
|---|---|---|---|
| FOFA Pro | ¥4,888/年起 | 中文资产库,历史数据丰富 | 国内资产测绘首选 |
| Shodan Membership | $49/月,企业API $5,000+/年 | 全球覆盖面最广,IoT设备库强大 | 全球资产监控 |
| Censys Pro | $99/月起 | 证书透明度数据,扫描频率高 | 证书关联分析 |
| Cobsys | $3,000+/年 | 漏洞关联能力强 | 企业级资产管理 |
核心痛点:这些平台的价值在于历史数据积累和关联分析能力。自建方案无法替代历史数据查询,但在主动扫描、实时测绘方面完全够用。
免费替代方案介绍
Masscan - 极速端口扫描器
Masscan是目前最快的互联网端口扫描工具,能在6分钟内扫描整个IPv4地址空间(约42亿IP)。它的异步传输机制使其速度远超传统nmap。
GitHub: https://github.com/robertdavidgraham/masscan
Naabu - 快速端口发现
ProjectDiscovery团队出品,基于Go语言开发,支持SYN扫描和CONNECT扫描。与Masscan互补,适合精准端口发现。
GitHub: https://github.com/projectdiscovery/naabu
httpx - HTTP探测引擎
同样是ProjectDiscovery团队出品,能快速识别HTTP服务的标题、状态码、技术栈等信息。
GitHub: https://github.com/projectdiscovery/httpx
完整安装步骤
环境要求
- Ubuntu 20.04+ / Debian 11+
- Go 1.21+
- 2GB+ 内存
一、安装Go环境
# 下载Go
wget -q https://go.dev/dl/go1.22.4.linux-amd64.tar.gz
sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.22.4.linux-amd64.tar.gz
# 配置环境变量
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
echo 'export PATH=$PATH:$(go env GOPATH)/bin' >> ~/.bashrc
source ~/.bashrc
go version
二、安装Masscan
sudo apt update && sudo apt install -y git gcc make libpcap-dev
git clone https://github.com/robertdavidgraham/masscan.git
cd masscan && make -j4
sudo cp bin/masscan /usr/local/bin/
masscan --version
三、安装Naabu
sudo apt install -y libpcap-dev
go install -v github.com/projectdiscovery/naabu/v2/cmd/naabu@latest
naabu -version
四、安装httpx
go install -v github.com/projectdiscovery/httpx/cmd/httpx@latest
httpx -version
五、安装nmap(辅助服务识别)
sudo apt install -y nmap
nmap --version
实战配置示例
场景一:快速扫描单个IP段的常用端口
# Masscan快速扫描前1000端口,速率10000包/秒
masscan 192.168.1.0/24 -p1-1000 --rate=10000 -oG masscan_output.txt
# 解析开放端口
grep "open" masscan_output.txt | awk '{print $4}' | sort -u > live_hosts.txt
场景二:Naabu深度端口发现
# 扫描TOP 10000端口,使用SYN扫描
naabu -host 10.0.0.0/24 -top-ports 10000 -s -o naabu_results.txt
# 从CIDR列表批量扫描
naabu -list cidrs.txt -top-ports 1000 -o naabu_output.txt -silent
场景三:完整资产测绘流程(重点)
这是一套生产级的自动化扫描脚本:
#!/bin/bash
# asset_scan.sh - 完整资产测绘脚本
TARGET=$1
OUTPUT_DIR="scan_$(date +%Y%m%d_%H%M)"
mkdir -p $OUTPUT_DIR
echo "[*] Step 1: Masscan快速发现存活主机..."
masscan $TARGET -p80,443,8080,8443,22,3389,3306,6379,27017 --rate=5000 \
-oG $OUTPUT_DIR/masscan_alive.txt 2>/dev/null
echo "[*] Step 2: 提取存活主机列表..."
grep "open" $OUTPUT_DIR/masscan_alive.txt | awk '{print $4}' | sort -uV \
> $OUTPUT_DIR/alive_hosts.txt
echo "[+] 发现 $(wc -l < $OUTPUT_DIR/alive_hosts.txt) 个存活主机"
echo "[*] Step 3: Naabu全端口精细扫描..."
naabu -list $OUTPUT_DIR/alive_hosts.txt -top-ports 10000 -o $OUTPUT_DIR/naabu_ports.txt 2>/dev/null
echo "[*] Step 4: httpx服务识别..."
cat $OUTPUT_DIR/naabu_ports.txt | httpx -title -status-code -tech-detect \
-o $OUTPUT_DIR/httpx_services.txt -silent
echo "[+] 扫描完成!结果保存在 $OUTPUT_DIR/"
cat $OUTPUT_DIR/httpx_services.txt
使用方式:
chmod +x asset_scan.sh
sudo ./asset_scan.sh 192.168.1.0/24
场景四:与ProjectDiscovery生态联动
# 安装subfinder(子域名发现)
go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest
# 子域名发现 -> 端口扫描 -> HTTP探测 完整链路
subfinder -d example.com -silent | httpx -title -status-code -o results.txt
# 更完整的链路:子域名 -> 存活判断 -> 端口扫描 -> 服务识别
subfinder -d target.com -silent | tee subdomains.txt | \
naabu -top-ports 1000 -silent | \
httpx -title -status-code -tech-detect -o final_assets.txt
场景五:自建资产数据库(SQLite)
商业方案的核心优势是历史数据。我们可以用SQLite自建简单资产库:
# 安装sqlite3
sudo apt install -y sqlite3
# 创建数据库
sqlite3 assets.db << 'SQL'
CREATE TABLE IF NOT EXISTS hosts (
id INTEGER PRIMARY KEY AUTOINCREMENT,
ip TEXT NOT NULL,
port INTEGER,
service TEXT,
title TEXT,
status_code INTEGER,
tech TEXT,
scan_date TEXT DEFAULT (datetime('now')),
UNIQUE(ip, port)
);
SQL
# 导入httpx结果
while IFS= read -r line; do
ip=$(echo "$line" | awk '{print $1}' | sed 's|https\?://||;s/:.*//')
port=$(echo "$line" | grep -oP ':\K\d+')
title=$(echo "$line" | grep -oP '\[.*?\]' | head -1 | tr -d '[]')
status=$(echo "$line" | grep -oP '\d{3}' | head -1)
sqlite3 assets.db "INSERT OR REPLACE INTO hosts(ip,port,title,status_code) VALUES('$ip',$port,'$title',$status);"
done < httpx_services.txt
# 查询统计
sqlite3 assets.db "SELECT status_code, COUNT(*) FROM hosts GROUP BY status_code;"
功能对比表
| 功能维度 | FOFA/Shodan付费版 | Masscan+Naabu+httpx |
|---|---|---|
| 扫描速度 | 依赖平台更新频率 | 极快,可控 |
| 历史数据 | ✅ 海量历史数据 | ❌ 需自建存储 |
| 实时性 | ❌ 有延迟 | ✅ 实时扫描 |
| API调用 | ✅ 完善API | ✅ 命令行/脚本灵活 |
| 费用 | ¥4,888-$5,000+/年 | 完全免费 |
| 证书关联 | ✅ Censys强项 | ❌ 需额外工具 |
| 关联分析 | ✅ FOFA语法强 | ⚠️ 需自建逻辑 |
| 自定义扫描 | ❌ 受限 | ✅ 完全自定义 |
| 私有网段 | ❌ 不支持 | ✅ 支持 |
性能优化技巧
Masscan调优
# 高速扫描模式(需要足够带宽)
masscan 0.0.0.0/0 -p80 --rate=100000 --excludefile exclude.txt
# 多端口并行
masscan 10.0.0.0/8 -p22,80,443,3389,8080 --rate=50000 --retries=2
# 使用自定义源IP(多网卡场景)
masscan 192.168.0.0/16 -p80 --rate=10000 --source-ip 10.0.0.100
Naabu调优
# 并发控制
naabu -host 10.0.0.0/24 -c 50 -rate 1000 -top-ports 1000
# 使用代理扫描
naabu -host target -proxy socks5://127.0.0.1:1080
总结
对于个人安全研究员和中小团队,Masscan+Naabu+httpx这套开源工具链完全能满足日常资产测绘需求。虽然缺少FOFA和Shodan的历史数据积累,但在主动扫描速度和灵活性方面反而更优。配合SQLite或PostgreSQL自建资产库,可以逐步积累自己的资产情报数据。
建议策略:日常使用开源工具链主动扫描,关键项目时购买FOFA/Shodan月卡做历史数据补充,这样成本最低、效果最好。
评论