XSS Payload 学习浏览器解码

目录

问题一:

问题二:

问题三:

问题四:

问题五:

问题六:

问题七:

问题八:

问题九:

问题十:

问题十一:

问题十二:

问题十三:

问题十四:

问题十五:


问题一:

<a href="%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29"></a>

无法弹窗

原因:urlcode无法识别协议(javascript:

 html解码顺序:1、html实体编码 2、urlcode编码 3, unicode编码

问题二:

<ahref="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:%61%6c%65%72%74%28%32%29">

可以弹窗

首先

先HTML实体编码解码,得到

<a href="javascript:%61%6c%65%72%74%28%32%29">

href中为URL,URL模块可识别为javascript协议,进行URL解码,得到

<a href="javascript:alert(2)">   

由于是javascript协议,解码完给JS模块处理,于是被执行

问题三:

<a href="javascript%3aalert(3)"></a>

不能弹窗

依然是编码了协议  (javascript:)冒号也属于协议中一部分,导致了url模块不认识这个协议,所以不能弹窗。

问题四:

<div>&#60;img src=x οnerrοr=alert(4)&#62;</div>

不能弹窗

HTML解析器作为一个状态机 在解析过程中,任何时候它只要遇到一个'<'符号(后面没有跟'/'符号)就会进入“标签开始状态(Tag open state)”。然后转变到“标签名状态(Tag name state)”,“前属性名状态(before attribute name state)”......最后进入“数据状态(Data state)”并释放当前标签的token。当解析器处于“数据状态(Data state)”时,它会继续解析,每当发现一个完整的标签,就会释放出一个token。

当解析器解析完“<div>”并处于“数据状态”时,“<”和“>”字符 将会被解析,当解析器遇到“&”字符,它会知道这是“数据状态的字符引用”,但是不会被执行。因为解析器在解析这个字符引用后不会转换到“标签开始状态”。只能原样输出。

问题五:

<textarea>&#60;script&#62;alert(5)&#60;/script&#62;</textarea>

不能弹窗

RCDATA的概念 在HTML中有五类元素:

  1. 空元素(Void elements),如<area>, ,<base>等等

  2. 原始文本元素(Raw text elements),有<script>和<style>

  3. RCDATA元素(RCDATA elements),有<textarea>和<title>

  4. 外部元素(Foreign elements),例如MathML命名空间或者SVG命名空间的元素

  5. 基本元素(Normal elements),即除了以上4种元素以外的元素

五类元素的区别如下:

  1. 空元素,不能容纳任何内容(因为它们没有闭合标签,没有内容能够放在开始标签和闭合标签中间)。

  2. 原始文本元素,可以容纳文本。

  3. RCDATA元素,可以容纳文本和字符引用。

  4. 外部元素,可以容纳文本、字符引用、CDATA段、其他元素和注释

  5. 基本元素,可以容纳文本、字符引用、其他元素和注释

这是一种可以容纳字符引用的情况“RCDATA状态中的字符引用”。这意味着在<textarea>和<title>标签中的字符引用会被HTML解析器解码。这里要再提醒一次,在解析这些字符引用的过程中不会进入“标签开始状态”。这样就可以解释问题5了。和问题四的原因一样,&#60解析<出来后不能进入“标签开始状态”

问题六:

<textarea><script>alert(6)</script></textarea>

不能弹窗

<textarea><title>下写任何标签都是不能执行的

问题七:

<button οnclick="confirm('7&#39;);">Button</button>

可以弹窗

&#39html实体编码被解码成 '

问题八:

<button οnclick="confirm('8\u0027);">Button</button>

不能弹窗

js中unicode编码出符号,但是不能识别符号()" ' + - 。

问题九:

<script>&#97;&#108;&#101;&#114;&#116&#40;&#57;&#41;&#59</script>

不能弹窗

原始文本元素(Raw text elements),有<script>和<style> 只能容纳文本 原样输出

问题十:

<script>\u0061\u006c\u0065\u0072\u0074(10);</script>

可以弹窗

js中unicode编码出字符,JS中能够识别字符

问题十一:

<script>\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0031\u0029</script>

不能弹窗

和问题八一样不能识别符号

问题十二:

<script>\u0061\u006c\u0065\u0072\u0074(\u0031\u0032)</script>

不能弹窗

\u0031\u0032在解码的时候会被unicode解码为字符串12,注意是字符串,不是数字,文字显然是需要引号的

问题十三:

<script>alert('13\u0027)</script>

不能弹窗

和问题八一样

问题十四:

<script>alert('14\u000a')</script>

可以弹窗

\u000a在JavaScript里是换行,就是\n,直接执行

问题十五:

<a href="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x33;&#x31;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x36;&#x33;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x33;&#x35;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x37;&#x25;&#x33;&#x32;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x37;&#x25;&#x33;&#x34;&#x28;&#x31;&#x35;&#x29;"></a>

可以弹窗

先HTML实体编码解码,得到

<a href="javascript:%5c%75%30%30%36%31%5c%75%30%30%36%63%5c%75%30%30%36%35%5c%75%30%30%37%32%5c%75%30%30%37%34(15)"></a>

javascript:协议出来后 urlcode 才能识别,在href中由URL模块处理,解码得到

javascript:\u0061\u006c\u0065\u0072\u0074(15)

然后由JS模块处理,解码得到

javascript:alert(15)

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值