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

那我們就訪問該網頁抓請求包

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

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

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

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

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

這里它就是一個響應的數據
Cors和jsonp都是csrf系統里面的一種,是讀取型的

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

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

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

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

還是利用剛才的那個poc環境,我們輸入靶機的漏洞地址,下面輸入回調參數的值


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