跳转到帖子

Kali 渗透工具实战:用 Nmap、Nuclei 完成授权内网资产探测与漏洞验证

精选回复

发布于

背景在授权内网渗透中,工具的价值不在于扫描得多,而在于把资产、端口、服务版本、漏洞证据和修复复测串成可审计链路。本文以 Kali Linux 为操作端,目标范围使用文档网段 192.0.2.0/24,演示 Nmap 与 Nuclei 的安装校验、低扰动探测、结果关联和日志留存。实际执行前,应由资产负责人书面确认目标 IP、允许时段、扫描速率和禁止测试项。以下地址均为示例。不要把命令直接指向互联网或未授权网段;生产环境先从单主机、低并发开始。问题定位:先确认范围和网络路径常见误判并不是漏洞本身,而是测试机路由、代理、DNS 或出口 ACL 配置不正确。开始扫描前,先固化范围文件并检查 Kali 到目标网段的实际路径。范围文件应只包含已授权地址,后续所有工具都从该文件读取,避免手工输入造成越界。mkdir -p ~/pt/acme-2025/{scope,logs,raw,report}
cd ~/pt/acme-2025
printf '%s\n' '192.0.2.10' '192.0.2.20' > scope/targets.txt
chmod 600 scope/targets.txt

ip -br addr
ip route get 192.0.2.10
getent hosts app.intra.example
sudo nft list ruleset > logs/kali-nft-rules.txt
sha256sum scope/targets.txt | tee logs/scope.sha256
date -Is | tee logs/start-time.txt若目标经过 VPN,到达路径应显示对应隧道接口。若域名解析到范围外地址,应暂停并找负责人核对,而不是继续扫描。对禁止 ICMP 的环境,不要仅凭 ping 不通判断主机离线。工具安装与完整性检查Kali 优先使用官方 APT 仓库,便于版本追踪和卸载。不要直接执行来源不明的 curl 管道脚本。安装前检查仓库配置与签名状态,安装后记录版本。grep -Rhv '^#' /etc/apt/sources.list /etc/apt/sources.list.d/ 2>/dev/null
sudo apt update
apt-cache policy nmap nuclei
sudo apt install --yes nmap nuclei jq

nmap --version | tee logs/nmap-version.txt
nuclei -version 2>&1 | tee logs/nuclei-version.txt
dpkg-query -W -f='${Package}\t${Version}\n' nmap nuclei jq \
| tee logs/tool-packages.tsv
nuclei -update-templates模板更新后应记录模板目录的 Git 提交或文件哈希。不同模板版本可能产生不同结果,缺少版本记录会导致复测无法重现。test -d ~/.local/nuclei-templates/.git && \
git -C ~/.local/nuclei-templates rev-parse HEAD \
| tee logs/nuclei-templates.commit
find ~/.local/nuclei-templates -type f -name '*.yaml' -print0 \
| sort -z | xargs -0 sha256sum \
| sha256sum | tee logs/nuclei-templates.tree.sha256技术分析:分阶段探测而不是一次扫完内网探测建议拆成三步:存活与常用端口确认、服务识别、针对已确认 HTTP 服务的模板验证。这样既能降低对老旧设备的冲击,也能减少 Nuclei 对非 Web 端口的无效请求。第一阶段只检查批准的常用 TCP 端口,并限制发送速率。第二阶段仅对开放端口做服务识别,不默认启用侵入性 NSE 脚本。第三阶段从结果中提取 HTTP 服务,再运行限定严重级别和标签的 Nuclei 模板。Nmap 的 -sV 会主动与服务交互,-Pn 会把目标视为在线。生产网中应配合较低的 --max-rate、合理超时和重试次数。不要在不清楚影响时使用全端口高速扫描、UDP 全扫或带有爆破、拒绝服务语义的脚本。操作步骤一:Nmap 低速资产与服务识别cd ~/pt/acme-2025
sudo nmap -n -Pn -sS \
-p 22,80,443,445,3389,8080,8443 \
--max-rate 100 --max-retries 2 --host-timeout 5m \
-iL scope/targets.txt \
-oA raw/01-ports \
2>&1 | tee logs/01-ports.console.log

