基于Cobalt Strike的内网渗透实战:从靶场复现到攻击思维构建

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” 联动

  1. 在CS中生成Shellcode :点击 Attacks -> Packages -> Payload Generator 。选择我们之前创建的HTTP监听器,输出格式选择 C 。CS会生成一大段C语言格式的Shellcode数组。
  2. 在MSF中配置漏洞利用模块 :启动MSF,搜索对应的Struts2利用模块,例如 use exploit/multi/http/struts2_content_type_ognl
  3. 关键步骤:设置Payload为自定义Shellcode :在MSF中,我们需要设置一个特殊的Payload: use payload/generic/custom 。这个Payload允许我们直接注入自定义的Shellcode。将上一步CS生成的C数组内容(去掉 unsigned char buf[] = 和结尾的 ; ,只保留花括号内的十六进制数字串)复制出来,在MSF中设置 set PAYLOAD <粘贴过来的Shellcode>
  4. 设置其他参数并执行 :设置好目标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 功能结合外部扫描器。

  1. 建立SOCKS代理 :在Beacon会话上右键,选择 Pivoting -> SOCKS Server 。这会建立一个SOCKS4a代理服务器,监听在团队服务器的某个端口上(例如1080)。这个代理的流量会通过已控的跳板机转发到内网。
  2. 配置攻击机使用代理 :在Kali上,我们可以配置 proxychains 工具。编辑 /etc/proxychains4.conf ,在最后添加 socks4 <你的CS团队服务器IP> 1080
  3. 通过代理进行扫描 :现在,我们就可以在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的流量完全不出内网,隐蔽性极高。

操作步骤

  1. 在已控的高权限会话(会话A)上右键, Listeners -> Add ,类型选择 SMB Beacon 。给它起个名字,比如 smb 。这个监听器只存在于会话A的内存中。
  2. 我们需要让目标机器B来连接这个SMB Beacon。在CS中,生成一个Windows可执行文件,但这次在创建时, Payload 选择刚才创建的 SMB Beacon 。生成一个 smb.exe
  3. 如何让机器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$共享,并创建服务执行。

当机器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工具。例如:
    proxychains python3 psexec.py -hashes :<NTLM_Hash> <域名>/<用户名>@<目标IP>
    
    这条命令会尝试通过哈希传递在目标机器上执行一个交互式Shell。

