偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

如何全面掌控session?且看WebSocket跨站劫持

安全 應(yīng)用安全
WebSockets是一個(gè)能夠給單TCP連接提供全雙工信道的HTML5特性。它的持續(xù)性連接功能,使得構(gòu)建B/S模式的實(shí)時(shí)應(yīng)用成為可能。Websockets常常用在那些帶有聊天功能的WEB應(yīng)用上。

WebSockets是一個(gè)能夠給單TCP連接提供全雙工信道的HTML5特性。它的持續(xù)性連接功能,使得構(gòu)建B/S模式的實(shí)時(shí)應(yīng)用成為可能。Websockets常常用在那些帶有聊天功能的WEB應(yīng)用上。

下面的圖片就非常貼切地闡釋了一個(gè)APT攻擊用到的websockets:

如何全面掌控session?且看WebSocket跨站劫持

科普:

同源策略(Same origin policy):同源是指,域名,協(xié)議,端口相同,即瀏覽器會(huì)檢查同一瀏覽器的不同選項(xiàng)卡中,來源相同的腳本才能跨選項(xiàng)卡執(zhí)行。

Origin字段:瀏覽器在發(fā)送POST請(qǐng)求的時(shí)候可能會(huì)加上一個(gè)Origin字段,這個(gè)Origin字段主要是用來標(biāo)識(shí)出最初請(qǐng)求是從哪里發(fā)起的。如果瀏覽器不能確定源在哪里,那么在發(fā)送的請(qǐng)求里面Origin字段的值就為空。

IronWASP:某開源WEB測試平臺(tái),用戶可以自定義安全掃描,并且可以自己用python/ruby來定義插件系統(tǒng)。相關(guān)介紹見:http://www.freebuf.com/tools/32948.html

ZAP(Zed Attack Proxy):是一款集成各種工具的滲透測試框架,可以發(fā)現(xiàn)在WEB應(yīng)用程序中的漏洞,相關(guān)介紹見:http://www.freebuf.com/tools/5427.html

WebSocket的安全評(píng)估

最近,我們對(duì)一個(gè)擁有復(fù)雜菜單選項(xiàng)和功能的WEB應(yīng)用做了安全評(píng)估。該應(yīng)用中大部分操作都用到了web-sockets,這意味著其大多數(shù)行為都不會(huì)記錄到http代理日志上。

首先,我們打開主頁后,網(wǎng)站會(huì)加載一個(gè)帶有JS腳本和CSS文件的靜態(tài)網(wǎng)頁。此后,整個(gè)通信交互會(huì)轉(zhuǎn)為Websockets模式,瀏覽器和服務(wù)端之間會(huì)建立websocket連接,從而加載網(wǎng)站里所有可見的HTML資源。點(diǎn)擊鏈接或者提交Form表單時(shí),瀏覽器會(huì)向服務(wù)端發(fā)送一些WebSocket消息。服務(wù)器處理了這些消息后,會(huì)通過WebSocket進(jìn)行反饋,而后客戶端瀏覽器會(huì)展示新的HTML內(nèi)容。

這時(shí)當(dāng)websocket消息在進(jìn)行交互時(shí),通信數(shù)量是非常巨大的。每隔一秒它們之間會(huì)有心跳探測包的交互。然而現(xiàn)有的工具達(dá)不到我的要求,我不得不給IronWASP添加了一個(gè)Websocket消息分析裝置和一個(gè)WebSocket客戶端,這樣它才能識(shí)別Websocket從而嘗試fuzz其漏洞。你可以在在這里了解下相關(guān)知識(shí)。

在測試這個(gè)應(yīng)用時(shí),我發(fā)現(xiàn)它存在WebSocket跨站劫持(Cross-Site WebSocket Hijacking)漏洞(由christian schneider首創(chuàng))。當(dāng)然,我會(huì)在給大家介紹測試方法之前,解釋下這個(gè)漏洞的影響。在測試相關(guān)Websockets應(yīng)用之前,我們需要先做下準(zhǔn)備。#p#

WebSocket跨站劫持漏洞實(shí)驗(yàn)準(zhǔn)備

大家應(yīng)該明白,同源策略(SOP)不會(huì)通過瀏覽器在websockets上強(qiáng)制執(zhí)行(同一瀏覽器下,受SSL保護(hù)的頁面,不會(huì)讓非SSL的WebSocket通過),我們測試的應(yīng)用采用了http cookie作為session認(rèn)證,WebSocket通過瀏覽器發(fā)送的消息不會(huì)有Session ID或是隨機(jī)參數(shù)。

