渗透测试快速启动指南(全)(3)https://developer.aliyun.com/article/1525467
连接
我们都知道 Telnet、SSH 和 Netcat 等工具可以帮助我们进行远程管理。Metasploit 有一个名为connect
的内置实用程序,可用于建立连接并与远程系统交互。它支持 SSL、代理、旋转和文件传输。connect
命令需要有效的 IP 地址和端口才能连接,如图 3-6 所示。
图 3-6
MSFconsole 中 connect 命令的输出
历史
MSFconsole 完全是在命令行上操作的,对于要执行的每个任务,都需要键入一些命令。要查看到目前为止你在 MSFconsole 中使用过的命令,可以使用history
命令,如图 3-7 所示。
图 3-7
MSFconsole 中 history 命令的输出
设置和设置 g
Metasploit 有一些变量需要在执行任何模块或利用之前设置。这些变量有两种类型。
- 局部:局部变量是有限的,只对单个实例有效。
- 全局:全局变量一旦定义,就适用于整个框架,并且可以在任何需要的地方重用。
set
命令用于定义局部变量的值,而setg
命令用于定义全局变量的值,如图 3-8 所示。
图 3-8
MSFconsole 中 set 和 setg 命令的输出
得到和得到
在上一节中,您看到了如何设置局部和全局变量的值。一旦这些值被设置,你可以使用get
和getg
命令查看这些值,如图 3-9 所示。get
命令获取局部变量的值,而getg
命令获取全局变量的值。
图 3-9
MSFconsole 中 get 和 getg 命令的输出
未设置和未设置
unset
命令用于删除分配给局部变量的值,而unsetg
命令用于删除分配给全局变量的值,如图 3-10 所示。
图 3-10
MSFconsole 中 unset 和 unsetg 命令的输出
救援
在进行渗透测试项目时,可能会配置大量的全局变量和设置。你当然不想丢失这些设置;save
命令将当前配置写入文件,如图 3-11 所示。
图 3-11
MSFconsole 中 save 命令的输出
信息
Metasploit 中有大量可用的模块和插件。不可能知道他们所有人。无论何时你想使用任何模块,你都可以使用info
命令找到更多关于它的细节,如图 3-12 所示。只需将模块名作为参数提供给info
命令来获取它的详细信息。
图 3-12
MSFconsole 中 info 命令的输出
抗高血压药
Metasploit 基于 Ruby。它提供了一个交互式 Ruby (irb) shell,您可以在其中执行自己的定制命令集。该模块增强了 Metasploit 的后期开发能力。只需输入irb
命令,如图 3-13 所示,进入 irb shell。要了解更多 Ruby 编程,请参考 https://www.ruby-lang.org/en/
。
图 3-13
MSFconsole 中 irb 命令的输出
显示
在本章的开始部分,您看到了 Metasploit 的各种组件,包括辅助、利用、有效负载等等。使用show
命令,如图 3-14 所示,可以列出每个类别的内容。例如,您可以使用show auxiliary
命令列出框架中所有可用的辅助模块。
图 3-14
MSFconsole 中 show 命令的输出
线轴
您已经看到了save
命令,它将配置写入文件。在一个特定的场景中,您可能希望保存您执行的所有模块和命令的输出。spool
命令,如图 3-15 所示,将所有控制台输出记录到指定文件。
图 3-15
MSFconsole 中 spool 命令的输出
制造商
自动化在任何框架中都扮演着重要的角色。将一堆重复的任务自动化总是有助于节省时间和精力。如图 3-16 所示的makerc
命令通过将 Metasploit 任务保存为脚本来帮助您自动化这些任务。
图 3-16
MSFconsole 中 makerc 命令的输出
数据库启动
考虑到 Metasploit 的复杂性,必须存在一些数据库来存储任务的数据是微不足道的。默认情况下,Metasploit 与 PostgreSQL 数据库集成在一起。首先需要通过执行systemctl start postgresql
命令,然后执行msfdb init
命令来启动数据库服务,如图 3-17 所示。
图 3-17
终端中 systemctl 和 msfdb init 命令的输出
数据库状态
一旦初始化了数据库,就可以通过执行 MSFconsole 中的命令db_status
来确认 Metasploit 已经连接到它,如图 3-18 所示。
图 3-18
MSFconsole 中 db_status 命令的输出
工作空间
有时,您可能需要同时处理多个渗透测试项目。您肯定不希望混淆来自多个项目的数据。Metasploit 提供了高效的工作空间管理。对于每个新项目,您可以创建一个新的工作区,从而将项目数据限制在该工作区内。如图 3-19 所示的workspace
命令列出了可用的工作空间。您可以使用命令workspace -a
创建一个新的工作空间。
图 3-19
MSFconsole 中 workspace 命令的输出
从 Metasploit 调用 NMAP 和 OpenVAS 扫描
本节介绍如何从 Metasploit 控制台中调用和启动 NMAP 和 OpenVAS 扫描。
NMAP(消歧义)
你在本书前面已经了解了 NMAP。您看到了 NMAP 可以从命令行界面或 ZENMAP 图形用户界面触发。然而,还有另一种方法来启动 NMAP 扫描,那就是通过 Metasploit 控制台。
将 NMAP 扫描结果导入到 Metasploit 中,然后进一步利用开放的服务会很有帮助。有两种方法可以实现这一点。
图 3-21
使用 db_nmap 命令从 MSFconsole 调用 NMAP
- 从 MSFconsole 内部调用 NMAP:Metasploit 提供命令
db_nmap
,可以直接从 Metasploit 控制台内部启动 NMAP 扫描,如图 3-21 所示。
图 3-20
MSFconsole 中 db_import 和 hosts 命令的输出
- 导入 NMAP 扫描:您知道 NMAP 能够以 XML 格式生成和保存扫描输出。您可以使用
db_import
命令将 NMAP XML 输出导入到 Metasploit 中,如图 3-20 所示。
一旦 NMAP 扫描完成,您可以使用hosts
命令来确保扫描完成并且目标被添加到 Metasploit 数据库中。
open vas!open vas!open vas
您已经对 OpenVAS 很熟悉了,因为您在前几章中已经对它的大部分特性有所了解。然而,Metasploit 提供了集成 OpenVAS 的能力,以便在框架内执行任务。在您可以从 MSFconsole 实际执行任何 OpenVAS 任务之前,您需要通过执行命令load openvas
来加载 OpenVAS 插件,如图 3-22 所示。
图 3-22
将 OpenVAS 插件加载到 MSFconsole 中
一旦 OpenVAS 加载到 MSFconsole 中,您就可以执行许多任务。您可以使用openvas_help
命令,如图 3-23 所示,列出所有可能的任务。
图 3-23
MSFconsole 中 openvas_help 命令的输出
OpenVAS 服务器可能运行在本地或某个远程系统上。你需要使用命令openvas_connect
连接到 OpenVAS 服务器,如图 3-24 所示。您需要提供用户名、密码、OpenVAS 服务器 IP 和端口作为该命令的参数。
图 3-24
使用 MSFconsole 中的 openvas_connect 命令连接到 OpenVAS 服务器
一旦连接到 OpenVAS 服务器成功,您需要使用命令openvas_target_create
创建一个新的目标,如图 3-25 所示。您需要提供测试名称、目标 IP 地址和注释(如果有的话)作为这个命令的参数。
图 3-25
使用 MSFconsole 中的 openvas_target_create 命令为 OpenVAS 扫描创建新目标
创建新目标后,需要使用openvas_config_list
命令选择扫描轮廓,如图 3-26 所示。
图 3-26
MSFconsole 中 openvas_config_list 命令的输出
选择扫描配置文件后,就可以创建扫描任务了。命令openvas_task_create
可用于创建新任务,如图 3-27 所示。您需要提供扫描名称、注释(如果有)、配置 ID 和目标 ID 作为该命令的参数。
图 3-27
在 MSFconsole 中使用命令 openvas_task_create 创建新的 OpenVAS 扫描任务
现在扫描任务已经创建,您可以使用命令openvas_task_start
启动扫描,如图 3-28 所示。您需要提供任务 ID 作为该命令的参数。
图 3-28
使用 MSFconsole 中的 openvas_task_start 命令运行新创建的 OpenVAS 任务
扫描需要一段时间才能完成。一旦扫描完成,您可以使用命令openvas_report_list
查看报告,如图 3-29 所示。
图 3-29
在 MSFconsole 中使用 openvas_report_list 命令列出 OpenVAS 报告
现在扫描已经完成,报告也准备好了,您可以使用openvas_report_download
命令下载报告,如图 3-30 所示。您需要提供报告 ID、报告格式、输出路径和报告名称作为该命令的参数。
图 3-30
在 MSFconsole 中使用 oepnvas_report_download 命令保存 OpenVAS 报告
使用 Metasploit 辅助工具扫描和利用服务
Metasploit 为扫描、枚举和利用各种服务和协议提供了广泛的利用和辅助模块选择。本节介绍了一些辅助模块,并针对常用协议进行了探讨。
域名服务器(Domain Name Server)
在前一章中,你学习了如何使用 NMAP 来枚举一个 DNS 服务。Metasploit 还有几个辅助模块,可用于 DNS 侦察。
图 3-31 显示了/auxiliary/gather/enum_dns
模块的使用。您需要做的就是配置目标域并运行该模块。它返回相关的 DNS 服务器作为结果。
图 3-31
辅助模块 enum_dns 的使用
文件传送协议
假设在进行 NMAP 扫描时,您发现您的目标在端口 21 上运行 FTP 服务器,并且服务器版本是 vsftpd 2.3.4。
您可以使用search
函数来查明 Metasploit 是否对 vsftpd 服务器有任何利用,如图 3-32 所示。
图 3-32
搜索 vsftpd 漏洞的输出
这里您将使用漏洞利用/unix/ftp/vsftpd_234_backdoor
来利用易受攻击的 FTP 服务器。您可以将目标 IP 地址配置为RHOST
变量,然后运行漏洞利用,如图 3-33 所示。
图 3-33
使用 vsftpd _ 234 _ 后门漏洞成功利用目标
攻击成功,您可以通过命令外壳访问目标系统。
超文本传送协议
超文本传输协议(HTTP)是主机上最常见的服务之一。Metasploit 有许多漏洞和辅助工具来枚举和利用 HTTP 服务。辅助模块auxiliary/scanner/http/http_version
,如图 3-34 所示,枚举 HTTP 服务器版本。基于确切的服务器版本,您可以更精确地规划进一步的开发。
图 3-34
辅助模块 http_version 的输出
很多时候,web 服务器的目录并不直接公开,并且可能包含有趣的信息。Metasploit 有一个名为auxiliary/scanner/http/brute_dirs
的辅助模块,用于扫描此类目录,如图 3-35 所示。
图 3-35
辅助模块 brute_dirs 的输出
远端桌面协定
远程桌面协议(RDP)是微软为远程图形管理开发的专有协议。如果你的目标是基于 Windows 的系统,那么你可以执行一个叫做auxiliary/scanner/rdp/ms12_020_check
的辅助模块,如图 3-36 所示。它检查目标是否易受 MS-12-020 漏洞的攻击。您可以在 https://docs.microsoft.com/en-us/security-updates/securitybulletins/2012/ms12-020
了解关于此漏洞的更多详情。
图 3-36
辅助模块 ms12_020_check 的输出
服务器信息块
在上一章中,您使用了 NMAP 来枚举 SMB。Metasploit 为 SMB 的枚举和利用提供了许多有用的辅助模块。
对 SMB 模块的简单搜索获取结果,如图 3-37 所示。
图 3-37
SMB 相关模块和漏洞的搜索查询输出
您可以使用一个名为auxiliary/scanner/smb/smb_enumshares
的辅助模块,如图 3-38 所示。您需要将RHOST
变量的值设置为目标 IP 地址的值。该模块返回结果以及目标系统上的共享列表。
图 3-38
辅助模块 smb_enumshares 的输出
另一个流行的 SMB 利用漏洞是 MS-08-67 netapi。可以使用漏洞利用exploit/windows/smb/ms08_067_netapi
,如图 3-39 。您需要将变量RHOST
的值设置为目标系统的 IP 地址。如果攻击成功运行,您将看到 Meterpreter shell。
图 3-39
使用漏洞 ms08_067_netapi 成功利用目标系统
嘘
安全外壳(SSH)是安全远程管理的常用协议之一。Metasploit 有许多用于 SSH 枚举的辅助模块。您可以使用辅助模块auxiliary/scanner/ssh/ssh_version
,如图 3-40 所示。您需要将RHOST
变量的值设置为目标值。该模块执行并返回目标上运行的确切 SSH 版本。这些信息可用于进一步开发。
图 3-40
辅助模块 ssh_version 的输出
远程桌面
虚拟网络计算(VNC)是一种用于图形远程管理的协议。Metasploit 有几个用于枚举和利用 VNC 的模块。图 3-41 显示了auxiliary/scanner/vnc/vnc_login
模块的使用。您需要将RHOST
变量的值设置为目标系统的 IP 地址。该模块使用内置的密码字典,并试图进行暴力攻击。一旦该模块完成执行,它将为您提供 VNC 密码,您可以使用该密码登录。
图 3-41
辅助模块 vnc_login 的输出
仪表首选基础
Meterpreter 是 Metasploit 解释器的缩写。它是一种高级 Metasploit 负载,使用内存中的 DLL 注入技术与目标系统进行交互。它提供了几个有用的后期开发工具和实用程序。
Meterpreter 命令
Meterpreter 是一种高级有效载荷,用于执行各种开发后活动。以下是一些可以帮助您浏览 Meterpreter 的基本命令。
核心命令
表 3-1 描述了一组核心 Meterpreter 命令,可以帮助您在目标系统上完成各种与会话相关的任务。
表 3-1
Meterpreter 命令
|
命令
|
描述
|
| — | — |
| ?
| 显示帮助菜单 |
| background
| 当前会话的背景 |
| bgkill
| 终止后台 Meterpreter 脚本 |
| bglist
| 列出正在运行的后台脚本 |
| bgrun
| 将 Meterpreter 脚本作为后台线程执行 |
| channel
| 显示信息或控制活动频道 |
| close
| 关闭频道 |
| disable_unicode_encoding
| 禁用 unicode 字符串编码 |
| enable_unicode_encoding
| 启用 Unicode 字符串编码 |
| exit
| 终止抄表员会话 |
| get_timeouts
| 获取当前会话超时值 |
| guid
| 获取会话 GUID |
| help
| 显示帮助菜单 |
| info
| 显示关于开机自检模块的信息 |
| irb
| 进入 irb 脚本模式 |
| load
| 加载一个或多个抄表员扩展 |
| machine_id
| 获取附加到会话的计算机的 MSF ID |
| migrate
| 将服务器迁移到另一个进程 |
| pivot
| 管理透视侦听器 |
| quit
| 终止抄表员会话 |
| read
| 从通道读取数据 |
| resource
| 运行存储在文件中的命令 |
| run
| 执行 Meterpreter 脚本或 post 模块 |
| sessions
| 快速切换到另一个会话 |
| set_timeouts
| 设置当前会话超时值 |
| sleep
| 强制 Meterpreter 进入静默状态,然后重新建立会话 |
| transport
| 改变当前的传输机制 |
渗透测试快速启动指南(全)(5)https://developer.aliyun.com/article/1525469