Docker 部署 DVWA 与 SSH 隧道

Docker 部署 DVWA 与 SSH 隧道 日期:2026-07-28 前文:02_Docker与虚拟机与NAS 一、DVWA 是什么 DVWA(Damn Vulnerable Web Application) 是一个故意设计得漏洞百出的 PHP/MySQL Web 应用,用于安全从业人员练习渗透测试。 内置漏洞类型(对应 CISP-PTE Web 维度 40 分) 漏洞类型 攻击方法 CISP-PTE 覆盖 SQL 注入 联合查询 / 报错注入 / 盲注 ✅ XSS 反射型 / 存储型 / DOM 型 ✅ CSRF 跨站请求伪造 ✅ 文件包含 LFI(本地文件包含)/ RFI(远程文件包含) ✅ 文件上传 前端绕过 / MIME 绕过 / 黑名单绕过 ✅ 命令注入 RCE(远程命令执行) ✅ 暴力破解 弱口令爆破 ✅ CAPTCHA 绕过 验证码逻辑漏洞 ✅ 安全等级 Low → 无任何防护,学习漏洞原理 Medium → 有基础过滤(如 mysql_real_escape_string),但可绕过 High → 更强的防御,需要更高级的绕过技巧 Impossible → 理论上无法攻破(最佳实践级别的防御) 二、部署过程 完整命令 # 1. 拉取镜像(经中科大 Docker 镜像加速) docker pull vulnerables/web-dvwa # 2. 启动容器(仅监听本地 127.0.0.1,不暴露到公网) docker run -d --name dvwa -p 127.0.0.1:8080:80 vulnerables/web-dvwa 参数解释 参数 含义 docker pull 从镜像仓库下载 DVWA 镜像到本地 docker run -d 后台运行容器(-d = detached) --name dvwa 给容器起名 dvwa,之后用这个名字操作容器 -p 127.0.0.1:8080:80 端口映射——宿主机 127.0.0.1 的 8080 端口 → 容器内的 80 端口 vulnerables/web-dvwa 使用的镜像名 三、验证结果分析 命令 1:docker ps(查看正在运行的容器) CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 89beb5ef831d vulnerables/web-dvwa "/main.sh" 7 minutes ago Up 7 minutes 127.0.0.1:8080->80/tcp dvwa 字段 本机输出 含义 CONTAINER ID 89beb5ef831d 容器的唯一标识(与镜像 ID 不同——镜像是模板,容器是运行实例) IMAGE vulnerables/web-dvwa 基于哪个镜像创建的 COMMAND /main.sh 容器启动时执行的脚本(DVWA 的入口) CREATED 7 minutes ago 容器创建时间 STATUS Up 7 minutes Up = 正在运行(Exited = 已停止) PORTS 127.0.0.1:8080→80/tcp 端口映射——关键:只有 127.0.0.1,公网无法访问 NAMES dvwa 容器名称,之后用 docker stop dvwa 等控制它 命令 2:ss -tlnp | grep -E '22|8080'(查看端口监听状态) LISTEN 0 4096 127.0.0.1:8080 0.0.0.0:* LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 128 [::]:22 [::]:* 行 监听地址 端口 含义 第 1 行 127.0.0.1 8080 DVWA 容器——只监听本地回环,外网无法访问 第 2 行 0.0.0.0 22 SSH 服务——监听所有网卡,任何 IP 都能连(但只允许密钥认证) 第 3 行 [::] 22 SSH 服务 IPv6 版 0.0.0.0 和 127.0.0.1 的区别 0.0.0.0:22 → "谁来都行":公网 IP、内网 IP、127.0.0.1 都能访问 22 端口 SSH 需要这个——你从家里连服务器,走的就是公网 IP 的 22 端口 127.0.0.1:8080 → "只允许我自己":只有在本机(服务器自己)才能访问 8080 外部任何 IP 都连不上 8080——即使知道端口号也没用 DVWA 要的就是这个——靶机不能暴露给公网脚本小子 四、SSH 隧道:在保证安全的前提下让你访问靶机 为什么需要隧道 问题: 浏览器在你的 Windows 电脑上 → DVWA 在远程服务器上 但 DVWA 只监听 127.0.0.1 → 你的浏览器无法直接访问 解决: SSH 隧道 = 在你的电脑和服务器之间挖一条加密通道 你把本地 8080 端口的请求,通过 SSH(22 端口)转发到服务器的 127.0.0.1:8080 结果:浏览器打开 127.0.0.1:8080,实际上访问的是服务器上的 DVWA 隧道命令 ssh -L 8080:127.0.0.1:8080 mycvm 参数 含义 -L Local port forwarding(本地端口转发) 8080 本地(Windows)监听的端口 127.0.0.1 目标 IP——这里指服务器自己的 127.0.0.1 8080 目标端口——DVWA 容器映射出来的端口 mycvm SSH 别名,指向你的云服务器 隧道工作原理 ┌─────────────────────────────────────────────────────┐ │ 你的 Windows 电脑 │ │ │ │ 浏览器 ──→ http://127.0.0.1:8080 │ │ │ │ │ ▼ │ │ SSH 客户端(ssh -L 8080:...) │ │ 把本地 8080 的请求通过 SSH 隧道转发 │ └────────────────┬────────────────────────────────────┘ │ │ SSH 隧道(走 22 端口,全程加密) │ ┌────────────────┴────────────────────────────────────┐ │ 云服务器 │ │ │ │ SSH 服务端 ──→ 转发到 127.0.0.1:8080 │ │ │ │ │ ▼ │ │ Docker 容器(DVWA:80) │ └─────────────────────────────────────────────────────┘ 访问步骤 1. 本地 PowerShell 跑:ssh -L 8080:127.0.0.1:8080 mycvm → 保持这个窗口开着(关了隧道就断了) 2. 本地浏览器打开:http://127.0.0.1:8080 → 默认账号 admin / password → 进入后点击 "Create / Reset Database" 初始化 3. 隧道窗口 Ctrl+C → 隧道断开 → 浏览器访问不了 → 靶机关闭不影响安全 安全边界总结 公网能访问的: ✅ 22 端口(SSH)——但只允许密钥认证,暴力破解无效 公网不能访问的: ❌ 8080 端口(DVWA)——127.0.0.1 绑定 + 安全组未开放 ❌ 通过 22 端口的 SSH 隧道 → 需要先通过密钥认证才能建立隧道 结论:要访问 DVWA,必须同时满足: 1. 拥有你的私钥(id_ed25519) 2. 建立 SSH 隧道 缺少任何一个条件 → 靶机完全不可见 五、Docker 常用控制命令速查 docker ps # 查看运行中的容器 docker stop dvwa # 停止 DVWA docker start dvwa # 重新启动 docker rm dvwa # 删除容器 docker images # 查看本地所有镜像 docker system prune -a # 清理所有未使用的镜像/容器(省磁盘) 六、当前服务器状态 一台云服务器:mycvm(154.8.147.160) ├── SSH(22 端口,密钥认证) ├── Docker Engine │ ├── 镜像:vulnerables/web-dvwa │ └── 容器:dvwa(127.0.0.1:8080,仅本机访问) ├── Docker 镜像加速:中科大 + DaoCloud └── apt 源:腾讯云内网源 下一步:开始在 DVWA 上手动练习 SQL 注入(Low 等级) ...