這樣一來,如果某用戶登錄了帶有漏洞的WEB應(yīng)用,然后在同一瀏覽器還打開了http://attacker.com(攻擊者的網(wǎng)站),http://attacker.com可以嘗試通過該漏洞應(yīng)用與應(yīng)用的服務(wù)端建立一個(gè)WebSocket連接,然后通過瀏覽器發(fā)送一個(gè)帶有效的認(rèn)證Session ID的請(qǐng)求包。于是,這個(gè)由攻擊者網(wǎng)站建立的WebSocket連接會(huì)和應(yīng)用本身有相同的權(quán)限。

由于整個(gè)應(yīng)用都是以websockets為基礎(chǔ)運(yùn)行的,劫持了WebSocket就相當(dāng)于劫持了用戶的session。所以這個(gè)漏洞在本質(zhì)上和存儲(chǔ)型跨站腳本漏洞是一樣的。

如果你認(rèn)為這就很糟了,那當(dāng)你聽到某些情況下WebSocket跨站腳本,甚至可以在用戶系統(tǒng)上實(shí)現(xiàn)遠(yuǎn)程代碼執(zhí)行的時(shí)候,會(huì)不會(huì)更驚訝呢?事見IPython Notebook的案例。

測試之前,你首先要做的就是確認(rèn)該應(yīng)用是否存在WebSockets。幸運(yùn)的是,做這個(gè)非常簡單,你只需要知道以下三點(diǎn):

1.WebSocket的URL連接一般是以ws://或者wss://開頭的。

2.需要檢測建立連接的Origin頭,該網(wǎng)頁可能是通過Origin字段建立的WebSocket鏈接。

3.瀏覽器和服務(wù)端之間發(fā)送的消息中,我們可以從中檢查出普通WebSocket連接的特征。

下面這張圖會(huì)給你展示:如何通過IronWASP日志得到Origin字段的值和WebSocket的URL值。

如何全面掌控session?且看WebSocket跨站劫持

一旦你得到這些信息,你可以使用一些特殊方法,對(duì)跨站W(wǎng)ebSocket劫持漏洞進(jìn)行檢測。我在這里例舉三個(gè)簡單的例子:

使用代理軟件(如Burpsuite):

這里必須提到的是,burpsuite可以捕獲和記錄WebSockets的消息。而ZAP和IronWASP是我所知道的,可以重放websocket請(qǐng)求的軟件。

在burpsuite里,我們不能重放websockets消息,但我們還是可以在有限條件下,檢測WebSocket握手包是否成功。為了進(jìn)行測試,我們需要分析websocket的升級(jí)請(qǐng)求包:它們會(huì)通過http或者h(yuǎn)ttps發(fā)送,因此可以被重放。

以下截圖為burpsuite重放器(Repeat選項(xiàng)卡)的記錄,其顯示了websocket連接的有效請(qǐng)求和應(yīng)答情況:

如何全面掌控session?且看WebSocket跨站劫持

為了測試這個(gè)漏洞,我們需要發(fā)送另一個(gè)帶有重制后的Origin頭的請(qǐng)求包。如果我們回應(yīng)包里有“101 Web Socket Protocol Handshake”的標(biāo)志,這就表示W(wǎng)ebSocket已經(jīng)建立成功了。

如果連接沒有建立成功,那就意味著該應(yīng)用不存在這個(gè)漏洞,因?yàn)樗鼤?huì)拒絕外部的WebSocket連接。建立成功后,我們就可以開始下一步測試,看看該應(yīng)用是否有WebSocket跨站劫持漏洞。這里需要說明一下:即使已經(jīng)建立連接,也需要其如Origin的正常連接一般,確認(rèn)得到服務(wù)端對(duì)WebSocket消息的應(yīng)答之后,才能證明該應(yīng)用存在漏洞。這是因?yàn)殚_發(fā)者可能會(huì)同時(shí)啟用Origin檢測與連接權(quán)限認(rèn)證。因此我們的實(shí)驗(yàn)中也許會(huì)出下面這種情況:建立的連接可以一直保持,但擁有外部來源的Origins不會(huì)通過認(rèn)證。

ZAP可以重放WebSocket消息,但據(jù)我了解,它并不能更改Origin頭。下面介紹的方法可以給你科普下,如何通過CSWSH(WebSocket跨站劫持)來獲得更多的東西。#p#

使用WebSocket跨站劫持的在線測試工具

打開需要測試的WEB應(yīng)用登入其中,然后在同一瀏覽器中開一個(gè)新選項(xiàng)卡,訪問http://ironwasp.org/cswsh.html(模擬的黑客網(wǎng)站),輸入該WebSocket的URL地址,然后點(diǎn)擊網(wǎng)頁上的Connect按鈕。一旦建立連接,你就可以通過這個(gè)頁面向WebSocket的服務(wù)器發(fā)送消息。我們需要通過重放有效session發(fā)送過的消息,然后查看服務(wù)器的回應(yīng)包。

