资料

使用框架结构

Metasploit - 图1

一、 介绍

1. 体系框架

  1. 基础库: metasploit 基础库文件位与源码根目录路径下的 libraries 目录中,包括 Rex, framework-core framework-base 三部分
  • Rex 是整个框架依赖的最基础的一些组件,如包装的网络套接字。网络应用协议客户端与服务端实现,日志子系统、渗透攻击支持例程、PostgreSQL 以及 MYSQL 数据库支持等
  • framework-core 库负责实现所有与各种类型的上层模块以及插件的交互接口
  • framwork-base 库扩展了 framework-core , 提供了更加简单的包装例程,并为处理框架各个方面的功能提供了一些功能类,用于支持用户接口与功能程序调用框架本身功能以及框架集成模块
  1. 模块: 模块组织按照不同的用途分为六个类型的模块:
    辅助模块(AUX)、渗透攻击模块(Exploits)、后渗透攻击模块(Post)、攻击载荷模块(payloads)、编码器模块(Encoders)、空指令模块(Nops)
  2. 插件: 插件能够扩充框架的功能,或者组装已有功能构成高级特性的组件,
  3. 接口: 包括 msfconsole 控制终端、msfcli 命令行、msfgui 图形化界面、armitage 图形化界面 、msfapi 远程调用接口
  4. 功能程序: metasploit 还提供了一系列可直接运行的功能程序,支持渗透测试者与安全人员快速的利用框架内部能力完成一些特定任务

2. 目录结构

  • data :MSF 使用的可编辑文件
  • documentation: 为框架提供文档
  • lib : 框架代码库
  • modules : 实际的 MSF 的模块
  • plugins : 可以在运行时加载的插件
  • scripts : Meterpreter 和其它脚本
  • tools : 各种有用的命令行工具

二、组件

1. 模块

类型 描述
Auxiliary 扫描、模糊、嗅探、管理功能
Encoders 编码
Evasion AV 规避
Exploits 允许利用有效负载传递漏洞的模块
NOPs 在漏洞利用尝试中保持有效负载大小一致,通常用作缓冲区
Payloads 代码远程指定并回调攻击者机器以建立连接
Plugins 其他脚本
Post 广泛的模块收集信息

2. 目标

  1. show targets # 展示指定模块的目标 EXP 版本
  2. set target NO # 设置使用那一个目标 EXP

3. Payload

  1. show payloads # 展示所有 Payload
  2. grep 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. 数据库

  1. sudo systemctl start postgresql # 启动 postgresql 数据库
  2. sudo msfdb init # 启动 MSF 数据库
  3. sudo msfdb run # 连接到启动的数据库
  4. help d
  5. # 工作区
  6. workspace # 查看全部工作区
  7. workspace -a name # 创建工作区
  8. workspace -d name # 删除指定工作区
  9. workspace name # 切换到指定工作区
  10. # 导入其他工作 (eg : nmap) 扫描结果,只支持导入 .xml
  11. db_import Target.xml
  12. # 数据库备份
  13. db_export -f xml backup.xml # 导出到指定文件中
  14. hosts -h # 主机地址、主机名和我们在扫描和交互过程中找到的有关这些的其他信息
  15. services -h # 包含有关在扫描或交互期间发现的服务的描述和信息
  16. creds -h # 手机与目标主机交互的凭据
  17. loot -h # 提供拥有服务和用户的概览列表

6. 插件

插件需要安装在 /usr/share/metasploit-framework/plugins

  1. load nessus # 加载 nessus 插件
  2. # 下载其他插件 .rd 移动到指定目录下,并进行加载
  3. cp ./Metasploit-Plugins/pentest.rb /usr/share/metasploit-framework/plugins/pentest.rb
  4. load pentest

三、命令使用

1. search 命令

  1. # type: 指定查找模块类型
  2. # platform :模块使用的平台
  3. # cve : 指定 模块的 CVE 年份
  4. # rank : 可靠等级
  5. help search
  6. search type:exploit platform:windows cve:2021 rank:excellent microsoft

四、MSF sessions

1. 会话

  1. sessions # 展示所有会话
  2. sessions -i no # 打开指定会话

2. Meterpreter

  1. steal_token 1836 # 迁移进程
  2. # 下方模板是用来自动检测指定会话上可以使用的漏洞, 他可以查出很多漏洞,当有多个可执行时,需要一个一个验证
  3. use post/multi/recon/local_exploit_suggester
  4. # 转储哈希
  5. hashdump
  6. lsa_dump_sam
  7. # Meterpreter LSA 机密转储
  8. lsa_dump_secrets

五、信息收集

1. 端口扫描

  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 密码嗅探 [见下]
  1. 使用 auxiliary/sniffer 下的 psnuffle 模块进行密码嗅探
    在局域网内进行网络嗅探: use auxiliary/sniffer/psnuffle
    关闭方法: jobs -K 关闭所有
  2. 定义: SNMP 全称 简单网络管理协议,由一组网络管理的标准组成,包含一个应用层协议、数据库模型和一组资源对象,该协议能够支持网络管理系统,用以检测连接到网络上的设备是否有任何引起管理上关注的情况
    可以查到的信息: 服务器硬件信息、当前运行进程

2. 服务爆破

  1. use auxiliary/scanner/mysql/mysql_login
  2. use auxiliary/scanner/snmp/snmp_login
  3. use auxiliary/scanner/mssql/mssql_login
  4. use auxiliary/scanner/vnc/vnc_login
  5. use auxiliary/scanner/postgres/postgres_login
  6. use auxiliary/scanner/ssh/ssh_login
  7. use auxiliary/scanner/telnet/telnet_login
  8. use auxiliary/scanner/ftp/ftp_login
  9. use auxiliary/scanner/smb/smb_login

六、后期开发

  1. meterpreter > getpid # 获取当前请求 ID
  2. Current pid: 1304
  3. meterpreter > ps # 列出所有进行
  4. meterpreter > migrate 716 # 迁移进程
  1. 核心命令
    • background:背景当前会话
    • exit:终止Meterpreter会话
    • guid: 获取会话GUID (Globally Unique Identifier)
    • help:显示帮助菜单
    • info: 显示有关 Post 模块的信息
    • irb:在当前会话中打开交互式 Ruby shell
    • load: 加载一个或多个 Meterpreter 扩展
    • migrate: 允许您将 Meterpreter 迁移到另一个进程
    • run: 执行一个 Meterpreter 脚本或 Post 模块
    • sessions:快速切换到另一个会话
  2. 文件系统命令
    • cd: 会改变目录
    • ls: 将列出当前目录中的文件(dir 也可以)
    • pwd: 打印当前工作目录
    • edit: 将允许您编辑文件
    • cat: 将文件的内容显示到屏幕上
    • rm: 将删除指定的文件
    • search:将搜索文件
    • upload: 将上传文件或目录
    • download: 将下载一个文件或目录
  3. 联网命令
    • arp:显示主机ARP(地址解析协议)缓存
    • ifconfig:显示目标系统上可用的网络接口
    • netstat:显示网络连接
    • portfwd:将本地端口转发到远程服务
    • route:允许您查看和修改路由表
  4. 系统命令
    • clearev:清除事件日志
    • execute: 执行命令
    • getpid: 显示当前进程标识符
    • getuid: 显示 Meterpreter 正在运行的用户
    • kill: 终止进程
    • pkill: 按名称终止进程
    • ps:列出正在运行的进程
    • reboot:重新启动远程计算机
    • shell:进入系统命令外壳
    • shutdown:关闭远程计算机
    • sysinfo: 获取远程系统的信息,例如OS
  5. 其他命令(这些将在帮助菜单的不同菜单类别下列出)
    • idletime:返回远程用户空闲的秒数
    • keyscan_dump:转储击键缓冲区
    • keyscan_start:开始捕获击键
    • keyscan_stop: 停止捕获击键
    • screenshare:允许您实时观看远程用户的桌面
    • screenshot:抓取交互式桌面的屏幕截图
    • record_mic:从默认麦克风录制音频 X 秒
    • webcam_chat:开始视频聊天
    • webcam_list:列出网络摄像头
    • webcam_snap:从指定的网络摄像头拍摄快照
    • webcam_stream:播放来自指定网络摄像头的视频流
    • getsystem:尝试将您的特权提升到本地系统的特权
    • hashdump: 转储 SAM 数据库的内容