【新朋友】點擊標題下面藍字「黑白之道」關注
【老朋友】點擊右上角,分享或收藏本頁精彩內容
【公眾號】搜索公眾號:黑白之道,或者ID:i77169
隨著Web應用的流行,安全問題日益受到矚目。目前Web應用的安全性更多依靠Web開發人員來保障,而非依靠客戶端驗證機制。這使得Web應用變的更加靈活可靠,但同時也伴隨著高昂的代價。目前70%的Web應用都非常脆弱,正是由於基於客戶端的認證機制非常容易被繞過。日前,我在一項Web應用中,發現了一個有趣的防範CSRF攻擊的安全機制。
1.簡介
當我們談論CSRF防護時,通常會使用三種方法:
1.檢查Referrer
2.基於表單的隨機Token
3.基於Cookie的隨機Token
目前我們進行的CSRF防護多是使用JavaScript代碼在客戶端進行防護的。
2.分析
我們來看一個HTTP頭
由於沒有使用隨機Token,我們可以說上面這段代碼存在CSRF威脅。為了驗證這點,我創建了一個html頁面:
當我使用一個合法的會話去執行這個頁面的時候,Web應用立即踢出了我,之後我反覆嘗試重新執行,Web應用均立即踢出了我並註銷了我的會話。我猜想可能是Web使用了Referrer進行驗證,所以我手動增加了一個合法的Referrer值,結果Web應用再次註銷了我的會話。
在經歷了數次嘗試之後,我發現了一段用來防護的JavaScript代碼
我們發現這段代碼請求了一個Window.opener值。如果Window.opener的值為空,則Web應用則會踢出我並註銷我們的會話。就CSRF防護來說,這段代碼相當不錯。關於Window.opener請參見:Windows Opener Description
當一個窗口由另一個窗口打開時,這個窗口會維護一個指向前一個窗口的參考值,這個值就是window.opener。如果當前窗口沒有由其他窗口來打開,那麼window.opener值為空。目前Windows Phone瀏覽器不支持window.opener,同時當窗口由不同安全區域的窗口來打開時,IE瀏覽器也不支持window.opener。
那麼現在我們就需要設置window.opener來實現CSRF攻擊。
3.利用
通過分析我找到了一種通過使用HTTP標籤中href屬性來創建Opener值的方法。
首先創建兩個頁面
1.xss.php
2.csrf3.html
1.這兩個頁面都存在於受攻擊的Web伺服器上,暫且假設為"localhost"
在"xss.php"中我創建了一個指向"csrf3.html"的連結,同時使用get方法傳遞一個名為"zip"的變量。這裡我們假設zip變量沒有進行任何過濾。那麼我們使用href進行如下注入:
href="http://127.0.0.1/csrf3.html">Link For Target Application
2.對於csrf3.html我們使用之前的代碼
最終我們發向目標的URL為
http://127.0.0.1/xss.php?zip= href="http://127.0.0.1/csrf3.html">Link For Target Application
效果截圖如下:
3.現在我成功了,在檢查過href給的連結後,我可以打開新的頁面而不被Web應用踢出了,同時也繞過了CSRF的防護。
4.結論
就像我們平時常說的基於客戶端的驗證機制不是一個很好的方法。經過這次實驗,我想說使用新的方法去防護Web應用攻擊是非常不錯的,但我們必須要注意具體的實現方式。
比特幣贊助打賞地址:13sbdFRyFBeqmXY9GJQf66s5cwmvLvWaAD
----
要聞、乾貨、原創、專業
關注「黑白之道」 微信:i77169
華夏黑客同盟我們堅持,自由,免費,共享!