资料
使用框架结构

一、 介绍
1. 体系框架
- 基础库: metasploit 基础库文件位与源码根目录路径下的 libraries 目录中,包括 Rex, framework-core framework-base 三部分
- Rex 是整个框架依赖的最基础的一些组件,如包装的网络套接字。网络应用协议客户端与服务端实现,日志子系统、渗透攻击支持例程、PostgreSQL 以及 MYSQL 数据库支持等
- framework-core 库负责实现所有与各种类型的上层模块以及插件的交互接口
- framwork-base 库扩展了 framework-core , 提供了更加简单的包装例程,并为处理框架各个方面的功能提供了一些功能类,用于支持用户接口与功能程序调用框架本身功能以及框架集成模块
- 模块: 模块组织按照不同的用途分为六个类型的模块:
辅助模块(AUX)、渗透攻击模块(Exploits)、后渗透攻击模块(Post)、攻击载荷模块(payloads)、编码器模块(Encoders)、空指令模块(Nops) - 插件: 插件能够扩充框架的功能,或者组装已有功能构成高级特性的组件,
- 接口: 包括 msfconsole 控制终端、msfcli 命令行、msfgui 图形化界面、armitage 图形化界面 、msfapi 远程调用接口
- 功能程序: metasploit 还提供了一系列可直接运行的功能程序,支持渗透测试者与安全人员快速的利用框架内部能力完成一些特定任务
2. 目录结构
- data :MSF 使用的可编辑文件
- documentation: 为框架提供文档
- lib : 框架代码库
- modules : 实际的 MSF 的模块
- plugins : 可以在运行时加载的插件
- scripts : Meterpreter 和其它脚本
- tools : 各种有用的命令行工具
二、组件
1. 模块
| 类型 |
描述 |
| Auxiliary |
扫描、模糊、嗅探、管理功能 |
| Encoders |
编码 |
| Evasion |
AV 规避 |
| Exploits |
允许利用有效负载传递漏洞的模块 |
| NOPs |
在漏洞利用尝试中保持有效负载大小一致,通常用作缓冲区 |
| Payloads |
代码远程指定并回调攻击者机器以建立连接 |
| Plugins |
其他脚本 |
| Post |
广泛的模块收集信息 |
2. 目标
show targets # 展示指定模块的目标 EXP 版本set target NO # 设置使用那一个目标 EXP
3. Payload
show payloads # 展示所有 Payloadgrep meterpreter show payloads # 搜索 meterpreter 的 Payload
| 有效载荷 |
描述 |
| generic/custom |
通用监听器,多用途 |
| generic/shell_bind_tcp |
通用监听器,多用,普通shell,TCP连接绑定 |
| generic/shell_reverse_tcp |
通用监听器,多用,普通shell,反向TCP连接 |
| windows/x64/exec |
执行任意命令 (Windows x64) |
| windows/x64/loadlibrary |
加载任意 x64 库路径 |
| windows/x64/messagebox |
使用可自定义的标题、文本和图标通过 MessageBox 生成对话框 |
| windows/x64/shell_reverse_tcp |
普通外壳,单一负载,反向 TCP 连接 |
| windows/x64/shell/reverse_tcp |
普通shell,stager + stage,反向TCP连接 |
| windows/x64/shell/bind_ipv6_tcp |
普通shell,stager + stage,IPv6 Bind TCP stager |
| windows/x64/meterpreter/$ |
Meterpreter 有效载荷 + 以上品种 |
| windows/x64/powershell/$ |
交互式 PowerShell 会话 + 上述品种 |
| windows/x64/vncinject/$ |
VNC Server (Reflective Injection) + 以上品种 |
4. 数据库
sudo systemctl start postgresql # 启动 postgresql 数据库sudo msfdb init # 启动 MSF 数据库sudo msfdb run # 连接到启动的数据库 help d# 工作区 workspace # 查看全部工作区 workspace -a name # 创建工作区 workspace -d name # 删除指定工作区 workspace name # 切换到指定工作区# 导入其他工作 (eg : nmap) 扫描结果,只支持导入 .xmldb_import Target.xml# 数据库备份db_export -f xml backup.xml # 导出到指定文件中hosts -h # 主机地址、主机名和我们在扫描和交互过程中找到的有关这些的其他信息services -h # 包含有关在扫描或交互期间发现的服务的描述和信息creds -h # 手机与目标主机交互的凭据loot -h # 提供拥有服务和用户的概览列表
6. 插件
插件需要安装在 /usr/share/metasploit-framework/plugins
load nessus # 加载 nessus 插件# 下载其他插件 .rd 移动到指定目录下,并进行加载cp ./Metasploit-Plugins/pentest.rb /usr/share/metasploit-framework/plugins/pentest.rbload pentest
三、命令使用
1. search 命令
# type: 指定查找模块类型# platform :模块使用的平台# cve : 指定 模块的 CVE 年份# rank : 可靠等级help searchsearch type:exploit platform:windows cve:2021 rank:excellent microsoft
四、MSF sessions
1. 会话
sessions # 展示所有会话sessions -i no # 打开指定会话
2. Meterpreter
steal_token 1836 # 迁移进程# 下方模板是用来自动检测指定会话上可以使用的漏洞, 他可以查出很多漏洞,当有多个可执行时,需要一个一个验证use post/multi/recon/local_exploit_suggester# 转储哈希hashdumplsa_dump_sam# Meterpreter LSA 机密转储lsa_dump_secrets
五、信息收集
1. 端口扫描
msf6 > search portscan # 该命令可以列出所有可以用的端口扫描模块
| 名称 |
功能 |
| udp_sweep |
快速识别 UDP 上运行的服务 |
| arp_sweep |
ARP 扫描收集信息 |
| syn |
SYN-TCP 扫描 |
| ftp_version |
FTP 版本扫描 |
| ftp/anonymous |
FTP 匿名登陆 |
| ftp_login |
FTP 爆破 |
| ssh_version |
SSH 版本扫描 |
| ssh_login |
SSH 爆破 |
| smb_version |
SMB 版本扫描 |
| smb_enumshares |
SMB 信息收集模块 |
| smb_lookupsid |
收集系统用户信息 |
| snmp_enum |
根据 SNMP 收集服务器信息 [见下] |
| psnuffle |
密码嗅探 [见下] |
- 使用 auxiliary/sniffer 下的 psnuffle 模块进行密码嗅探
在局域网内进行网络嗅探: use auxiliary/sniffer/psnuffle
关闭方法: jobs -K 关闭所有 - 定义: SNMP 全称 简单网络管理协议,由一组网络管理的标准组成,包含一个应用层协议、数据库模型和一组资源对象,该协议能够支持网络管理系统,用以检测连接到网络上的设备是否有任何引起管理上关注的情况
可以查到的信息: 服务器硬件信息、当前运行进程
2. 服务爆破
use auxiliary/scanner/mysql/mysql_loginuse auxiliary/scanner/snmp/snmp_loginuse auxiliary/scanner/mssql/mssql_loginuse auxiliary/scanner/vnc/vnc_loginuse auxiliary/scanner/postgres/postgres_loginuse auxiliary/scanner/ssh/ssh_loginuse auxiliary/scanner/telnet/telnet_loginuse auxiliary/scanner/ftp/ftp_loginuse auxiliary/scanner/smb/smb_login
六、后期开发
meterpreter > getpid # 获取当前请求 IDCurrent pid: 1304meterpreter > ps # 列出所有进行meterpreter > migrate 716 # 迁移进程
- 核心命令
background:背景当前会话exit:终止Meterpreter会话guid: 获取会话GUID (Globally Unique Identifier)help:显示帮助菜单info: 显示有关 Post 模块的信息irb:在当前会话中打开交互式 Ruby shellload: 加载一个或多个 Meterpreter 扩展migrate: 允许您将 Meterpreter 迁移到另一个进程run: 执行一个 Meterpreter 脚本或 Post 模块sessions:快速切换到另一个会话
- 文件系统命令
cd: 会改变目录ls: 将列出当前目录中的文件(dir 也可以)pwd: 打印当前工作目录edit: 将允许您编辑文件cat: 将文件的内容显示到屏幕上rm: 将删除指定的文件search:将搜索文件upload: 将上传文件或目录download: 将下载一个文件或目录
- 联网命令
arp:显示主机ARP(地址解析协议)缓存ifconfig:显示目标系统上可用的网络接口netstat:显示网络连接portfwd:将本地端口转发到远程服务route:允许您查看和修改路由表
- 系统命令
clearev:清除事件日志execute: 执行命令getpid: 显示当前进程标识符getuid: 显示 Meterpreter 正在运行的用户kill: 终止进程pkill: 按名称终止进程ps:列出正在运行的进程reboot:重新启动远程计算机shell:进入系统命令外壳shutdown:关闭远程计算机sysinfo: 获取远程系统的信息,例如OS
- 其他命令(这些将在帮助菜单的不同菜单类别下列出)
idletime:返回远程用户空闲的秒数keyscan_dump:转储击键缓冲区keyscan_start:开始捕获击键keyscan_stop: 停止捕获击键screenshare:允许您实时观看远程用户的桌面screenshot:抓取交互式桌面的屏幕截图record_mic:从默认麦克风录制音频 X 秒webcam_chat:开始视频聊天webcam_list:列出网络摄像头webcam_snap:从指定的网络摄像头拍摄快照webcam_stream:播放来自指定网络摄像头的视频流getsystem:尝试将您的特权提升到本地系统的特权hashdump: 转储 SAM 数据库的内容