【渗透】MS17-010漏洞复现
1 漏洞原理
1.1 简介
EternalBlue(在微软的MS17-010中被修复)是在Windows的SMB服务处理SMB v1请求时发生的漏洞,这个漏洞导致攻击者在目标系统上可以执行任意代码。
从EternalBlue这个Exploit被影子经纪人公布到互联网上后,就成为了“明星”。这个Exploit被多款恶意软件利用。包括肆虐的WannaCrypt,无文件的勒索软件UIWIX和SMB蠕虫EternalRocks。
1.2 漏洞简析
Eternalblue利用了3个不同的bug
- 第一个是内核态函数srv!SrvOs2FeaListToNt在处理FEA(File Extended Attributes)转换时,由于错误地使用的WORD强制类型转换,导致在大非分页池(内核的数据结构,Large Non-Paged Kernel Pool)的缓冲区溢出。
- 第二个漏洞可以触发缓冲区溢出,这是由于SMB协议定义的两个子命令SMB_COM_TRANSACTION2和SMB_COM_NT_TRANSACT的差别。如果有太多的数据要包含在一个单独的包中,就需要_SECONDARY命令。TRANSACTION2和NT_TRANSACT的关键区别在于后者调用的数据包是前者大小的2倍。如果客户端使用NT_TRANSACT子命令在TRANSACTION2子命令前发送伪造的消息,就会出现验证错误。如果协议发现接收了2个分开的子命令,就会根据最后接收的包的类型来分配类型和大小。因为最后接收的包比较小,所以第一个包会占用比分配空间更多的空间。
- 一旦攻击者完成初始的溢出,就可以利用SMB v1中的第3个漏洞来进行Heap Spraying(堆喷射),导致在给定地址分配一块内存。然后,攻击者就可以写入和执行shellcode来控制系统。
2 漏洞复现
2.1 渗透Windows7 32-bit
2.1.1 实验环境
实验平台:
- 带有MS17-010漏洞的Windows 7 pro x86, 内部版本7601
- IP:192.168.188.136
- Kali Linux,用于渗透
- IP:192.168.188.135
实验配置:
kali没有32位机器的渗透模块,我们需要做以下配置
- 安装wine 32
1 | |
- 拉取EternalBlue_Doublepulsar攻击模块
1 | |
- 运行postgresql
1 | |
2.1.2 信息搜集
- nmap扫描
1 | |

发现该win7开放了445端口,可进一步采用msfconsole进行扫描分析
- 查看并使用辅助扫描模块测试目标是否可攻击
1 | |

1 | |

发现确实目标机器存在MS17-010,并提示可用之前git clone的DoublePulsar模块进行侵入
2.1.3 开始渗透
- 尝试攻击
1 | |

1 | |

1 | |

meterpreter是一个为攻击者提供交互性shell以便于在目标机器上执行代码的命令行工具。渗透成功的后续攻击可以参考阅读【渗透】meterpreter提权
2.2 渗透Windows7 64-bit
相比于渗透Windows7 32-bit,渗透64位机器要简单得多,因为64位机器的渗透是msf内建支持的。
前几个步骤基本和渗透32位机器一致
2.2.1 信息搜集
- nmap扫描主机信息
- msfconsole采用scanner模块扫描检测ms17-010漏洞
1 | |

2.2.2开始渗透
- 方法一:采用msf自带的eternalblue攻击模块
1 | |

成功拿到目标机器的Shell
- 方法二:采用github开源攻击模块DoublePulsar
步骤和攻击32位机器一致,但是需要配置wine64和wine32共存
- Title: 【渗透】MS17-010漏洞复现
- Author: Zhiyu
- Created at : 2019-11-14 19:46:30
- Updated at : 2026-02-18 00:38:31
- Link: https://qgrain.github.io/2019/11/14/渗透-MS17-010漏洞复现/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments