心脏滴血漏洞详解(CVE-2014-0160)

2024-03-24 03:44

本文主要是介绍心脏滴血漏洞详解(CVE-2014-0160),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考链接:心脏滴血漏洞利用(CVE-2014-0160)_cve-2014-0160漏洞禁用443端口-CSDN博客

目录

OpenSSL简介

漏洞原理

影响版本

漏洞复现

漏洞利用

修复方案


OpenSSL简介

OpenSSL是一个开放源代码的软件库包,提供了一组加密和认证协议,用于保护网络连接和数据传输的安全性。它实现了SSLTLS协议,包含了主要的密码算法、常用的密钥和整数封装管理功能。OpenSSL的作用是提供安全通信和数据加密的功能,在数据安全存储、数据传输、身份验证等领域中发挥着重要作用。

漏洞原理

这个漏洞的来源是因为OpenSSL软件中使用到一个叫做heartbeat的扩展,这个扩展出现问题才将这个漏洞形象的称为“心脏出血”。

由于在memcpy()调用受害者用户输入内容作为长度参数之前没有能够正确进行边界检查,攻击者可以追踪到OpenSSL所分配的64KB缓存、将超出必要范围的字节信息复制到缓存当中再返回缓存内容,这样一来受害者的内存内容就会以每次64KB的速度进行泄露。

描述的再详细点,首先要知道OpenSSL处理TLS心跳的流程是:A向B发送请求包,B收到包后读取这个包的内容(包含包的类型和数据长度等信息),处理后返回一个包含有请求包内容的响应包。

举个例子:A向B发送请求包,B收到A的请求包后,并没有去验证A包的实际长度,而是直接将请求包中的数据长度信息值作为data的实际长度,于是当请求包中说明的数据长度和请求包的数据的实际长度不相同时就会出现问题,因为响应包需要包含请求包的全部内容,程序就会将请求包的数据从它的内存中拷贝过来,如果长度不同,那么就会将B内存的内容一起拷贝,导致信息泄露。

比如实际长度只有1,而说明长度有65535,那么B就会把A的内容当作65535长度进行处理,B程序要拷贝的是65535长度的内容,但是实际长度只有1,所以就会将内存位置后额外的65534个字节拷贝到了响应包中,并且将这个响应包发送给了A,于是A能够轻而易举的得到B内存的数据。

所以说受害者的内存内容会以每次接近64KB的速度进行泄露。

影响版本

OpenSSL 1.0.1

漏洞复现

使用vulhub靶场进行复现。

cd /vulhub/openssl/CVE-1014-0160docker-compose up -d docker ps

进行信息收集,使用nmap扫描开放端口:

然后使用nmap自带的ssl-heartbleed.nse脚本进行漏洞扫描探测:

存在该漏洞,可以使用Msfconsole工具进行脚本攻击利用:

msfconsole
search heartbleed
use 1

然后查看需要配置的参数:

 可知需要配置攻击者的ip和端口

 然后还需要设置一个verbose参数为true,目的是为了能够看到泄露的信息,设置后进行攻击

 就可以看到靶机的信息了

 

漏洞利用

使用fofa语法搜一下存在心脏滴血的网站

使用kali攻击

修复方案

升级版本

仅供学习参考!!!!

这篇关于心脏滴血漏洞详解(CVE-2014-0160)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/840364

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

ZOJ Monthly, August 2014小记

最近太忙太忙,只能抽时间写几道简单题。不过我倒是明白要想水平提高不看题解是最好的了。 A  我只能死找规律了,无法证明 int a[50002][2] ;vector< vector<int> > gmax , gmin ;int main(){int n , i , j , k , cmax , cmin ;while(cin>>n){/* g

2014 Multi-University Training Contest 8小记

1002 计算几何 最大的速度才可能拥有无限的面积。 最大的速度的点 求凸包, 凸包上的点( 注意不是端点 ) 才拥有无限的面积 注意 :  凸包上如果有重点则不满足。 另外最大的速度为0也不行的。 int cmp(double x){if(fabs(x) < 1e-8) return 0 ;if(x > 0) return 1 ;return -1 ;}struct poin

2014 Multi-University Training Contest 7小记

1003   数学 , 先暴力再解方程。 在b进制下是个2 , 3 位数的 大概是10000进制以上 。这部分解方程 2-10000 直接暴力 typedef long long LL ;LL n ;int ok(int b){LL m = n ;int c ;while(m){c = m % b ;if(c == 3 || c == 4 || c == 5 ||

2014 Multi-University Training Contest 6小记

1003  贪心 对于111...10....000 这样的序列,  a 为1的个数,b为0的个数,易得当 x= a / (a + b) 时 f最小。 讲串分成若干段  1..10..0   ,  1..10..0 ,  要满足x非递减 。  对于 xi > xi+1  这样的合并 即可。 const int maxn = 100008 ;struct Node{int

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建      首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件、动态链接库文件、可执行文件、脚本文件、配置文件等。      我们在编写hellowor

LabVIEW FIFO详解

在LabVIEW的FPGA开发中,FIFO(先入先出队列)是常用的数据传输机制。通过配置FIFO的属性,工程师可以在FPGA和主机之间,或不同FPGA VIs之间进行高效的数据传输。根据具体需求,FIFO有多种类型与实现方式,包括目标范围内FIFO(Target-Scoped)、DMA FIFO以及点对点流(Peer-to-Peer)。 FIFO类型 **目标范围FIFO(Target-Sc