部署并启动 DVWA 测试平台,完成主机发现、端口扫描、服务版本识别。
外观
外观
约 3893 字大约 13 分钟
网络安全技术侦察NmapDVWA
2026-03-12
教学导读
本项目对应教材第 2 章 2.1~2.2 节。本次课从攻击准备阶段入手,理解社会工程学、信息搜集、端口扫描、漏洞扫描的原理,并在 Kali WSL + DVWA Docker 靶场 中完成一次主机发现与服务识别。
授权范围
本节所有扫描只允许面向 Kali 中启动的 DVWA 靶机。课堂中提到 Whois、DNS 侦查、搜索引擎挖掘等内容只做原理解释,不对真实公网、校园网或第三方站点做实操。
部署并启动 DVWA 测试平台,完成主机发现、端口扫描、服务版本识别。
借助 /opt/hackingtool 理解 Information Gathering 分类,课堂只选择 Nmap 等授权范围内工具。
提交一份端口扫描报告,包含目标、命令、开放端口、服务版本、OS 猜测与边界说明。
理解攻击准备阶段、社会工程学、信息搜集、端口扫描与漏洞扫描的基本原理。
使用 course-scope、start_dvwa、nmap、whatweb,并阅读 /opt/hackingtool/README.md 中的 Information Gathering 分类。
完成 DVWA 主机发现、端口扫描、服务版本识别,并整理端口扫描报告。
本节安全提醒
本节只允许扫描 Kali 中启动的 DVWA 靶机或 127.0.0.1:8080。Whois、DNS 侦查、搜索引擎挖掘只学习原理,不对真实公网、校园网或第三方站点做实操。hackingtool 只作为工具分类索引,不运行批量安装脚本或无关攻击模块。
网络攻击不是一个单点动作,而是一条逐步推进的链路。防守者学习攻击链,是为了知道风险如何形成、应该在哪些环节提前阻断。
| 阶段 | 攻击者动作 | 防守者应该关注 |
|---|---|---|
| 准备 | 社会工程学、公开信息搜集、资产识别 | 降低暴露面、规范公开信息、做资产台账 |
| 探测 | 主机发现、端口扫描、服务识别 | 关闭不必要端口、限制访问来源、保留日志 |
| 评估 | 漏洞扫描、版本比对、风险排序 | 补丁管理、基线加固、漏洞处置闭环 |
| 实施 | 尝试认证突破或漏洞利用 | WAF、登录保护、最小权限、异常告警 |
| 善后 | 隐藏痕迹、权限维持、横向移动 | 日志审计、EDR、账号巡检、应急响应 |
社会工程学(利用人的信任、焦虑、疏忽来达成攻击目的)常见形式包括:
课堂处理方式
社会工程学只做案例分析和识别训练,不制作钓鱼页面、不群发测试邮件、不诱导真实用户提交信息。
| 技术 | 能看到什么 | 本节实操状态 |
|---|---|---|
| Whois 查询 | 域名注册主体、注册商、时间信息 | 只讲原理,不查真实目标 |
| DNS 侦查 | 域名到 IP、子域名、解析记录 | 只用示例解释,不扫公网 |
| 搜索引擎挖掘 | 公开页面、泄露文件、错误索引 | 只讲风险,不做真实检索 |
| 主机发现 | 目标是否在线 | 只对 DVWA 容器 IP 实操 |
| 端口扫描 | 哪些服务对外开放 | 只对 DVWA 容器或 127.0.0.1:8080 实操 |
端口扫描的本质是读取网络协议反馈:不同端口状态会对探测报文给出不同响应。
| 扫描方式 | 工作方式 | 优点 | 课堂注意 |
|---|---|---|---|
TCP 全连接扫描(-sT) | 完成三次握手后判断端口 | 不依赖特殊权限,结果直观 | 容易被日志记录 |
SYN 半开扫描(-sS) | 发送 SYN,收到 SYN/ACK 后立即 RST | 速度快,常用于安全测试 | 需要权限,本课只对靶机使用 |
UDP 扫描(-sU) | 根据 ICMP 或应用层响应判断 | 能发现 UDP 服务 | 慢,误判较多,前三次课不作为重点 |
Nmap(Network Mapper,网络映射工具)通常按以下顺序工作:
漏洞扫描不是“自动入侵”,而是把观察到的服务、版本、响应特征与已知规则做匹配。
| 方式 | 说明 | 局限 |
|---|---|---|
| 特征库匹配 | 根据版本、Banner、响应内容判断可能漏洞 | 可能误报,需要人工确认 |
| 插件检测 | 由脚本或插件对特定风险点做探测 | 需要明确目标和授权范围 |
| 行为比对 | 观察输入、输出、错误回显和权限变化 | 需要结合业务语境分析 |
本节定位
第 2 次课只做到“发现资产与服务”,不进行漏洞利用。第 3 次课才进入 DVWA 初步漏洞检测。
进入 Kali:
wsl.exe -d Kali在 Kali 中执行:
course-scope
start_dvwa
docker ps --filter name=dvwa获取 DVWA 容器 IP:
DVWA_IP=$(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' dvwa)
echo "$DVWA_IP"目标选择
如果获取到了容器 IP,优先对该 IP 做主机发现和 80 端口服务识别;如果课堂环境只允许访问宿主绑定端口,则使用 127.0.0.1:8080 做服务识别。
nmap -sn "$DVWA_IP"课堂真实输出(2026-04-28,本机 Kali,DVWA 容器 IP 为 172.17.0.2):
Starting Nmap 7.99 ( https://nmap.org ) at 2026-04-28 13:51 +0800
Nmap scan report for 172.17.0.2
Host is up (0.000058s latency).
MAC Address: EE:22:1A:77:DE:08 (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 0.63 seconds输出解释:
Host is up 表示 DVWA 容器在线,可以继续做端口和服务识别。0.000058s latency 是本机 Docker 网络里的往返延迟,很低是正常现象。MAC Address 是 Docker 虚拟网卡地址,不同电脑上可能不同。1 IP address (1 host up) 表示本次只扫描了 1 个授权靶场目标,且目标在线。需要记录:
对 DVWA 容器 IP:
nmap -sS -sV -O -p 80 "$DVWA_IP"课堂真实输出(2026-04-28,本机 Kali):
Starting Nmap 7.99 ( https://nmap.org ) at 2026-04-28 13:51 +0800
Nmap scan report for 172.17.0.2
Host is up (0.000080s latency).
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.25 ((Debian))
MAC Address: EE:22:1A:77:DE:08 (Unknown)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose|router
Running: Linux 4.X|5.X, MikroTik RouterOS 7.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5 cpe:/o:mikrotik:routeros:7 cpe:/o:linux:linux_kernel:5.6.3
OS details: Linux 4.15 - 5.19, OpenWrt 21.02 (Linux 5.4), MikroTik RouterOS 7.2 - 7.5 (Linux 5.6.3)
Network Distance: 1 hop
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 8.07 seconds输出解释:
80/tcp open 表示容器的 80 端口开放。SERVICE VERSION 识别出 Web 服务为 Apache httpd 2.4.25 ((Debian)),这是端口扫描报告中最重要的服务版本证据。Warning: OSScan results may be unreliable 表示 OS 猜测不可靠,因为本次只扫描到开放端口,缺少至少 1 个关闭端口作为对照。Running 和 OS details 只能写成“疑似 Linux 内核环境”,不能写成确定操作系统结论。对本机绑定端口:
nmap -Pn -sT -sV -p 8080 127.0.0.1课堂真实输出(2026-04-28,本机 Kali):
Starting Nmap 7.99 ( https://nmap.org ) at 2026-04-28 13:51 +0800
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00071s latency).
PORT STATE SERVICE VERSION
8080/tcp open http Apache httpd 2.4.25 ((Debian))
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.15 seconds输出解释:
-Pn 表示跳过主机发现,直接进入端口扫描。WSL 环境下扫描 127.0.0.1 时,如果不加它,Nmap 可能误判 Host seems down。8080/tcp open 表示 Windows 浏览器访问的本机映射端口处于开放状态。Apache httpd 2.4.25 ((Debian)) 说明 127.0.0.1:8080 后面映射的是 DVWA 容器里的 Apache Web 服务。本节课出现的 Nmap 参数可以按“先确认主机,再确认端口,再识别服务”的顺序理解:
| 参数 | 全称 / 含义 | 在本节课中的作用 | 使用边界 |
|---|---|---|---|
-sn | Ping Scan,只做主机发现 | 判断 DVWA 容器 IP 是否在线,不扫描具体端口 | 只用于课程明确给出的靶场 IP |
-sS | SYN Scan,SYN 半开扫描 | 通过发送 SYN 判断端口状态,速度较快 | 需要权限;只对 DVWA 容器 IP 使用 |
-Pn | No Ping,跳过主机发现 | 在 WSL 扫描 127.0.0.1:8080 时避免误判主机不在线 | 确认目标确实是本机靶场后再使用 |
-sT | TCP Connect Scan,TCP 全连接扫描 | 完成完整 TCP 连接来判断端口状态,适合扫 127.0.0.1:8080 | 结果更直观,但更容易被日志记录 |
-sV | Service Version Detection,服务版本识别 | 识别开放端口背后的服务类型和版本,例如 HTTP 服务 | 版本识别结果可能不完整,需要人工确认 |
-O | OS Detection,操作系统猜测 | 根据协议响应特征猜测目标操作系统 | 容器环境中可能不准确,报告可写“未可靠识别” |
-p | Port,指定扫描端口 | 限定只扫描 80 或 8080,避免扩大范围 | 本课不做大范围端口枚举 |
把三条命令拆开看:
nmap -sn "$DVWA_IP"这条命令只回答一个问题:这台靶机在线吗? 它适合作为扫描前的第一步。
nmap -sS -sV -O -p 80 "$DVWA_IP"这条命令回答三个问题:80 端口是否开放、运行什么服务、能否猜测操作系统。其中 -O 在 Docker 容器场景中可能不稳定,所以报告中不能强行把 OS 猜测写成确定结论。
nmap -Pn -sT -sV -p 8080 127.0.0.1这条命令用于扫描 Windows 浏览器访问的本机绑定端口:127.0.0.1:8080 是否有 Web 服务在响应,以及能识别出什么服务信息。其中 -Pn 用来跳过主机发现,避免 WSL 环境下 Nmap 对 loopback 地址误判为不可达。
可选 Web 指纹识别:
whatweb --no-errors --color=never http://127.0.0.1:8080课堂真实输出(2026-04-28,本机 Kali):
http://127.0.0.1:8080 [302 Found] Apache[2.4.25], Cookies[PHPSESSID,security], Country[RESERVED][ZZ], HTTPServer[Debian Linux][Apache/2.4.25 (Debian)], IP[127.0.0.1], RedirectLocation[login.php]
http://127.0.0.1:8080/login.php [200 OK] Apache[2.4.25], Country[RESERVED][ZZ], DVWA, HTTPServer[Debian Linux][Apache/2.4.25 (Debian)], IP[127.0.0.1], PHP, PasswordField[password], Title[Login :: Damn Vulnerable Web Application (DVWA) v1.10 *Development*]输出解释:
[302 Found] 和 RedirectLocation[login.php] 表示访问首页会跳转到登录页。[200 OK] 表示 login.php 页面正常响应。DVWA、PHP、PasswordField[password] 说明 WhatWeb 识别到这是一个带登录表单的 DVWA Web 应用。hackingtool 是 GitHub 上的开源安全工具集合项目,项目地址为 Z4nzu/hackingtool。它不是一个单独的扫描器,也不是“一键攻击工具”;更准确地说,它把信息搜集、Web 检测、SQL 注入、XSS、密码攻击等常见安全工具按类别整理在一起,方便学习者认识“某一类安全任务通常会用哪些工具”。
在本课程中,hackingtool 的作用有三点:
| 作用 | 在本课中的用法 | 边界 |
|---|---|---|
| 工具分类导航 | 通过 README 认识 Information Gathering、Network Map 等分类 | 只看分类和工具用途,不批量安装 |
| 工具生态认知 | 理解 Nmap、WhatWeb 等工具分别解决什么问题 | 不把工具数量当作学习目标 |
| 报告辅助 | 把“工具类别-检测目标-输出证据”写进扫描报告 | 只面向 DVWA 靶场,不迁移到公网或校园网 |
本机 Kali 镜像已放置 /opt/hackingtool 源码目录。前三次课不要求运行 install.sh,也不使用无关攻击模块;需要掌握的是:看到一个安全任务时,能知道它大概属于哪类工具、能解决什么问题、输出结果如何解释。
学习操作路径:
cd /opt/hackingtool
grep -n "Information Gathering" README.md
grep -n "Network Map" README.md自查要点:
| 问题 | 参考方向 |
|---|---|
| Information Gathering 类别解决什么问题? | 帮助发现目标、服务、域名、暴露面 |
| 本节为什么只选择 Nmap? | 当前目标是本机 DVWA,Nmap 已能满足主机发现与服务识别 |
| 为什么不使用 Shodan、theHarvester 等公网 OSINT 工具? | 本课程前三次课不对真实公网目标做实操 |
| 字段 | 填写要求 |
|---|---|
| 实验目标 | 只能写 DVWA 容器 IP 或 127.0.0.1:8080 |
| 授权说明 | 写明“本机 Docker 靶场,仅课堂授权范围” |
| 扫描命令 | 粘贴实际执行命令 |
| 开放端口 | 写端口号、协议、状态 |
| 服务版本 | 写 Nmap 或 WhatWeb 识别结果 |
| OS 猜测 | 写 Nmap 猜测结果,若无法判断则写“未可靠识别” |
| 风险提示 | 从暴露面角度说明可能风险,不写未验证漏洞 |
| 截图证据 | 至少 2 张:主机发现、服务识别 |
报告底线
报告中不能把“开放端口”直接写成“存在漏洞”。开放端口只是暴露面证据,是否存在漏洞需要后续检测与人工确认。
| 验收项 | 标准 |
|---|---|
| DVWA 启动 | docker ps 能看到 dvwa 容器 |
| 主机发现 | 能对 DVWA 容器 IP 完成 nmap -sn |
| 服务识别 | 能识别 Web 服务端口与基础服务信息 |
| hackingtool 范围 | 能指出 Information Gathering 与 Nmap 的关系 |
| 报告提交 | 命令、截图、结果、边界说明完整 |
/opt/hackingtool/README.md 中找出 3 个 Information Gathering 工具,说明哪些适合本机靶场,哪些不适合前三次课。