# 仅针对第一阶段发现的开放端口识别服务
sudo nmap -n -Pn -sV --version-light \
-p 22,80,443,445,3389,8080,8443 \
--script 'banner,http-title,http-headers,ssl-cert' \
--script-timeout 20s --max-rate 50 --max-retries 1 \
-iL scope/targets.txt \
-oA raw/02-services \
2>&1 | tee logs/02-services.console.log-oA 会同时生成普通文本、XML 和 grepable 格式。XML 适合后续解析,普通文本适合人工复核。这里显式列出 NSE 脚本,而不是使用宽泛的 vuln 分类,避免意外执行不适合生产环境的探测逻辑。操作步骤二:从 Nmap XML 生成 Web 目标不要凭端口号直接认定协议。8080 可能不是 HTTP,443 也可能承载其他 TLS 服务。下面用 Python 读取 Nmap XML,根据服务名和 TLS 隧道字段生成候选 URL,并保留来源证据。python3 - <<'PY'
import xml.etree.ElementTree as ET
from pathlib import Path

root = ET.parse('raw/02-services.xml').getroot()
urls = set()
for host in root.findall('host'):
addr_node = host.find(

服务器与云环境安全示意图
服务器、云资产与权限边界梳理示意
网络流量与边界分析示意图
网络请求、日志与边界流量分析示意

这个流程建议把“资产发现、服务识别、Web 入口整理、模板验证”拆开做,不要直接对整个网段跑全端口加全量 Nuclei 模板。内网里打印机、工控设备和老旧中间件对高并发探测比较敏感,先确认授权网段、排除清单和扫描时段。

第一阶段只做存活发现,并保留原始结果:

sudo nmap -sn -PE -PS22,80,443,445,3389 \
  -iL scope.txt --excludefile exclude.txt \
  -oA results/01-discovery

awk '/Status: Up/{print $2}' results/01-discovery.gnmap \
  > results/alive.txt

如果目标网段禁 ICMP,不要据此判定主机离线;后续端口扫描使用 -Pn。建议先扫业务常见端口,再对有响应资产补全端口:

sudo nmap -Pn -sS -T3 --max-rate 500 \
  -p 22,80,443,445,3389,8080,8443,8000,9000 \
  -iL results/alive.txt \
  -oA results/02-common-ports

sudo nmap -Pn -sV --version-light -T3 \
  --script-timeout 20s \
  -p 80,443,8000,8080,8443,9000 \
  -iL results/alive.txt \
  -oA results/03-web-services

这里不建议一开始就用 -A:它会同时启用版本探测、脚本和路径跟踪,流量与日志噪声都比较大。需要核验某台资产时再定点增加 -sC -sV,并保存 XML,后续便于导入资产平台或复盘。

Nuclei 前最好先用 httpx 把真正可访问的 URL、协议和端口整理出来,避免把 IP 列表直接交给 Nuclei 后漏掉非标准端口:

httpx -l results/alive.txt \
  -ports 80,443,8000,8080,8443,9000 \
  -follow-redirects -status-code -title -tech-detect \
  -threads 20 -timeout 5 \
  -o results/web-urls.txt

正式验证时先限定模板类别和严重级别,并控制速率:

nuclei -l results/web-urls.txt \
  -severity critical,high,medium \
  -tags cve,misconfig,exposure \
  -exclude-tags dos,fuzz,intrusive \
  -rate-limit 30 -concurrency 10 -timeout 8 -retries 1 \
  -jsonl-export results/nuclei.jsonl

有两个细节值得补充:

  • 模板库先固定版本并记录更新时间,避免同一批资产因模板变化导致结果不可复现;不要未经审核就运行自定义或第三方模板。
  • Nuclei 命中只能算线索。复核时应查看模板 ID、匹配器和实际响应,重点排除统一错误页、反向代理默认页、版本号伪装等误报;验证以无破坏的版本、配置和响应特征为主,不要在生产环境直接执行利用。

最后建议把 Nmap XML、Nuclei JSONL、扫描时间、源 IP、授权范围和排除项一起归档。蓝队侧可同步按扫描源 IP 检索防火墙、WAF、IDS 和主机日志:既能确认扫描是否完整,也能检验现有告警规则是否覆盖端口枚举、异常 HTTP 路径和模板化请求。

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。