心脏滴血漏洞简单分析与复现

发布 : 2019-05-21

漏洞成因

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

漏洞分析

最初人们为了网络通信安全,就开始使用安全协议进行加密通信,SSL(Secure Socket Layer)就是一种安全协议。随着开源软件的流行,有人写了一款叫  OpenSSL  的开源程序供大家方便地对通信进行SSL加密,后来这款软件便在互联网中被广泛应用。我们在浏览器地址栏常见的 https 前缀的网址以及那把小锁图标,通常就是指该网站经过 SSL 证书加密。

​ OpenSSL 有一个叫 Heartbeat (心跳检测)的拓展,问题就出在这个拓展上,这也是漏洞被命名为“心脏出血”的直接原因。

​ 所谓心跳检测,就是建立一个 Client Hello 问询来检测对方服务器是不是正常在线 ,服务器发回 Server hello,表明正常树立SSL通讯。就像我们打电话时会问对方 “喂听得到吗?”一样。

​ 每次问询都会附加一个问询的字符长度 pad length,bug 来了,如果这个 pad length 大于实际的长度,服务器仍是会回来相同规模的字符信息,于是形成了内存里信息的越界访问。

​ 就这样,每发起一个心跳,服务器就能泄露一点点数据(理论上最多泄露 64K),这些数据里可能包括用户的登录账号密码、电子邮件甚至是加密秘钥等信息,也可能并没有包含这些信息,但攻击者可以不断利用 “心跳”来获取更多的信息。就这样,服务器一点一点泄露越来越多的信息。

漏洞复现环境

攻击机:Kali Linux

靶机:Bee-Box环境

靶机可以直接下载虚拟机镜像,直接在虚拟机打开即可。

漏洞复现

下载好之后打开终端,通过ifconfig命令查看虚拟机ip地址

通过查看bee-box漏洞信息,发现在8443端口存在心脏滴血漏洞

使用nmap扫描靶机ip的8443端口看是否存在心脏滴血漏洞

命令nmap -sV -p 8443 --script ssl-heartbleed.nse 192.168.31.127

存在漏洞,打开msf,进行攻击

使用search heartbleed查找攻击模块

使用第一个use auxiliary/scanner/ssl/openssl_heartbleed,使用show options查看需要设置的参数

设置 RHOST、RPOST

1
2
3
4
set RHOST 10.10.10.146
set RPOST 8443
set verbose true #设置成true才能看到泄露的信息
run

运行后可以看到 靶机的64KB信息,如果有人此时在登录web应用,还可以直接抓到账号密码等信息。

本文作者 : W4rnIn9
原文链接 : http://joner11234.github.io/article/f98ca180.html
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!