如果服務(wù)端的回應(yīng)與前面有效session發(fā)送的正常包相同,那就說明該應(yīng)用可能存在WebSocket跨站劫持漏洞。

如何全面掌控session?且看WebSocket跨站劫持 

如何全面掌控session?且看WebSocket跨站劫持

 

使用IronWASP

IronWASP可以做到更多,即使是最基礎(chǔ)的檢測也能提供自動(dòng)化腳本檢查。

使用IronWASP的WebSocket客戶端

以上測試Origin的方法的使用的服務(wù)端是http://ironwasp.org,如果你想要更加靈活地設(shè)置Origin值,你可以使用IronWASP的客戶端功能。它允許你自定義Origin值來測試WebSocket連接。

如何全面掌控session?且看WebSocket跨站劫持

在以下環(huán)境下可能會(huì)用到客戶端功能:

1.應(yīng)用允許來自開放的Origin的WebSocket連接

2.應(yīng)用允許來自localhost和內(nèi)網(wǎng)IP的Origin字段值

這種做法是為了方便開發(fā)者和應(yīng)用的內(nèi)部測試。通過使用IronWASP的客戶端,你可以嘗試內(nèi)網(wǎng)IP或者localhost作為Origin是否能夠生效。如果可以的話,那沒準(zhǔn)兒你可以耍一點(diǎn)小手段,在真實(shí)環(huán)境下利用這個(gè)漏洞。比如,如果某個(gè)應(yīng)用允許http:/127.0.0.1:8080作為Origin字段,那我們就可以這樣做:若受害者正好有個(gè)在本地8080端口運(yùn)行的WEB應(yīng)用,而且其存在跨站腳本漏洞。如果滿足這些條件,黑客可以先在該WEB應(yīng)用上進(jìn)行跨站攻擊,然后再向目標(biāo)應(yīng)用服務(wù)端建立WebSocket連接:

如何全面掌控session?且看WebSocket跨站劫持

使用IronWASP的WebSocket API進(jìn)行自動(dòng)化檢測

如果你需要利用localhost或者內(nèi)網(wǎng)IP進(jìn)行測試Origin頭,使用客戶端腳本進(jìn)行自動(dòng)化檢測會(huì)讓你的行動(dòng)更加輕松。IronWASP允許你使用Python或者Ruby進(jìn)行實(shí)現(xiàn)自定義腳本編寫。

下面這個(gè)腳本可以單獨(dú)檢測Origin頭里填充的內(nèi)網(wǎng)IP地址,測試服務(wù)端對(duì)此是否認(rèn)可:

import clr
clr.AddReference("WebsocketClient.exe")
from WebsocketClient import *
def check_conn(origin):
print "Testing origin - " + origin
ws = SyncWebsockClient()
ws.Connect("ws://tatgetapp.com/ws", origin, "SessionID=KSDI2923EWE9DJSDS01212")
ws.Send("first message to send")
msg = ws.Read()
ws.Close()
if msg == "message that is part of valid session":
print "Connection successful!!"
return True
else:
return False
def check_nw():
for nws in ["192.168.0.0/16", "172.16.0.0/12", "10.0.0.0/8"]:
for ip in Tools.NwToIp(nws):
if check_conn("http://" + ip):
break
check_nw()

原文地址:https://www.notsosecure.com/blog/2014/11/27/how-cross-site-websocket-hijacking-could-lead-to-full-session-compromise/

責(zé)任編輯:藍(lán)雨淚 來源: FreeBuf
相關(guān)推薦

2019-01-09 16:28:50

2010-06-07 20:19:49

2011-06-27 09:40:09

Linux歷史命令

2010-09-09 11:19:10

2011-09-29 11:22:47

Linux 歷史命令

2014-08-23 16:07:55

APM應(yīng)用性能管理

2009-05-04 16:09:04

2009-09-25 09:46:03

Hibernate s

2016-01-15 10:19:30

2012-04-12 15:42:35

2020-12-21 09:40:06

腳本攻擊XSS漏洞

2012-11-15 09:51:36

2015-11-16 15:44:28

Informatic

2009-03-09 17:19:53

2020-12-30 09:05:46

AI人工智能勸婚又勸學(xué)

2017-01-23 10:10:09

2010-09-27 17:37:10

2024-08-07 11:06:49

2016-01-11 09:23:00

Saas云計(jì)算

2011-02-23 10:37:29

人才
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)