虚拟机与网络模拟¶
前面「Docker与漏洞环境」一章解决了"单机单漏洞"的复现问题,但比赛里还有一类题靠单机环境练不了:内网渗透、多层网络渗透。这类题的难点不在某个具体漏洞,而在 网络拓扑——你和目标之间隔着路由、网段和跳板机。本章用 VMware / VirtualBox 搭一个最小但完整的多网段实验环境,为「实战能力」部分的「两层网络实战」打底。
为什么需要虚拟机拓扑¶
单机环境模拟不了什么¶
一个 Docker 容器跑起来的靶场,网络模型是"你的浏览器 → 靶机 80 端口",一条直线。但真实比赛中的内网题长这样:
- 出题方只暴露一台 边界机(通常是 Web 服务)到你的网段;
- 边界机身后还有一个你 直接访问不到 的内网段,里面跑着数据库、内网 Web、域控等;
- flag 往往在内网机器上,你必须先打穿边界机,再把它当跳板往里走。
这里涉及的技能——双网卡、路由、转发、代理隧道——都不是单机环境能给的。要练,就得自己控制网段划分,亲手配出" reachable / unreachable "的边界。
自己搭拓扑的三个好处¶
- 可控:网段、路由、防火墙全由你定义,可以精确还原比赛拓扑,也可以随手加一台机器升级难度。
- 可快照:打坏了回滚快照即可,比重装 Docker 镜像还快。
- 可复现:搭好之后,「立足点建立」「代理与隧道」「内网信息收集」这些章节的练习都可以在这套环境里做,一次搭建长期使用。
VMware / VirtualBox 网络模式速览¶
两种软件的叫法不同,但底层模型几乎一一对应。理解三种模式就够用:
NAT 模式¶
虚拟机通过宿主机做 NAT 上网,宿主机本身也在这个 NAT 网段里(VMware 默认是 VMnet8,VirtualBox 默认是 10.0.2.0/24 的 NATNetwork)。
- 虚拟机 → 外网:通。
- 宿主机 → 虚拟机:通(NAT 网段内)。
- 物理局域网里的其他机器 → 虚拟机:默认不通。
用途:给虚拟机装系统、更新软件、装工具时用它上网最省事。
仅主机(Host-only)模式¶
虚拟机和宿主机组成一个私有网段,不通外网。VMware 默认是 VMnet1,VirtualBox 需要先在"主机网络管理器"里创建 vboxnet0。
- 虚拟机 ↔ 宿主机:通。
- 虚拟机 → 外网:不通。
用途:本章用它做"攻击者所在的网段"——你的 Kali(或宿主机)和靶机的边界网卡都在这个段里,模拟"比赛方暴露给你的那个网"。
桥接(Bridged)模式¶
虚拟机直接接入宿主机所在的物理局域网,从路由器拿一个真实局域网 IP,和你手机、室友的电脑平起平坐。
用途:需要让局域网里其他真实设备访问虚拟机时才用。搭内网实验拓扑 不建议 用桥接——靶机漏洞服务暴露在真实局域网里有安全风险。
内网段:Internal Network / LAN Segment¶
除了三种常用模式,还有一个对内网实验最关键的模式:
- VirtualBox 叫 Internal Network(内部网络),随便起个名字(如
intnet1),所有选了这个名字的虚拟机就在同一个二层段里; - VMware 叫 LAN Segment(在虚拟机网卡设置里添加)。
它和 Host-only 的唯一区别是:宿主机不参与这个网段。这正是我们要的"内网"——除了跳板机,没有任何路能走进来。
多网卡多网段拓扑搭建实操¶
目标拓扑¶
用一台双网卡跳板机 + 两台内网机,搭出两层网络:
外网段 192.168.10.0/24(Host-only)
┌───────────────────────────────────────────┐
│ │
攻击机 Kali 跳板机 web01
192.168.10.100 eth0: 192.168.10.10
eth1: 172.16.1.10 ←──┐
│ (运行 Web 服务,有漏洞) │
└───────────────────────────────────────────┘ │
内网段 172.16.1.0/24(Internal Network)
┌───┴────┬──────────┐
│ │ │
内网机 db01 内网机 web02
172.16.1.20 172.16.1.30
(MySQL) (内网 Web, flag)
- Kali 只能直接到达
192.168.10.10; 172.16.1.0/24里的机器只有跳板机能碰,这模拟"比赛方的内网";- 跳板机是唯一的通路——打穿它,才能进内网。
第一步:创建虚拟网络¶
VirtualBox 在"工具 → 网络"里确认 Host-only 网卡 vboxnet0 的网段是 192.168.10.0/24(DHCP 建议关掉,全程手动配 IP,方便记忆和写脚本)。VMware 则在"虚拟网络编辑器"里把 VMnet1 设为 Host-only 并指定同网段。
Internal Network 不需要预先创建,在虚拟机网卡设置里选"Internal Network"并填名字 intnet1 即可(VMware 则新建一个 LAN Segment)。
第二步:给虚拟机分配网卡¶
- Kali:1 张网卡,Host-only。
- web01(跳板机):网卡 1 选 Host-only(eth0,外网侧);网卡 2 选 Internal Network
intnet1(eth1,内网侧)。装系统时可先临时挂一张 NAT 网卡用于装软件,装完删掉。 - db01 / web02(内网机):各 1 张网卡,Internal Network
intnet1。
用 VirtualBox 命令行配置跳板机的两张网卡等价于:
VBoxManage modifyvm "web01" --nic1 hostonly --hostonlyadapter1 vboxnet0
VBoxManage modifyvm "web01" --nic2 intnet --intnet2 intnet1
第三步:配置各机 IP¶
以内网机 db01(Ubuntu/Debian 系)为例,最小配置只需要 IP,不配默认网关——这是关键:内网机不该有能力直接出网,否则拓扑就失真了:
web02 同理配 172.16.1.30/24。跳板机 web01 两张网卡各配各的:
# web01
sudo ip addr add 192.168.10.10/24 dev eth0
sudo ip addr add 172.16.1.10/24 dev eth1
sudo ip link set eth0 up
sudo ip link set eth1 up
Kali 配 192.168.10.100/24。需要永久生效的话,Debian/Ubuntu 写进 netplan 或 /etc/network/interfaces,这里不展开——比赛环境里你多半也是在 shell 里用 ip 命令临时配。
第四步:跳板机开启转发(先理解,后拆除)¶
先做一个"教学版"配置,让全网互通,验证每台机器配置无误。跳板机上开启内核转发:
# web01:开启 IPv4 转发
sudo sysctl -w net.ipv4.ip_forward=1
# 永久生效:把 net.ipv4.ip_forward=1 写进 /etc/sysctl.conf
Kali 上加一条到内网段的路由:
内网机回包也需要路由,把默认网关指向跳板机:
验证连通性¶
# Kali 上逐层 ping
ping -c 2 192.168.10.10 # 跳板机外网口,必须通
ping -c 2 172.16.1.10 # 跳板机内网口,通了说明路由生效
ping -c 2 172.16.1.30 # 内网机 web02,通了说明转发链路完整
不通时的排查顺序:ip addr 看 IP 配上没有 → ip route 看路由 → 跳板机上 cat /proc/sys/net/ipv4/ip_forward 是不是 1 → 抓包 sudo tcpdump -i eth1 icmp 看包走到哪一跳断了。
用这套拓扑模拟比赛中的两层网络¶
从"教学版"回到"比赛版"¶
上面为了验证配置,我们给 Kali 加了直连内网的路由——但 真实比赛里没有这条路。把 Kali 上那条路由删掉,拓扑就变成了比赛形态:
此刻在 Kali 上 ping 172.16.1.30 必然超时。内网依然在,只是你看不见它——这正是比赛的起点。
对应关系一目了然:
| 实验拓扑 | 比赛中对应 |
|---|---|
| Host-only 网段 | 比赛方 VPN 分配给你的网段 |
| web01 外网口 + Web 漏洞 | 题目给的入口站点 |
| Internal Network | 比赛内网 |
| db01 / web02 | 内网数据库、内网应用、flag 机 |
| (可选)跳板机上的转发规则 | 比赛方预置的 NAT / 防火墙策略 |
一个最小演练流程¶
在这套"比赛版"拓扑里,完整走一遍两层渗透的链路:
- 打点:在 web01 的
192.168.10.10:80上放一个你学过的漏洞——一个命令执行(见「RCE」一章)或者带 SSRF 的页面(见「SSRF注入」)都可以。Kali 上利用它拿到 web01 的 shell,这一步对应「立足点建立」。 - 发现内网:在 web01 的 shell 里
ip addr,看到第二张网卡172.16.1.10,意识到还有一层网络;扫一下内网段,发现172.16.1.30的 80 端口。这一步对应「内网信息收集」。 - 建立通道:在 web01 上起一个 SOCKS 代理(比如
ssh -D反弹、frp、chisel 任选其一),让 Kali 能透过跳板机访问内网。这一步是「代理与隧道」一章的主菜。 - 收割:挂上代理后访问
http://172.16.1.30/,拿到内网 flag。
与后续章节的衔接¶
这套环境搭一次,后面一整条线都能用:
- 「两层网络实战」会在这套拓扑上完整做一遍从外网到内网的渗透,本章搭的环境就是它的演武场;
- 「代理与隧道」练习 frp / chisel / SSH 隧道时,内网段就是最好的试验场;
- 想升级难度,只需再加一张 Internal Network 网卡和一台机器,就演变成了「三层网络实战」需要的拓扑。
到这里,"环境"已经不再是障碍——剩下的就是去「Web入门题单」和各漏洞章节里挑漏洞,往你的 web01 上装了。