July 28, 2026 · 3 min · 521 words

Docker 与虚拟机与 NAS

Docker 与虚拟机与 NAS 日期:2026-07-28 前文:2026_0728_01_云服务器初始配置与SSH密钥认证 一、三者分别是什么 Docker(容器引擎) Docker 是一个应用打包和运行平台。它把应用及其所有依赖(代码、运行时、系统库、配置)打包成一个"镜像",这个镜像可以在任何安装了 Docker 的机器上原样运行。 核心思想:一次打包,到处运行。 开发环境跑得通 → 测试环境跑得通 → 生产环境跑得通。 因为这三个环境用的是同一个镜像,不存在"我机器上没问题啊"。 核心概念 是什么 类比 镜像(Image) 应用的只读模板,包含运行应用所需的一切 蛋糕模具 容器(Container) 镜像的运行实例,有自己的文件系统、进程空间、网络 用模具做出的蛋糕 仓库(Registry) 存放和分发镜像的地方(Docker Hub / 私有仓库) 模具商店 虚拟机(Virtual Machine) 虚拟机是通过Hypervisor(虚拟机管理器)在物理硬件上模拟出一台完整的虚拟计算机。每台 VM 有自己的虚拟 CPU、内存、硬盘、网卡,以及独立的操作系统内核。 常见的 Hypervisor: VMware Workstation / VirtualBox — 装在 Windows/macOS 上,你本地跑靶机用的 KVM — Linux 内核内置,云厂商(腾讯云/阿里云/AWS)底层用的就是这个 NAS(Network Attached Storage,网络附加存储) NAS 是一台专门用来存文件的设备,通过网线连在你的路由器上,局域网内所有设备都能访问它。本质上就是一台插了很多硬盘的小型服务器,只不过操作系统被简化成了文件管理专用。 常见形态: 品牌成品:群晖(Synology)/ 威联通(QNAP)——买来即用,贵但省心 自建 DIY:旧电脑 / 树莓派 + 多块硬盘 + TrueNAS / Unraid 系统——便宜但折腾 注意:NAS 和 Docker/虚拟机不在同一个维度上比较。NAS 是一个硬件设备 / 文件服务,Docker 和虚拟机是虚拟化技术。你可以在 NAS 上跑 Docker,也可以在 NAS 上跑虚拟机——它们可以组合使用。 ...

July 28, 2026 · 3 min · 530 words