返回首页

不用FOFA也能做资产测绘:开源工具链Masscan+Naabu+httpx实战

不用FOFA也能做资产测绘:开源工具链++实战

前言

FOFA Pro年费4888元起步,Shodan会员49美元/月,企业更是5000美元起。对于个人安全研究员和小团队来说,这笔费用并不低。好消息是,开源工具链Masscan+Naabu+httpx完全能够胜任大部分资产测绘场景,而且扫描速度并不逊色于商业方案。

本文直接上命令,手把手搭建一套完整的开源资产测绘平台。

付费工具定价对比

工具 价格 特色 适用场景
FOFA Pro ¥4,888/年起 中文资产库,历史数据丰富 国内资产测绘首选
Shodan Membership $49/月,企业API $5,000+/年 全球覆盖面最广,设备库强大 全球资产监控
Censys Pro $99/月起 证书透明度数据,扫描频率高 证书关联分析
Cobsys $3,000+/年 漏洞关联能力强 企业级资产管理

核心痛点:这些平台的价值在于历史数据积累和关联分析能力。自建方案无法替代历史数据查询,但在主动扫描、实时测绘方面完全够用。

免费替代方案介绍

Masscan - 极速端口扫描器

Masscan是目前最快的互联网端口扫描工具,能在6分钟内扫描整个IPv4地址空间(约42亿IP)。它的异步传输机制使其速度远超传统nmap。

: https://github.com/robertdavidgraham/masscan

Naabu - 快速端口发现

ProjectDiscovery团队出品,基于语言开发,支持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.-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   && 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月卡做历史数据补充,这样成本最低、效果最好。

评论