那么我們今天就來了解一下cors跨域和jsonp劫持漏洞
同源策略
為什么還要講一遍同源策略,我們之前寫xss的時候有講到過,不了解的同學(xué)可以看看我們的那篇xss文章,那么該策略是瀏覽器的一個安全基石,如果沒有同源策略,那么,你打開了一個合法的網(wǎng)站,又打開了一個惡意網(wǎng)站,惡意網(wǎng)站的腳本能夠隨意的操作合法網(wǎng)站的任意可操作資源,沒有任何限制。
cors(跨域資源共享)
CORS(Cross Origin Resource Sharing),跨域資源共享,為了彌補(bǔ)JSONP等跨域常見技術(shù)的缺陷,而提出的安全方便的跨域方案。它允許瀏覽器想跨域服務(wù)器,發(fā)出XMLHttpRequest請求,從而克服AJAX只能同源使用的限制。
CORS需要瀏覽器和服務(wù)器同時支持,相比JSONP更加復(fù)雜,但是一般目前的瀏覽器都是支持的,服務(wù)器只需要進(jìn)行相應(yīng)配置,其通信過程都是瀏覽器自動完成,對于開發(fā)人員來說,跟寫AJAX的代碼沒有區(qū)別,只是會在發(fā)送跨域請求時在HTTP請求頭中添加一些字段來驗證,關(guān)鍵字段如下:
1、Access-Control-Allow-Origin:指定哪些域可以訪問域資源。例如,如果requester.com想要訪問provider.com的資源,那么開發(fā)人員可以使用此標(biāo)頭安全地授予requester.com對provider.com資源的訪問權(quán)限。
2、Access-Control-Allow-Credentials:指定瀏覽器是否將使用請求發(fā)送cookie。僅當(dāng)allow-credentials標(biāo)頭設(shè)置為true時,才會發(fā)送Cookie。
3、Access-Control-Allow-Methods:指定可以使用哪些HTTP請求方法(GET,PUT,DELETE等)來訪問資源。此標(biāo)頭允許開發(fā)人員通過在requester.com請求訪問provider.com的資源時,指定哪些方法有效來進(jìn)一步增強(qiáng)安全性。
CORS實現(xiàn)流程
1、服務(wù)器配置支持CORS,默認(rèn)認(rèn)可所有域都可以訪問
2、瀏覽器客戶端把所在的域填充到Origin發(fā)送跨域請求
3、服務(wù)器根據(jù)資源權(quán)限配置,在響應(yīng)頭中添加ccess-Control-Allow-Origin Header,返回結(jié)果
4、瀏覽器比較服務(wù)器返回的Access-Control-Allow-Origin Header和請求域的Origin,如果當(dāng)前域獲得授權(quán),則將結(jié)果返回給頁面
怎么判斷是否存在cors跨域。
請求投存在origin參數(shù)且可控(不存在可自行添加不影響結(jié)果)
響應(yīng)頭存在下面兩個:1、Access-Control-Allow-Orighin:指定哪些域可以訪問域資源,2、Access-Control-Allow-Credentials:指定瀏覽器是否存將使用請求發(fā)送cookie,僅當(dāng)allow-credentials標(biāo)頭設(shè)置為true時,才會發(fā)送cookie
Access-Control-Allow-Methods:PUT,GET,POST //請求方式
靶機(jī)是這樣的,然后我們開啟burp監(jiān)聽,刷新這個靶機(jī)抓取數(shù)據(jù)包,比如說我們在測試網(wǎng)站的時候,抓到數(shù)據(jù)包

那我們就訪問該網(wǎng)頁抓請求包

將其發(fā)送到repeater模塊,并且點擊go,可以看見它這里返回了一些信息,就是我們上面所說的一些信息。

返回包看見這兩個的時候,可以去測一下這個跨域攻擊。怎么測呢??

那我們添加Origin:http://www.baidu.com這樣一條參數(shù),看它是否可控,那么執(zhí)行之后,我們返回包原本是星號,添加了這一條參數(shù)后,就變成了百度的域名

Cors跨域攻擊有什么用???可以獲取一個用戶的銘感信息,如果能獲取到敏感信息,那么它就是個高危了,可以看見我們的靶機(jī),那么我們就可以確定了他這里存在跨域攻擊

利用的話,就用這個cors的利用靶機(jī)。那我們就選擇get,然后生成poc利用的包

這里它就是一個響應(yīng)的數(shù)據(jù)
Cors和jsonp都是csrf系統(tǒng)里面的一種,是讀取型的

Jsonp劫持
先了解一下什么是JSONP:
JSONP是一種跨域請求資源的解決方案,JSONP可以繞過AJAX遵循的同源策略。
更容易理解的解釋就是:利用"script標(biāo)簽可以跨域請求,并且把返回的結(jié)果當(dāng)作js來執(zhí)行"的特點來獲取第三方的資源
判斷的條件,第一個是跟域沒有關(guān)系,然后它返回的數(shù)據(jù)要是一個json的數(shù)據(jù)并且要有能被調(diào)用的回調(diào)函數(shù),像這種就是一個json的數(shù)據(jù)

allback:
其實callback很好理解,同樣是為了更好的使用第三方數(shù)據(jù),第三方允許"請求方"使用自定義的callback名稱,可以看到我們的靶場這里,可以看見它的參數(shù),有個callback的參數(shù),它的值就是可以調(diào)用的,那回調(diào)函數(shù)是什么?我們常見的話,就是callback參數(shù)的,還有一個jsonpcallback的參數(shù)就叫回調(diào)函數(shù)

什么叫可控呢?安全問題:
當(dāng)攻擊者知道返回資源的地址時,且資源中存在隱私信息。是不是可以構(gòu)造攻擊頁面,誘導(dǎo)用戶訪問并獲取用戶隱私呢?
怎么說呢...
用戶在訪問qq.com時頁面會生成對應(yīng)的Cookie,當(dāng)訪問子域game.qq.com/user?callback=blabla 時頁面將返回game.qq.com下的用戶信息
攻擊者構(gòu)造了攻擊頁面http://www.attack.com/phishing 當(dāng)用戶訪問時將會執(zhí)行攻擊頁面中的js,惡意的js創(chuàng)建了script標(biāo)簽,并以用戶的名義加載game.qq.com/user?callback=blabla

在參數(shù)的值輸入a,它這里就輸出了一個a,輸入之后,它這個頁面能發(fā)送改變,這個就是它的參數(shù)可控參數(shù)就是會被,然后回調(diào)調(diào)用,然后可控。可控之后,就是滿足了我們判斷他這個地方是否存在jsonp劫持的條件,跟域名沒關(guān)系,返回的也是json數(shù)據(jù)

還是利用剛才的那個poc環(huán)境,我們輸入靶機(jī)的漏洞地址,下面輸入回調(diào)參數(shù)的值


防護(hù)建議:1、驗證http referer頭信息,2、在請求中添加csrfToken并在后端進(jìn)行驗證。
最后喜歡我文章的朋友請加圈子關(guān)注我們,私信關(guān)鍵詞:加群。(送免費資料和優(yōu)惠券)
就會自動分享給你群號。歡迎大家加入我們的安全大家庭。提高大家的安全意識,提升大家的網(wǎng)絡(luò)安全技能一直是我們的初衷和愿景,讓我們共同成為守護(hù)信息世界的"SaFeMAN"。
還有可以關(guān)注我們微信公眾號,在公眾號上輸入安界網(wǎng),就可以關(guān)注到我們,領(lǐng)取資料和優(yōu)惠券!!