1、DOM-XSS 漏洞的挖掘與攻擊面延伸目錄DOM-XSS 挖掘與利用DOM-XSS 常見位置DOM-XSS 優勢在哪XSS 巧妙利用DOM-XSS常見位置DOM-XSS 常見位置1、URL代入頁面這類DOM-XSS是最常見的,它的漏洞點通常是以下形式出現DOM-XSS 常見位置它出現的地方比較多,可能會是名稱,地點,標題等等。大多數情況下它和反射型XSS的區別不大,最大的區別是取的值不同。此時取值時,匹配的URL是location.href,這個值包含了 location.search 和location.hash 的值,而 location.hash 的值是不被傳到服務器,并且能被前端JS通
2、過 getUrlParam 函數成功取值。DOM-XSS 常見位置2、跳轉在 javascript 語法中,使用如下代碼可以將頁面進行跳轉操作DOM-XSS 常見位置這樣的跳轉通常會出現在登錄頁、退出頁、中間頁。如果開發者讓用戶可以控制 redirecturl 參數,就可以使用 javascript:alert(1)的形式進行XSS攻擊。最近幾年的APP開發比較熱門,通過web喚起APP的操作也是越來越多,跳轉的協議也是多種多樣,例如 webview:/,myappbridge:/等等。僅僅使用 http 和 https 來判斷URL是否合法已經不適用了,于是由跳轉所產生的DOM-XSS漏洞也
3、逐漸增多。3、postMessageDOM-XSS 常見位置postMessage 支持跨域使用,使用場景比較廣泛,如支付成功、登錄、退出、喚起APP等等。這段代碼中,監聽了message事件,取了 e.data 的值,也就是來自于其他頁面上的message消息,但是沒有檢測來源。如果頁面允許被嵌套,即可嵌套該頁面,再使用 window0.postMessage 即可向該窗口發送數據。DOM-XSS 常見位置DOM-XSS 常見位置4、window.namewindow.name 與其他 window 對象不同,它在窗口刷新后會保留。當這個頁面刷新跳轉到其他網站時,如果這個網站沒有對 wind
4、ow.name 進行設置,那么當前window.name的值仍然是FooDOM-XSS 常見位置5、緩存開發者在緩存前端數據的時候,通常會存在 sessionStorage,localStorage,cookie 中,因為 sessionStorage 在頁面刷新時就失效的特性,利用方式相對簡單的只有后面兩種。DOM-XSS 常見位置Cookie根據瀏覽器的同源策略,Cookie是可以被子域名讀到的。一旦我們發現在http:/ 下可以設置Cookie,就可以結合一些讀取Cookie的頁面進行XSS攻擊。DOM-XSS 常見位置localStoragelocalStorage 的特性和Cooki
5、e類似,但它和Cookie不同的是,Cookie被設置過之后,具有有效期這個特性,而localStorage被設置過后,只要不手動清除或覆蓋,這個值永遠不會消失。Cookie中通常會存放少量的緩存信息,像用戶的頭像URL,用戶名等等,而localStorage中通常會存放一些大量,需要重復加載的數據,如搜索歷史記錄,緩存JS代碼等等。這些值被修改過以后,大部分開發者都不會去校驗它的合法性,是否被修改過。DOM-XSS 優勢在哪DOM-XSS 優勢在哪避開WAF正如我們開頭講的第一種DOM-XSS,可以通過 location.hash 的方式,將參數寫在#號后,既能讓JS讀取到該參數,又不讓該參
6、數傳入到服務器,從而避免了WAF的檢測??梢允褂?ja%0avasc%0aript:alert(1),jx61vascript:alert(1)的形式繞過??梢岳?postMessage,window.name,localStorage 等攻擊點進行XSS攻擊的,攻擊代碼不會經過WAF。DOM-XSS 優勢在哪長度不限當我們可以用當前頁面的變量名作為參數時,可以使用 的方式進行攻擊。DOM-XSS 優勢在哪隱蔽性強攻擊代碼可以具有隱蔽性,持久性。例如使用Cookie和localStorage作為攻擊點的DOM-XSS,非常難以察覺,且持續的時間長。XSS 巧妙利用Chrome Apichro
7、mium支持開發者擴展api。廠商在開發瀏覽器的時候,或是為了自己的業務需求,或是出于用戶體驗,會給瀏覽器擴展上一些自己的接口,這些接口比較隱蔽,且只接口來自于信任域名的數據。但是如果有一個特殊域名下的XSS,或者這個特殊域名可以被跨域,甚至可以找任意一個當前域名的XSS對它進行攻擊。遍歷chrome對象通過以下代碼就可以對當前頁面下的 chrome 對象進行遍歷。XSS IN BROWSER有一款瀏覽器,它的接口特別豐富,現在給大家分享以下之前的調試過程。案例一首先從業務入手,找到了一個叫做game.html的頁面,觀察到頁面上大部分是游戲,使用了上面的代碼對chrome對象進行遍歷之后,發
8、現了browser_game_api的對象,這個繼續遍歷這個api,看它有哪些變量、函數和對象。Download And Run這時候發現了一個函數叫做 downloadAndRun,從函數名來看,這個函數執行的操作是比較危險的。那么這些函數的參數是什么的,暫時不知道,就需要從這個特殊域名下面的頁面中去找。根據函數名搜索,很快就找到了這個函數調用的地方。于是構造攻擊代碼:跨域調用又因為這個站點將自己的 domain 設置成了 ,于是我們可以通過其他 下的XSS來調用它頁面下的接口。利用:首先發現了 https:/ 設置為 ,這樣它就和 game.html 同域了。Run Putty接下來在XS
9、S頁面執行以下代碼,即可在新的窗口彈出 putty.exe。案例二繼續遍歷Api,又發現了一個特殊的接口,用于設置用戶的偏好,其中就包含設置下載目錄。Start Up于是想到了另一種攻擊方式,就是通過調用它自帶的設置偏好接口,將用戶的下載目錄設置為window的啟動目錄C:UsersUserAppDataRoamingMicrosoftWindowsStart MenuProgramsStartupSet Download Path同樣的,找到一個 下的XSS,將自身的 domain 設置成 ,再使用 window.opener 的方式,調用特殊權限頁面的接口進行攻擊。案例三早在2014年12
10、月12日,Rapid7報告了一個漏洞。利用瀏覽器的UXSS實現在 Android 4.3 或更低版本的系統上安裝任意APP。利用三部曲第一點:使用了UXSS作為攻擊手段,在 下調用安裝APP的代碼。利用三部曲第二點:利用了 的可被嵌套的缺陷。我們知道在Android上是沒有 window.opener 這個屬性的,不能通過 window.open 一個窗口再調用它的函數。還有一種利用的方式是通過 iframe 對它進行調用。利用三部曲第三點: 的安裝機制,是在用戶登錄了瀏覽器之后就可以喚起 Google Play 進行安裝。Install package來看一下完整的攻擊流程首先攻擊者注冊成為Google開發者,在應用市場上發布了一款叫做backdoor_app的應用。接著將嵌套至攻擊頁面中,利用UXSS調用安裝代碼。谷歌市場啟動,在后臺進行安裝應用??偨Y隨著瀏覽器的使用范圍越來越廣,我們相信無論是反射型、存儲型還是DOM-XSS,都是不容小覷的。作為開發者,我們要防御的不僅僅是來自于(任何輸入點),有些時候,來源于自己的站點的數據也要加入防御列表。謝 謝!