此仓库专注于构建一个容器,以创建一个易于利用 Heartbleed 技术攻击 Nginx 的环境,重点包括:

CVE-2014-0160 问题出现在 OpenSSL 库提供 TLS 心跳功能时,缓冲区大小设置为 64KB,造成内存泄漏,从而导致服务器内存中的敏感信息泄露。
Web 应用正在处理一些敏感消息,这些消息被 Nginx 缓存在内存中。
我们通过检查环境是否支持 TLS 心跳来实施利用
openssl s_client -connect : -tlsdebug
注意:现代 OpenSSL 版本可能已不再支持 TLS 心跳协议,请使用仍支持该协议的版本。
Heartbleed 是一种越界读取(out-of-bounds read)漏洞,具有随机性。 服务器将返回相邻的 64KB 内存。
一个心跳报文的头部(RFC6520) 18 03 02 00
使用 docker build 来构建 heartbleed 实验环境
docker build -t heartbleed-lab .
docker run heartbleed-lab -p port:8443
Web 应用的默认服务端口为 8443
使用载荷 heartbleed.py 进行测试 我们可以观察到载荷以 hexdump 格式返回结果。
在示例 dump 中,我们可以看到刚刚发送的请求以及大部分内存区域为 0x00。由于载荷具有随机性,我们需要多次运行才能泄漏出期望的结果。
我们可以运行 memory.py 向 Nginx 发送请求,将数据存入内存, 然后获得泄漏结果,如 result.txt 所示。
由于我们知道攻击者会利用心跳请求来泄漏消息
alert tcp any any -> any 443 (msg:"Heartbeat request"; content:"|18 03 02 00|"; rawbytes;sid:100000)
使用 Snort 入侵检测系统进行检测。