注意事项 :哈希传递成功的前提是目标服务(如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进程中加载利用脚本。

更常见的流程是:

  1. 通过之前的端口扫描,发现内网中开放445端口且可能未打补丁的机器(如Windows 7, Server 2008 R2)。
  2. 在攻击机Kali上,使用MSF生成一个指向我们CS监听器的Payload(Shellcode)。
  3. 通过SOCKS代理,使用 proxychains 运行一个外部的MS17-010利用脚本(例如Python版的 eternalblue_exploit7.py eternalblue_exploit8.py ,针对不同系统版本),将生成的Shellcode作为攻击载荷发送给目标。
  4. 如果漏洞利用成功,目标机器会执行Shellcode,连接回我们的CS,从而上线。

这种方式不依赖任何凭证,是“敲门砖”式的攻击。但在现代网络中,由于该漏洞危害巨大,大部分重要系统都已修复,因此更常作为针对边缘或老旧设备的攻击手段。

6. 域渗透与最终目标达成

横向移动的最终目标,往往是域控制器(Domain Controller, DC)。控制了DC,就等于控制了整个域。在红日靶场二中,最终目标就是获取域控制器的最高权限。

6.1 定位与攻击域控制器

通过前面的信息收集,我们已经知道了域控制器的IP和主机名(例如 DC01.redteam.local )。攻击DC的方法多种多样,取决于我们当前掌握的权限和信息。

黄金票据攻击 :如果我们抓取到了域控的 krbtgt 账户的哈希(这是域Kerberos认证体系的核心密钥),就可以伪造任意用户的TGT(票据授予票据),从而访问域内任何服务。这是最彻底的域权限维持方法。

  1. 获取krbtgt哈希 :需要已经拥有域控的SYSTEM权限。在已控的域控上运行Mimikatz: lsadump::dcsync /domain:redteam.local /user:krbtgt 。这个命令会通过DCSync技术从域控同步指定用户(krbtgt)的凭据,得到其NTLM哈希。
  2. 制作黄金票据 :在任意已加入域的机器上(甚至是一台未加入域但知道域SID的机器),使用Mimikatz: kerberos::golden /domain:redteam.local /sid:<域SID> /rc4:<krbtgt的NTLM哈希> /user:任意用户名(如fakeadmin) /ptt /ptt 参数表示将生成的票据直接注入当前会话的内存。
  3. 验证与使用 :票据注入后,就可以直接访问域控的共享了,例如 dir \\DC01\c$ 。此时,你可以使用 psexec wmi 等方式在域控上执行命令,获取一个SYSTEM权限的Beacon。

MS14-068漏洞利用 :这是一个允许普通域用户提升到域管理员权限的Kerberos漏洞。如果我们只有一个普通域用户的凭证,可以尝试此漏洞。

  1. 利用工具 pykek (Python)或 goldenPac.py (Impacket套件)来利用该漏洞。
  2. 命令类似: proxychains python goldenPac.py -dc-ip <域控IP> redteam.local/普通用户:密码@域控主机名
  3. 如果成功,会直接返回一个域控的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
  • 可能原因及解决
    1. 网络不稳定或代理问题 :检查团队服务器网络,以及用于转发的跳板机是否稳定。如果是通过多层代理,确保每一层都通畅。
    2. 杀软查杀 :Beacon内存中被杀软识别并终止。尝试使用更隐蔽的Profile,增加睡眠时间和抖动,或者使用 Sleep Mask 等技术对Beacon内存进行混淆。考虑使用 C2-Tool-Collection 等工具对Beacon进行混淆免杀。
    3. 注入的进程退出 :如果Beacon注入到了一个不稳定的进程(如某个应用程序),当该进程关闭时,Beacon也会退出。尽量注入到系统核心进程或持久化进程。
    4. 防火墙或IDS拦截 :通信模式被识别。检查Profile的配置,确保其模仿的流量与目标环境正常流量相似。可以考虑使用DNS Beacon或HTTPS Beacon(带有效证书)增加隐蔽性。

7.2 横向移动失败

  • 症状 :使用 psexec wmi 或漏洞利用时,无法在目标机器上线。
  • 可能原因及解决
    1. 凭证错误或权限不足 :确认使用的用户名、密码或哈希是否正确,以及该账户在目标机器上是否有管理员权限。可以尝试在Beacon中用 net use \\<目标IP>\IPC$ /user:<用户名> <密码> 测试SMB连接。
    2. 防火墙阻止 :目标机器的防火墙可能阻止了SMB(445)、WMI(135)或RPC等端口。需要先进行端口扫描确认。如果端口被阻,可以尝试其他横向方法,如WinRM(5985/5986)、SSH(如果目标有)或者利用Web应用漏洞。
    3. UAC限制 :即使当前用户是管理员,在非“管理员批准模式”下,远程访问时也可能受UAC影响导致权限降级。可以尝试使用 runas 或计划任务以高权限执行。
    4. AV/EDR拦截 :投递的Payload或横向移动工具被终端安全软件拦截。需要对Payload进行免杀处理,或者使用“无文件”横向技术,如WMI执行命令、DCOM执行、PS远程等。

7.3 域渗透相关错误

  • 症状 :DCSync失败、黄金票据无效等。
  • 可能原因及解决
    1. 权限问题 :执行DCSync需要拥有域控的复制权限(如域管理员)。确保当前会话的账户是域管理员或拥有同等权限。
    2. 时间同步问题 :Kerberos协议严重依赖时间同步。黄金/白银票据的有效时间基于票据中的时间戳。如果攻击机与域控的时间偏差超过5分钟(默认策略),票据将失效。确保攻击机时间与域时间同步( net time \\<域控名> )。
    3. 域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
    4. 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完整复现红日靶场二,我们不仅练习了工具和流程,更重要的是培养了“攻击者思维”:如何隐蔽自己、如何收集信息、如何选择攻击路径、如何绕过防御、如何持久化。记住,工具是死的,思维是活的。将这套流程内化,并根据不同的实战场景灵活调整和组合,才是成为一名合格渗透测试人员或红队队员的关键。最后,所有技术都应在法律授权和道德准则的框架内使用,用于提升网络安全防御能力。

打开链接下载源码: https://pan.quark.cn/s/331a85e1b463 在数字化时代背景下,软件授权与保护显得极为关键,微狗(MicroDog)作为一款硬件加密狗,其主要功能是保障软件的合法使用,避免盗版和未经授权的访问。为了达成这一目的,微狗驱动发挥着不可或缺的作用。驱动程序充当硬件与操作系统之间的沟通纽带,确保两者能够和谐协作。现阶段,64位微狗驱动(UMI64位)已经兼容Windows 11、Windows 10以及Windows 7操作系统,为不同的系统环境提供坚实可靠的支持。 随着Windows操作系统的持续升级,对驱动程序的兼容性需求也在逐步提高。微狗驱动UMI64位版本正是为了应对兼容性问题而研发的。它不仅适配最新版的Windows 11,同时也与过去几年中普遍应用的Windows 10和Windows 7保持兼容。如此全面的系统支持,使得微狗加密狗能够在多种环境中稳定运作,确保软件授权管理不受操作系统版本的限制。 在这个驱动中,特别强调了支持UMI V4.1版本。UMI可能代表Unique Machine Identifier,即用于标识特定硬件设备的唯一序列号。提及UMI V4.1表明该驱动能够精准识别并支援微狗加密狗的此特定型号。同时,这也暗示驱动可能与其他版本的微狗硬件兼容,这意味着用户可以在不同版本的微狗加密狗之间切换而不必频繁更换驱动程序。 UMI64位标签凸显了驱动程序的核心特征,即它专为64位系统进行优化。相较于32位系统,64位系统在处理海量数据、运行大型应用时展现出显著优势,例如能够支持更大的内存地址空间。随着软件复杂性的提升,对硬件资源的需求持续增长,因此64位系统能够提供更优越的性能和稳定性。UMI系列硬件与...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值