📚 Termux 无 Root 学习开发系列
阶段一:环境搭建与终端基础 ✅ 已完成
01-05 Termux 安装 → 包管理 → 文件管理 → Vim/tmux 上/下
阶段二:编程开发环境 ✅ 已完成
06-09 Python → C/C++ → Node.js → Git
阶段三:网络与远程操作 ✅ 已完成
10-12 SSH 远程 → 网络工具 → 代理与安全通信
阶段四:Termux:API 与自动化 ✅ 已完成
13-14 硬件调用 → 定时任务
阶段五:proot-distro 完整 Linux ✅ 已完成
15-17 proot-distro → Jupyter → 桌面环境 VNC
阶段六:AI 与 AIGC 实战 ✅ 已完成
18-20 LLM API → llama.cpp → RAG 知识库
阶段七:安全工具实战
21 信息收集与端口扫描(当前篇)
22 sqlmap 注入测试与 hydra 爆破
23 密码破解与取证分析
阶段八:自托管服务与综合实战
24-26 自托管服务 → 综合项目
阶段九:综合项目
27-28 项目整合
全系列共 28 篇,已发布 21 篇,持续更新中
21 信息收集与端口扫描
难度:高级 | 阶段七:安全工具实战 · 第 1 篇
读完本篇你将能:在 Termux 无 root 环境下安装并使用 Nmap、masscan、subfinder、ffuf 等安全评估工具,对授权目标执行完整的端口扫描、DNS 侦察、Web 指纹识别和目录爆破全流程,并用 Python 脚本将多工具输出整合为结构化扫描报告。
信息安全领域有一句老话:信息收集占渗透测试 70% 的工作量。在发起任何测试之前,你需要先摸清目标暴露了哪些端口、运行了什么服务、用了什么技术栈。本篇带你在 Termux 手机上搭建一套完整的信息收集工具链——从 Nmap 端口扫描到 ffuf 目录模糊测试,覆盖网络层到应用层的侦察全流程。
📑 本文目录
01安全工具环境准备:Termux 原生 vs proot Ubuntu
02Nmap 端口扫描:TCP connect 与服务版本探测
03masscan 高速扫描与 DNS 侦察
04子域名枚举与 Web 指纹识别
05目录扫描与模糊测试
06信息整合:Python 脚本生成扫描报告
07法律道德与安全扫描规范
08实操项目:自建靶机完整信息收集
§1 安全工具环境准备:Termux 原生 vs proot Ubuntu
在前 20 篇中,你已经搭建好了 Termux 和 proot Ubuntu 两套环境。安全工具的安装方式比之前复杂:有的可以直接 pkg install,有的需要 Go 编译,有的需要 Ruby 环境,还有的必须从源码编译。我们先理清每种工具的安装路径,再逐一安装。
工具安装分类总览
| 安装方式 |
工具列表 |
前置依赖 |
| Termux 原生 |
nmap、nikto、dirb、hydra |
无 |
| Go 编译安装 |
ffuf、subfinder、gobuster |
pkg install golang |
| Ruby + gem |
whatweb |
pkg install ruby git |
| 源码编译 |
masscan |
pkg install clang make git |
第一梯队:pkg 直装工具
最省事的一批——Termux 官方源已经打包好了,一条命令搞定:
Bash
pkg install nmap nikto dirb
安装后验证 Nmap 版本。截至本文写作时,Termux 源中 Nmap 为 7.99 稳定版(2026-03-26 发布),与上游基本同步:
Bash
nmap --version
# Nmap version 7.99 ( https://nmap.org )
# Platform: aarch64-unknown-linux-gnu
第二梯队:Go 工具链编译
ffuf(v2.2.1)、subfinder(v2.16.0)、gobuster 这三个工具都用 Go 编写,安装方式相同:先装 Go 工具链,再 go install 拉取源码并编译。
Bash
pkg install golang
export GOPATH="$HOME/go"
export PATH="$PATH:$GOPATH/bin"
# 将上述两行写入 ~/.bashrc 永久生效
Go 环境就绪后,三条命令分别安装三个工具:
Bash
go install github.com/ffuf/ffuf/v2@latest
go install github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest
go install github.com/OJ/gobuster/v3@latest
编译过程需要几分钟(取决于网络和 CPU),完成后二进制文件会出现在 ~/go/bin/ 目录下。验证安装:
Bash
ffuf -V
# ffuf version 2.2.1
subfinder -version
# subfinder v2.16.0
⚠️ 常见错误
直接运行 ffuf 提示 command not found — 忘记把 ~/go/bin 加入 PATH
✓ 正确:在 ~/.bashrc 中添加 export PATH="$PATH:$HOME/go/bin",然后 source ~/.bashrc
第三梯队:Ruby gem 安装 whatweb
WhatWeb 是一个 Web 指纹识别工具,用 Ruby 编写,通过 gem 安装:
Bash
pkg install ruby git
gem install whatweb
whatweb --version
# WhatWeb version 0.5.5
第四梯队:源码编译 masscan
Masscan 是号称"5 分钟扫描全网"的高速端口扫描器,Termux 源中没有打包,需要从源码编译。由于 masscan 使用原始套接字(raw socket),在无 root 的 Termux 中部分扫描模式受限,建议在 proot Ubuntu 中运行更稳定。
Bash
|
1
2
3
4
5
6
7
8
|
cd ~
git clone https://github.com/robertdavidgraham/masscan
cd masscan
pkg install clang make gcc
make CC=clang
cp bin/masscan $PREFIX/bin/
masscan --version
# 1.3.2
|
💡 小贴士
masscan 的 SYN 扫描需要 raw socket 权限,在无 root 的 Termux 中无法使用 -sS 模式。但它的 TCP connect 模式(--echo all 配合 -p 端口指定)仍可用于高速端口探测。proot Ubuntu 中虽然没有真正的 root 权限,但 proot 环境对网络栈的模拟更完整,部分场景下兼容性更好。
proot Ubuntu 备选环境
在阶段五(第 15 篇)中你已安装了 proot-distro Ubuntu。某些工具在 proot Ubuntu 中安装更方便(如 masscan 可用 apt、whatweb 可用 apt 直接装):
Bash
proot-distro login ubuntu
apt update
apt install -y nmap masscan whatweb nikto
💡 小贴士
Termux 原生环境适合轻量扫描和快速查询(dig、nmap -sT、subfinder)。proot Ubuntu 适合需要完整 Linux 文件系统和包管理器的场景(masscan 编译、whatweb 全功能模式)。两种环境可以共用同一个网络栈,扫描结果一致。
§2 Nmap 端口扫描:TCP connect 与服务版本探测
环境就绪后,我们正式开始信息收集。Nmap 是端口扫描的事实标准——它像一栋大楼的安检巡视员,逐层走一遍,看哪些门是开着的、门后坐的是谁、有没有挂名牌。在无 root 的 Termux 中,Nmap 的部分扫描模式受限,但 TCP connect 扫描和服务版本探测完全可用。
无 root 环境的 Nmap 能力边界
先明确什么能用、什么不能用。无 root 意味着无法构造原始网络数据包:
| 扫描类型 |
参数 |
无 root 可用 |
| TCP connect |
-sT |
✓ 可用 |
| SYN 半开扫描 |
-sS |
✗ 需 root |
| 服务版本探测 |
-sV |
✓ 可用 |
| NSE 脚本扫描 |
-sC |
✓ 可用 |
| OS 指纹识别 |
-O |
✗ 需 root |
基础端口扫描:-sT TCP connect
TCP connect 扫描通过完成完整的三次握手来检测端口状态。虽然没有 SYN 扫描快(每个端口需要完成完整 TCP 连接再断开),但结果可靠,且无需任何特权:
Bash
# 扫描常用 1000 端口(默认行为)
nmap -sT 192.168.1.100
# 指定端口范围
nmap -sT -p 1-1000 192.168.1.100
# 扫描最常见 Web 端口
nmap -sT -p 80,443,8080,8443 192.168.1.100
典型输出(以扫描自建靶机为例):
Output
|
1
2
3
4
5
6
7
8
9
10
|
Starting Nmap 7.99 ( https://nmap.org )
Nmap scan report for 192.168.1.100
Host is up (0.0031s latency).
Not shown: 996 closed tcp ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
3306/tcp open mysql
8080/tcp open http-proxy
Nmap done: 1 IP address scanned in 2.31s
|
服务版本探测:-sV
仅知道端口是开的不够——80 端口后面跑的是 Nginx 还是 Apache?MySQL 还是 MariaDB?-sV 通过与目标端口交互并比对特征指纹库,识别出具体的服务软件和版本号:
Bash
nmap -sV -p 22,80,3306,8080 192.168.1.100
输出会多出版本列:
Output
|
1
2
3
4
5
6
7
|
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.6p1 (protocol 2.0)
80/tcp open http nginx 1.26.0
3306/tcp open mysql MySQL 8.4.0
8080/tcp open http Apache Tomcat 10.1.28
Service detection performed.
Nmap done: 1 IP scanned in 8.42s
|
💡 小贴士
版本探测会显著增加扫描时间(每端口需要发送多个探测包),扫描 4 个端口花了 8 秒而基础扫描仅需 2 秒。生产中建议先用 -sT 快速定位开放端口,再对开放端口执行 -sV 精准识别,而不是一开始就全端口 + 版本探测。
NSE 脚本扫描:-sC 与 --script
Nmap Script Engine(NSE)内置了 600+ 个脚本,可以自动化检测各种服务漏洞和配置问题。-sC 是默认脚本组的快捷方式,等价于 --script=default:
Bash
# 默认脚本组
nmap -sC -p 22,80 192.168.1.100
# 指定特定脚本
nmap --script ssh-auth-methods,http-title -p 22,80 192.168.1.100
# 列出所有可用脚本
ls $PREFIX/share/nmap/scripts/*.nse | wc -l
-sC 扫描的输出会在端口信息下方追加脚本发现:
Output
|
1
2
3
4
5
6
7
8
|
PORT STATE SERVICE
22/tcp open ssh
| ssh-auth-methods:
| Supported authentication methods: publickey
80/tcp open http
| http-title: Welcome to nginx!
|_Requested resources were loaded successfully
|_http-methods: GET, POST, HEAD
|
输出格式与结果保存
命令行输出是给人看的,但信息收集的成果需要保存下来供后续分析和报告生成。Nmap 支持多种输出格式:
Bash
# -oN 普通文本格式
nmap -sT -sV -oN scan_result.txt 192.168.1.100
# -oX XML 格式(适合程序解析)
nmap -sT -sV -oX scan_result.xml 192.168.1.100
# -oA 同时输出三种格式(.nmap/.xml/.gnmap)
nmap -sT -sV -oA scan_result 192.168.1.100
⚠️ 常见错误
nmap -sS 192.168.1.100 直接报错退出 — 无 root 无法使用 SYN 扫描
✓ 正确:无 root 环境一律使用 -sT(TCP connect),它不需要原始套接字权限。Nmap 7.99 在检测到无 root 时会自动降级为 -sT,但仍建议显式指定避免混淆。
§3 masscan 高速扫描与 DNS 侦察
上一节用 Nmap 摸清了端口和服务。但当目标 IP 段很大(比如整个 /24 子网或公网多台机器)时,Nmap 的速度可能不够。masscan 专为高速扫描设计,能在几分钟内扫完 65535 个端口。与此同时,在端口扫描之前,DNS 侦察能帮你把域名解析成 IP、发现子域名,确定扫描目标范围。
masscan 基础扫描
masscan 的核心优势是异步发包——它不等前一个端口的响应就发下一个,速率可达 10000 包/秒甚至更高。在 Termux 无 root 环境中,masscan 的 TCP connect 模式可用,但 SYN 模式受限:
Bash
|
1
2
3
4
5
6
|
# 扫描单 IP 的 Top 100 端口
masscan 192.168.1.100 -p1-100 --rate=500
# 扫描整个子网的 Web 端口
masscan 192.168.1.0/24 -p80,443 --rate=1000
# 全端口扫描(注意时间)
masscan 192.168.1.100 -p1-65535 --rate=500
|
典型输出:
Output
Discovered open port 80/tcp on 192.168.1.100
Discovered open port 443/tcp on 192.168.1.100
Discovered open port 80/tcp on 192.168.1.101
| 特性 |
Nmap |
masscan |
| 扫描速度 |
中等(同步发包) |
极快(异步发包) |
| 版本探测 |
✓ 支持(-sV) |
✗ 不支持 |
| NSE 脚本 |
✓ 600+ 脚本 |
✗ 不支持 |
| 推荐用法 |
精准探测 + 版本识别 |
快速发现开放端口 |
💡 小贴士
最佳实践是组合使用:先用 masscan 高速扫描全端口快速定位开放端口,再用 Nmap -sV -sC 对开放端口精准识别版本和漏洞。这比直接用 Nmap 扫全端口快 10 倍以上。--rate 参数控制发包速率,手机网络建议不超过 1000 包/秒,过高可能导致丢包误判端口为关闭。
DNS 侦察:dig 与 nslookup
在扫描 IP 之前,通常需要先通过 DNS 查询获取目标域名的 IP 地址。Termux 中使用 dnsutils 包提供 dig 和 nslookup:
Bash
pkg install dnsutils
# 查询 A 记录(IPv4 地址)
dig example.com A +short
# 查询 MX 记录(邮件服务器)
dig example.com MX +short
# 查询所有记录类型
dig example.com ANY +noall +answer
dig ANY 查询的典型输出:
Output
|
1
2
3
4
5
6
7
|
;; ANSWER SECTION:
example.com. 300 IN A 93.184.216.34
example.com. 3600 IN NS a.iana-servers.net.
example.com. 3600 IN NS b.iana-servers.net.
example.com. 3600 IN SOA ns.icann.org.
example.com. 3600 IN MX 0 mail.example.com.
# A 记录返回 93.184.216.34,这就是端口扫描的目标 IP
|
💡 小贴士
DNS 查询本身不会触发目标告警——它只是向 DNS 服务器发起请求,不直接接触目标。这意味着 DNS 侦察属于被动信息收集,可以在不惊动目标的情况下获取 IP 地址、子域名和邮件服务器信息。建议在主动扫描之前尽可能多地做被动 DNS 侦察。
§4 子域名枚举与 Web 指纹识别
端口扫描只看到了网络层,但一个域名可能对应大量子域名——blog.example.com、api.example.com、dev.example.com 每个都可能暴露不同的服务。子域名枚举帮你找到这些隐藏入口,Web 指纹识别则告诉你每个入口背后的技术栈。
subfinder 子域名被动枚举
subfinder v2.16.0 通过查询公开的被动数据源(如 crt.sh 证书透明度日志、Shodan、Censys 等)来发现子域名,全程不直接接触目标服务器,属于被动侦察。安装方式见 §1 的 Go 工具链部分。
Bash
# 基础枚举
subfinder -d example.com
# 输出到文件
subfinder -d example.com -o subdomains.txt
# 只显示存活的子域名(主动验证)
subfinder -d example.com -active
# JSON 格式输出(含来源信息)
subfinder -d example.com -json -o subdomains.json
典型输出:
Output
|
1
2
3
4
5
6
7
|
www.example.com
mail.example.com
api.example.com
dev.example.com
staging.example.com
vpn.example.com
# 发现 6 个子域名,接下来逐个 dig 解析 IP 再扫描
|
💡 小贴士
subfinder 默认查询多个被动数据源,无需 API Key 即可获得基本结果。但部分数据源(如 Shodan、SecurityTrails)需要配置 API Key 才能启用。在 ~/.config/subfinder/provider-config.yaml 中填写 API Key 后,发现的子域名数量可能增加 30-50%。
whatweb Web 指纹识别
知道子域名列表后,下一步是识别每个 Web 服务背后的技术栈——用的什么 Web 服务器、什么 CMS、什么前端框架。whatweb 通过分析 HTTP 响应头、HTML 内容、Cookie 特征等识别 1800+ 种 Web 技术:
Bash
# 扫描单个目标
whatweb http://192.168.1.100
# 详细模式
whatweb -v http://192.168.1.100
# 批量扫描子域名列表
whatweb -i subdomains.txt
whatweb 的输出简洁直观:
Output
http://192.168.1.100 [200 OK]
Country[RESERVED][ZZ], HTTPServer[nginx/1.26.0],
IP[192.168.1.100], nginx[1.26.0],
PHP[8.3.0], X-Powered-By[PHP/8.3.0],
Title[Welcome to nginx!]
一行输出就告诉你:目标运行 nginx 1.26.0 + PHP 8.3.0,服务器标题是 "Welcome to nginx!"。这些信息对后续漏洞利用至关重要——知道 PHP 版本就能定向搜索该版本的已知 CVE。
⚠️ 常见错误
whatweb https://目标 报错 SSL 证书验证失败 — Termux 的 Ruby 环境可能缺少 CA 证书
✓ 正确:安装证书包 pkg install ca-certificates,或在 whatweb 后加 --no-errors 参数跳过 SSL 错误
§5 目录扫描与模糊测试
前面的侦察告诉你目标在哪些端口运行什么服务。但 Web 应用通常还有隐藏的目录、API 端点、备份文件——这些不会在首页链接中显示。目录扫描工具通过遍历常见路径字典,尝试发现这些隐藏资源。
ffuf 模糊测试工具
ffuf v2.2.1 是目前最流行的 Web 模糊测试工具之一,用 Go 编写,速度快、配置灵活。它不仅能扫目录,还能模糊测试 URL 参数、POST body、HTTP 头等。核心原理是拿一个字典文件,逐个词拼接成 URL 向目标发请求,根据响应码或长度判断是否存在有效路径:
Bash
|
1
2
3
4
5
6
7
8
|
# 生成内置字典
pkg install seclists
# 基础目录扫描
ffuf -w ~/tools/wordlists/dirb/common.txt -u http://192.168.1.100/FUZZ
# 只显示 200/301 响应
ffuf -w common.txt -u http://192.168.1.100/FUZZ -mc 200,301
# 过滤掉特定响应大小的结果
ffuf -w common.txt -u http://192.168.1.100/FUZZ -fs 1095
|
FUZZ 是 ffuf 的占位符,工具会从字典文件中逐行取词替换它。-mc(match code)只保留指定状态码的结果,-fs(filter size)过滤掉指定响应大小的结果(用于排除通用 404 页面)。
ffuf 的实时输出是一个可交互的终端界面:
Output
|
1
2
3
4
5
6
7
|
admin [Status: 200, Size: 3402, Words: 185]
api [Status: 301, Size: 178, Words: 6]
backup [Status: 200, Size: 1095, Words: 40]
config [Status: 403, Size: 178, Words: 6]
uploads [Status: 200, Size: 0, Words: 0]
:: Progress: [4614/4614] :: Job done
# 发现 /admin /api /backup /config /uploads 等路径
|
gobuster 目录爆破
gobuster 是另一个流行的目录爆破工具,与 ffuf 功能类似但界面不同。它的优势是支持多模式(dir、dns、vhost):
Bash
# 目录模式
gobuster dir -u http://192.168.1.100 -w common.txt
# 子域名模式(DNS 爆破)
gobuster dns -d example.com -w subdomains.txt
# 指定扩展名
gobuster dir -u http://192.168.1.100 -w common.txt -x php,html,txt,bak
nikto 与 dirb 快速扫描
nikto 是一个老牌的 Web 服务器漏洞扫描器,内置 6700+ 个检测项,能自动识别危险配置、已知漏洞和信息泄露。dirb 则是轻量级目录爆破工具,内置字典:
Bash
# nikto 基础扫描
nikto -h http://192.168.1.100
# dirb 基础扫描
dirb http://192.168.1.100
nikto 输出示例(截取关键行):
Output
|
1
2
3
4
5
|
+ Server: nginx/1.26.0
+ /robots.txt contained 1 entry
+ /admin/ : Directory enforce authentication
+ /backup.zip : Archive may be accessible
+ OSVDB-3268: /icons/ directory browsable
|
💡 小贴士
目录扫描的核心是字典质量。SecLists 是最流行的安全字典集合(pkg install seclists 安装后位于 $PREFIX/share/seclists/)。初扫用 dirb/common.txt(4614 词)快速过一遍,发现线索后再用更长的 directory-list-2.3-medium.txt(220546 词)深度扫。先窄后宽,效率最高。
§6 信息整合:Python 脚本生成扫描报告
前面五节你跑了五六个工具,每个都生成了自己的输出文件——nmap.xml、subdomains.txt、ffuf_results.json……手动翻看效率低下,更不用说在手机小屏幕上。用 Python 写一个整合脚本,把多工具输出合并成一份结构化的扫描报告,是信息收集的收尾环节。
解析 Nmap XML 输出
Nmap -oX 输出的 XML 格式是程序解析的首选。Python 标准库 xml.etree.ElementTree 就能处理,无需安装第三方包:
Python
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import xml.etree.ElementTree as ET
def parse_nmap(xml_file):
tree = ET.parse(xml_file)
root = tree.getroot()
results = []
for host in root.findall('host'):
addr = host.get('addr')
for port in host.findall('.//port'):
portid = port.get('portid')
state = port.find('state').get('state')
service = port.find('service')
sname = service.get('name') if service else 'unknown'
ver = service.get('version') if service else ''
results.append({
'ip': addr, 'port': portid,
'state': state, 'service': sname,
'version': ver
})
return results
|
整合多工具输出为报告
下面这个脚本把 Nmap XML、subfinder 子域名列表和 ffuf JSON 结果合并为一份 Markdown 报告:
Python
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
import json, datetime
def generate_report(target, nmap_xml,
sub_file, ffuf_json):
ports = parse_nmap(nmap_xml)
with open(sub_file) as f:
subs = [l.strip() for l in f if l.strip()]
with open(ffuf_json) as f:
ffuf = json.load(f)
lines = [
f"# 扫描报告 - {target}",
f"生成时间: {datetime.datetime.now()}",
"",
"## 端口与服务",
"| IP | 端口 | 状态 | 服务 | 版本 |",
"|---|---|---|---|---|",
]
for p in ports:
lines.append(
f"| {p['ip']} | {p['port']} | "
f"{p['state']} | {p['service']} | {p['version']} |")
lines.append("\n## 子域名\n")
lines.extend(f"- {s}" for s in subs)
lines.append("\n## 隐藏路径\n")
for r in ffuf.get('results', []):
if int(r['status']) in (200, 301):
lines.append(
f"- /{r['input']} [{r['status']}]")
with open('scan_report.md', 'w') as f:
f.write('\n'.join(lines))
print(f"报告已保存: scan_report.md")
|
运行脚本:
Bash
python3 report.py 192.168.1.100 scan.xml subdomains.txt ffuf.json
# 报告已保存: scan_report.md
💡 小贴士
这个脚本只用了 Python 标准库(xml.etree、json、datetime),不需要安装任何第三方包。在 Termux 手机上直接 python3 report.py 即可运行。如果需要更专业的报告格式,可以安装 pip install python-nmap 库,它封装了 Nmap XML 解析,支持更复杂的查询。
§7 法律道德与安全扫描规范
在动手之前,必须明确红线。安全工具本身是中性的——在授权环境中用于学习是合法的,但未经授权对他人系统进行扫描在绝大多数国家都是违法行为。本节是整篇文章最重要的部分。
合法扫描的边界
| 场景 |
合法性 |
| 扫描自己搭建的靶机 / 虚拟机 |
✓ 合法 |
| 扫描自己拥有的服务器 / 域名 |
✓ 合法 |
| 扫描有书面授权的目标 |
✓ 合法 |
| 扫描公网随机 IP / 域名 |
✗ 违法 |
| 扫描公司网络(未经授权) |
✗ 违法 |
搭建自建靶机
最安全的练习方式是自己搭靶机。在 Termux 的 proot Ubuntu 中或你局域网的另一台机器上安装一个故意配置薄弱的 Web 服务:
Bash
# 在 proot Ubuntu 或局域网 Linux 中安装靶机
apt install -y nginx php-fpm mariadb-server
systemctl start nginx php-fpm mariadb
echo "" > /var/www/html/info.php
mkdir -p /var/www/html/admin /var/www/html/backup
echo "config: admin123" > /var/www/html/backup/config.bak
这台靶机故意暴露了:PHP info 页面、admin 目录、backup 目录下的配置文件泄露——正是前面各种扫描工具要发现的目标。
§8 实操项目:自建靶机完整信息收集
现在把前面学到的全部工具串起来,对自建靶机执行一次完整的信息收集流程。以下是标准操作顺序——先被动后主动,先发现再深入:
DNS 侦察
→
子域名枚举
→
端口扫描
→
服务探测
→
Web 指纹
→
目录扫描
→
生成报告
Bash
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# Step 1: DNS 查询
dig 192.168.1.100 PTR +short
# Step 2: 端口扫描(先快后慢)
nmap -sT -oA scan_1 192.168.1.100
# Step 3: 对开放端口做版本探测
nmap -sV -sC -p22,80,3306,8080 -oX scan_2.xml 192.168.1.100
# Step 4: Web 指纹识别
whatweb http://192.168.1.100
# Step 5: 目录扫描
ffuf -w common.txt -u http://192.168.1.100/FUZZ -mc 200,301 -o ffuf.json
# Step 6: 漏洞扫描
nikto -h http://192.168.1.100 -output nikto.txt
# Step 7: 生成整合报告
python3 report.py 192.168.1.100 scan_2.xml subdomains.txt ffuf.json
|
最终生成的 scan_report.md 包含三个维度的结构化信息:开放端口与服务版本表、子域名列表、隐藏路径发现。这就是一份完整的信息收集报告——后续的渗透测试将以此为基础展开。
💡 小贴士
信息收集的标准顺序是"被动→主动"——先用 dig、subfinder 等被动方式获取信息(不触发目标告警),再用 nmap、ffuf 等主动方式深入扫描。一旦主动扫描开始,目标的 IDS/IPS 可能会记录异常流量,因此在真实渗透测试中,被动阶段越长越好,主动扫描集中在授权窗口期内完成。
✏️ 分级练习
🟢 基础验证
对本机执行完整端口扫描
在 Termux 中对本机(127.0.0.1)执行三步扫描:1)用 nmap -sT 127.0.0.1 做 TCP 全连接扫描,记录开放端口;2)对开放端口用 -sV 做版本探测;3)用 -oX 输出 XML 并用本文的 parse_nmap 脚本解析。要求:能看到从"端口发现"到"服务版本"到"程序化解析"的完整链路。
💡 参考解法:先 pkg install nmap → nmap -sT -p- 127.0.0.1(扫描所有端口)→ nmap -sV -sC -p<开放端口> -oX mine.xml 127.0.0.1 → python3 -c "from report import parse_nmap; print(parse_nmap('mine.xml'))"。
🟡 组合应用
对自建靶机执行全流程信息收集
在 proot Ubuntu 中用 Docker 启动 DVWA 靶机(或用 Python http.server 搭建简单 Web 服务),对它执行完整信息收集流程:1)dig 反查 IP;2)nmap 端口扫描 + 版本探测;3)subfinder 子域名枚举(如果是域名);4)whatweb Web 指纹识别;5)ffuf 目录爆破;6)用本文的 generate_report 脚本整合为 scan_report.md。要求:最终报告包含端口表、子域名列表和隐藏路径三部分。
💡 参考解法:proot-distro login Ubuntu → apt install docker.io → docker run -d -p 8080:80 vulnerables/web-dvwa → nmap -sV -p8080 127.0.0.1 -oX dvwa.xml → ffuf -w common.txt -u http://127.0.0.1:8080/FUZZ -mc 200,301 -o ffuf.json → python3 report.py 127.0.0.1 dvwa.xml subs.txt ffuf.json。
🔴 开放挑战
编写自动化扫描编排脚本
编写一个 Bash 脚本 auto_recon.sh,实现"输入目标 IP → 自动完成全流程扫描 → 生成报告"的一键操作。挑战目标:1)接受命令行参数(IP 或域名);2)自动判断是 IP 还是域名,域名先 dig 解析;3)先 masscan 快速端口发现,再 nmap 精细化扫描;4)对 80/443 端口自动触发 whatweb + ffuf;5)最后调用 Python 脚本生成 Markdown 报告;6)全程记录耗时并输出统计。思考:如何避免重复扫描已完成的步骤?如何在长时间扫描中处理 Termux 后台被杀的风险?
提示:用 touch 创建 .done 标记文件实现断点续扫;用 timeout 限制单步扫描时长;用 termux-wake-unlock 防止后台被杀(需 Termux:API)。
🏷️ 知识回顾
Nmap 7.99
TCP 全连接扫描 -sT
版本探测 -sV
脚本扫描 -sC
masscan
subfinder v2.16
ffuf v2.2.1
whatweb
nikto
DNS 侦察
子域名枚举
Web 指纹识别
目录爆破
被动侦察
主动扫描
XML 解析
Go 工具链
扫描报告生成
📬 下一篇预告
第 22 篇:sqlmap 注入测试与 hydra 爆破——信息收集找回了入口,下一篇深入"入口背后的漏洞"。sqlmap 自动化检测 SQL 注入点,支持布尔/时间/联合等多种注入技术;hydra 对 SSH、FTP、HTTP 表单执行在线密码爆破。从安装配置到实战参数详解,再到 DVWA 靶机上的完整注入与爆破演示,继续在 Termux 无 root 环境下推进安全评估技能。
关注系列,持续更新中 · 点赞在看支持作者