MSF中MS17-010利用模块源码分析
字数 2788 2025-08-20 18:17:59
MS17-010漏洞利用模块源码分析与教学指南
一、MS17-010漏洞概述
MS17-010是微软Windows SMB服务中的一个严重远程代码执行漏洞,影响Windows Server 2012及以下版本(包括32位和64位系统)。该漏洞被用于著名的"永恒之蓝"攻击工具中。
二、Metasploit中的相关模块
Metasploit框架提供了多个与MS17-010相关的模块:
-
扫描验证模块:
auxiliary/scanner/smb/smb_ms17_010- 用于检测目标系统是否存在MS17-010漏洞
-
漏洞利用模块:
auxiliary/admin/smb/ms17_010_command- 以命令执行方式验证漏洞exploit/windows/smb/ms17_010_psexec- 执行payload上线进行漏洞攻击exploit/windows/smb/ms17_010_eternalblue- EternalBlue SMB远程Windows内核池破坏攻击
三、模块详细分析
1. 扫描验证模块 (auxiliary/scanner/smb/smb_ms17_010)
使用方式:
msf6 > use auxiliary/scanner/smb/smb_ms17_010
msf6 auxiliary(scanner/smb/smb_ms17_010) > set RHOSTS 192.168.1.15
msf6 auxiliary(scanner/smb/smb_ms17_010) > run
关键配置选项:
RHOSTS: 目标IP地址RPORT: SMB端口,默认445SMBUser/SMBPass: SMB认证凭据,默认为空(匿名访问)THREADS: 线程数,默认为1
源码分析:
- 检测原理:通过发送
PeekNamedPipe请求,判断响应包是否包含STATUS_INSUFF_SERVER_RESOURCES (0xc0000205) - 主要函数:
run_host: 检测入口do_smb_ms17_010_probe: 发送探测请求
2. 命令执行模块 (auxiliary/admin/smb/ms17_010_command)
使用方式:
msf6 > use auxiliary/admin/smb/ms17_010_command
msf6 auxiliary(admin/smb/ms17_010_command) > set rhosts 192.168.1.9
msf6 auxiliary(admin/smb/ms17_010_command) > run
关键配置选项:
COMMAND: 要执行的命令,默认为net group "Domain Admins" /domainSERVICE_NAME: 服务名,默认为随机8位字母字符串SERVICE_DISPLAY_NAME: 服务显示名,默认为随机16位字母字符串SMBSHARE: 目标共享,默认为C$
源码分析:
- 攻击流程:
- 通过
eternal_pwn函数获取system权限会话 - 调用
smb_pwn函数进行命令执行
- 通过
- 核心函数:
eternal_pwn: 获取system权限会话fingerprint_os: 检查目标系统版本find_accessible_named_pipe: 检查可用的命名管道execute_command_with_output: 命令执行、结果读取和清理psexec: 通过命名管道svcctl远程RPC调用创建/启动/删除服务
文件残留问题:
该模块仅删除服务运行程序中的bat文件,未删除命令执行结果重定向的文件,导致目标系统相应目录仍存在攻击痕迹。
3. 漏洞利用模块 (exploit/windows/smb/ms17_010_psexec)
使用方式:
msf6 > use exploit/windows/smb/ms17_010_psexec
msf6 exploit(windows/smb/ms17_010_psexec) > set rhosts 192.168.1.9
msf6 exploit(windows/smb/ms17_010_psexec) > exploit
关键配置选项:
Payload: 默认为windows/meterpreter/reverse_tcpTarget: 攻击模式,默认为Automatic,可选:- Automatic
- PowerShell
- Native upload
- MOF upload
源码分析:
- 攻击流程:
- 通过
eternal_pwn获取system权限会话 - 根据目标配置选择不同攻击方式
- 通过
- 攻击模式分析:
1. Automatic模式:
- 检查目标是否安装PowerShell(
powershell_installed函数)- 如果已安装:调用
execute_powershell_payload - 如果未安装:调用
native_upload
- 如果已安装:调用
2. PowerShell模式:
- 通过
cmd_psh_payload生成PowerShell payload - 使用
psexec函数执行payload
3. Native upload模式:
- 通过SMB共享上传payload exe服务程序
- 使用
psexec执行上传的程序 - 最后删除上传的服务程序
4. MOF upload模式:
- 调用
mof_upload函数:- 上传payload exe到
ADMIN$\system32\ - 上传MOF文件到
ADMIN$\system32\wbem\mof\
- 上传payload exe到
generate_mof函数生成MOF文件,通过WMI运行特定程序
4. EternalBlue利用模块 (exploit/windows/smb/ms17_010_eternalblue)
使用方式:
msf6 > use exploit/windows/smb/ms17_010_eternalblue
msf6 exploit(windows/smb/ms17_010_eternalblue) > set rhosts 192.168.1.15
msf6 exploit(windows/smb/ms17_010_eternalblue) > exploit
特点:
- 仅支持64位系统(Windows Server 2008及以下,Windows 7及以下)
- 默认payload为
windows/x64/meterpreter/reverse_tcp
源码分析:
- 首先调用
check函数检测漏洞(使用扫描模块) - 验证目标架构(不支持x86)
- 根据目标系统版本进行exploit
四、防御建议
- 及时更新系统:安装微软发布的MS17-010补丁
- 关闭SMBv1:在不需要的情况下禁用SMBv1协议
- 网络隔离:限制SMB端口(445)的外部访问
- 监控检测:
- 监控
ADMIN$\system32\和C$\Windows\Temp\目录的异常文件 - 监控异常服务创建和WMI活动
- 监控
- 清理痕迹:检查并删除攻击可能留下的bat、txt、exe和mof文件
五、攻击痕迹分析
攻击后可能留下的文件:
-
命令执行模块:
C$\WINDOWS\Temp\随机16位字母字符串.txt- 命令输出结果C$\WINDOWS\Temp\随机16位字母字符串.bat- 命令批处理文件(可能被删除)
-
漏洞利用模块:
- Automatic/Native模式:
ADMIN$\system32\随机8位字母字符串.exe- payload程序(Native模式会删除)
- MOF模式:
ADMIN$\system32\随机8位字母字符串.exe- payload程序ADMIN$\system32\wbem\mof\随机14位字母数字字符串.mof- MOF文件
- Automatic/Native模式:
六、总结
MS17-010漏洞利用链完整,从扫描检测到多种攻击方式,Metasploit提供了全面的利用模块。理解这些模块的工作原理对于防御和取证分析至关重要。防御者应重点关注SMB服务的安全配置和异常行为监控。