参考链接:心脏滴血漏洞利用(CVE-2014-0160)_cve-2014-0160漏洞禁用443端口-CSDN博客
目录
OpenSSL简介
漏洞原理
影响版本
漏洞复现
漏洞利用
修复方案
OpenSSL简介
OpenSSL是一个开放源代码的软件库包,提供了一组加密和认证协议,用于保护网络连接和数据传输的安全性。它实现了SSL和TLS协议,包含了主要的密码算法、常用的密钥和整数封装管理功能。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-0160
docker-compose up -d
docker ps
进行信息收集,使用nmap扫描开放端口:
然后使用nmap自带的ssl-heartbleed.nse脚本进行漏洞扫描探测:
存在该漏洞,可以使用Msfconsole工具进行脚本攻击利用:
msfconsole
search heartbleed
use 1
然后查看需要配置的参数:
可知需要配置攻击者的ip和端口
然后还需要设置一个verbose参数为true,目的是为了能够看到泄露的信息,设置后进行攻击
就可以看到靶机的信息了
漏洞利用
使用fofa语法搜一下存在心脏滴血的网站
使用kali攻击
修复方案
升级版本
仅供学习参考!!!!